<?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>140053</bug_id>
          
          <creation_ts>2015-01-04 08:56:18 -0800</creation_ts>
          <short_desc>Web Inspector: purge PassRefPtr from Inspector code and use Ref for typed and untyped protocol objects</short_desc>
          <delta_ts>2015-01-14 15:00:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>140002</dependson>
    
    <dependson>140187</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>mattbaker</cc>
    
    <cc>mkwst</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1058541</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-04 08:56:18 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058542</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-01-04 08:56:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/19370241&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058803</commentid>
    <comment_count>2</comment_count>
      <attachid>244000</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-05 13:55:02 -0800</bug_when>
    <thetext>Created attachment 244000
Patch

Attached patch does not apply to ToT yet. Please review anyway, I will upload another patch until EWS runs cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058834</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-01-05 15:33:36 -0800</bug_when>
    <thetext>Did you r+ your own patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058858</commentid>
    <comment_count>4</comment_count>
      <attachid>244000</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-05 16:59:18 -0800</bug_when>
    <thetext>Comment on attachment 244000
Patch

Doh, wrong button. Was running out the door. Thanks Joe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059125</commentid>
    <comment_count>5</comment_count>
      <attachid>244000</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-01-06 12:49:58 -0800</bug_when>
    <thetext>Comment on attachment 244000
Patch

This looks very good to me. You should upload a new version for EWS once the dependencies have landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059163</commentid>
    <comment_count>6</comment_count>
      <attachid>244096</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-06 14:29:10 -0800</bug_when>
    <thetext>Created attachment 244096
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059164</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-06 14:30:22 -0800</bug_when>
    <thetext>This patch modifies the WEB_REPLAY inputs generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-input-generator-tests --reset-results`)

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>1059165</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-06 14:30:46 -0800</bug_when>
    <thetext>Attachment 244096 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorIndexedDBAgent.cpp:547:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:190:  out_optionalValueFound is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/page/PageConsoleClient.h:59:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 122 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059287</commentid>
    <comment_count>9</comment_count>
      <attachid>244125</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-06 19:23:16 -0800</bug_when>
    <thetext>Created attachment 244125
EWS round 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059298</commentid>
    <comment_count>10</comment_count>
      <attachid>244128</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-06 19:52:40 -0800</bug_when>
    <thetext>Created attachment 244128
EWS round 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059316</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-06 21:01:20 -0800</bug_when>
    <thetext>Attachment 244128 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorIndexedDBAgent.cpp:547:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:190:  out_optionalValueFound is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/page/PageConsoleClient.h:59:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 124 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059399</commentid>
    <comment_count>12</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-07 09:33:18 -0800</bug_when>
    <thetext>Committed r178039: &lt;http://trac.webkit.org/changeset/178039&gt;

will be watching bots for next few hours in case any surprises.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059431</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 11:28:47 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 140187</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059544</commentid>
    <comment_count>14</comment_count>
      <attachid>244205</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-01-07 14:34:54 -0800</bug_when>
    <thetext>Created attachment 244205
[PATCH] ObjC side fixes

These were the fixes to the generate necessary for the ObjC code changes. Brian, do these look good to you? If so, I can re-land your patch, with these changes, and with the Internal side of this (PassRefPtr -&gt; RefPtr&amp;&amp; necessary changes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059569</commentid>
    <comment_count>15</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-01-07 15:29:28 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/178060</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061326</commentid>
    <comment_count>16</comment_count>
      <attachid>244128</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-14 15:00:11 -0800</bug_when>
    <thetext>Comment on attachment 244128
EWS round 3

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

&gt; Source/WebCore/page/PageConsoleClient.cpp:156
&gt; -        ConsoleClient::printConsoleMessageWithArguments(MessageSource::ConsoleAPI, type, level, exec, arguments.release());
&gt; +        ConsoleClient::printConsoleMessageWithArguments(MessageSource::ConsoleAPI, type, level, exec, WTF::move(arguments));

This cannot work, we already moved out of arguments a few lines above.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244000</attachid>
            <date>2015-01-05 13:55:02 -0800</date>
            <delta_ts>2015-01-06 12:49:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>stuff.patch</filename>
            <type>text/plain</type>
            <size>632158</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU4M2RmODYuLjczN2Y2MTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxNS0wMS0wNCAgQnJpYW4gSi4gQnVy
ZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHVy
Z2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZvciB0eXBlZCBh
bmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlcGxhY2VzIHVzZXMgb2YgUGFzc1JlZlB0
ciB3aXRoIHVzZXMgb2YgUmVmUHRyJiYgYW5kIFdURjo6bW92ZSgpIGluIGNvZGUKKyAgICAgICAg
cmVsYXRlZCB0byBXZWIgSW5zcGVjdG9yLiBJdCBhbHNvIGNvbnZlcnRzIG1hbnkgdXNlcyBvZiBS
ZWZQdHIgdG8gUmVmIHdoZXJlCisgICAgICAgIHJlZmVyZW5jZXMgYXJlIGFsd2F5cyBub24tbnVs
bC4gVGhlc2UgdHdvIHJlZmFjdG9yaW5ncyBoYXZlIGJlZW4gY29tYmluZWQgc2luY2UKKyAgICAg
ICAgdGhleSB0ZW5kIHRvIHJlcXVpcmUgc2ltaWxhciBjaGFuZ2VzIHRvIHRoZSBjb2RlLgorCisg
ICAgICAgIENyZWF0aW9uIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMgb2YgSW5zcGVjdG9yVmFsdWUg
bm93IHJldHVybiBhIFJlZiwgYW5kIGNhbGxzaXRlcworICAgICAgICBoYXZlIGJlZW4gdXBkYXRl
ZCB0byB0YWtlIGEgUmVmIGluc3RlYWQgb2YgUmVmUHRyLgorCisgICAgICAgIEJ1aWxkZXJzIGZv
ciB0eXBlZCBwcm90b2NvbCBvYmplY3RzIG5vdyByZXR1cm4gYSBSZWYuIFNpbmNlIHRoZXJlIGlz
IG5vIGltcGxpY2l0CisgICAgICAgIGNhbGwgdG8gb3BlcmF0b3ImLCBjYWxsc2l0ZXMgbm93IG11
c3QgZXhwbGljaXRseSBjYWxsIC5yZWxlYXNlKCkgdG8gY29udmVydCBhCisgICAgICAgIGJ1aWxk
ZXIgb2JqZWN0IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdG9jb2wgb2JqZWN0IG9uY2UgcmVx
dWlyZWQgZmllbGRzIGFyZSBzZXQuCisgICAgICAgIFVwZGF0ZSBjYWxsc2l0ZXMgYW5kIHVzZSAn
YXV0bycgdG8gZWxpbWluYXRlIHJlcGV0aXRpb24gb2YgbG9uZ3dpbmRlZCBwcm90b2NvbCB0eXBl
cy4KKworICAgICAgICBUZXN0cyBmb3IgaW5zcGVjdG9yIHByb3RvY29sIGFuZCByZXBsYXkgaW5w
dXRzIGhhdmUgYmVlbiByZWJhc2VsaW5lZC4KKworICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OmpzVG9JbnNwZWN0b3JWYWx1ZSk6CisgICAg
ICAgIChEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3MvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1l
c3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9u
dGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpidWlsZE9iamVjdEZv
clNlYXJjaE1hdGNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Q29udGVudFNlYXJjaFV0aWxpdGll
czo6c2VhcmNoSW5UZXh0QnlMaW5lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFy
Y2hVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRC
YXNlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZh
bENhbGwpOiBTcGxpdCB0aGUgZWFybHkgZXhpdHMuCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2Vu
ZElmQWN0aXZlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzZW5kUmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcik6CisgICAgICAgIChJbnNwZWN0b3I6
OmdldFByb3BlcnR5VmFsdWUpOiBBZGQgYSBjb21tZW50IHRvIGNsYXJpZnkgd2hhdCB0aGlzIGNs
ZXZlciBjb2RlIGRvZXMuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOiBVc2UgYSB0eXBlZCBwcm90b2Nv
bCBvYmplY3QgdG8gY29sbGVjdAorICAgICAgICBwcm90b2NvbCBlcnJvciBzdHJpbmdzLgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIpOgorICAgICAgICBDb252ZXJ0
IHRoZSBzdXBwbGVtZW50YWwgZGlzcGF0Y2hlcidzIHJlZmVyZW5jZSB0byBSZWYgc2luY2UgaXQg
aXMgbmV2ZXIgbnVsbC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oOiBHZXQgcmlk
IG9mIEFycmF5SXRlbUhlbHBlciBhbmQKKyAgICAgICAgU3RydWN0SXRlbVRyYWl0cy4gQWRkIG1v
cmUgdmVyc2lvbnMgb2YgYWRkSXRlbSB0byBoYW5kbGUgcHVzaGluZyB2YXJpb3VzIHR5cGVzLgor
ICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6Om9wZW5BY2Nlc3NvcnMpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6OmFkZEl0ZW0pOgorICAgICAgICAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzOjpwdXNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkFycmF5PFQ+Pjo6cnVudGltZUNhc3QpOiBB
c3NlcnQgYXJndW1lbnQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVt
VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5SXRlbUhlbHBlcjxTdHJpbmc+OjpUcmFpdHM6OnB1c2hSYXcpOiBEZWxldGVkLgor
ICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0
czo6cHVzaFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eUl0ZW1IZWxwZXI8ZG91YmxlPjo6VHJhaXRzOjpwdXNoUmF3KTogRGVsZXRlZC4KKyAgICAgICAg
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBlcjxib29sPjo6VHJhaXRzOjpwdXNo
UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhl
bHBlcjxJbnNwZWN0b3JWYWx1ZT46OlRyYWl0czo6cHVzaFJlZlB0cik6IERlbGV0ZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0
Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT46OlRyYWl0czo6cHVzaFJlZlB0
cik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxw
ZXI8UHJvdG9jb2w6OkFycmF5PFQ+Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDogU3RyYWlnaHRlbiBvdXQgZ2V0
QXJyYXkgYW5kIGdldE9iamVjdCB0byBoYXZlCisgICAgICAgIHRoZSBzYW1lIGNhbGwgc2lnbmF0
dXJlIGFzIG90aGVyIGdldHRlcnMuIFVzZSBSZWYgd2hlcmUgcG9zc2libGUuCisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xlYW4pOgorICAgICAgICAoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdEJhc2U6OmdldFZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXlCYXNlOjpnZXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5OjpjcmVhdGUpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6bnVsbCk6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVl
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hWYWx1ZSk6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaE9iamVjdCk6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaEFycmF5KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rv
cjo6SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnQp
OgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVF
bmQpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRp
bWVTdGFtcCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRy
b2xsZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRD
YWxsRnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHRDYWxsRnJhbWU6OmJ1aWxk
SW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmg6
CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OlNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U2Ny
aXB0Q2FsbFN0YWNrOjpidWlsZEluc3BlY3RvckFycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
U2NyaXB0Q2FsbFN0YWNrLmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
Z2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50OjplbmFibGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdCk6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWluKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2VydCk6CisgICAgICAgIChJ
bnNwZWN0b3I6OmJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZSk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAg
ICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9j
YXRpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNv
bHZlQnJlYWtwb2ludCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1ApOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1l
cyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNl
U291cmNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJl
YWtwb2ludEFjdGlvblByb2JlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmJ1aWxkRXJyb3JSYW5nZU9i
amVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Omdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoQ3BwR2VuZXJhdG9y
LmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKToKKyAgICAgICAgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6CisgICAgICAgIChD
cHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKToKKyAgICAgICAgKENw
cEdlbmVyYXRvcik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3Bw
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAg
ICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3luY19o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3Jf
ZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvci5n
ZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVj
bGFyYXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJl
cik6CisgICAgICAgIChfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdf
dHJhaXRzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Nv
bmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9j
a19mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAg
IChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRl
X2V2ZW50KToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogcmVwbGF5L0VuY29kZWRW
YWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6YXNPYmplY3QpOgorICAgICAg
ICAoSlNDOjpFbmNvZGVkVmFsdWU6OmFzQXJyYXkpOgorICAgICAgICAoSlNDOjpFbmNvZGVkVmFs
dWU6OnB1dDxFbmNvZGVkVmFsdWU+KToKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphcHBl
bmQ8RW5jb2RlZFZhbHVlPik6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6Z2V0PEVuY29k
ZWRWYWx1ZT4pOgorICAgICAgICAqIHJlcGxheS9FbmNvZGVkVmFsdWUuaDoKKyAgICAgICAgKiBy
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5OgorICAgICAgICAoVHlw
ZS5ib3Jyb3dfdHlwZSk6CisgICAgICAgIChUeXBlLmFyZ3VtZW50X3R5cGUpOgorICAgICAgICAo
R2VuZXJhdG9yLmdlbmVyYXRlX21lbWJlcl9tb3ZlX2V4cHJlc3Npb24pOgorICAgICAgICAqIHJ1
bnRpbWUvQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OnBy
aW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNs
aWVudDo6aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6CisgICAgICAgIChKU0M6OkNv
bnNvbGVDbGllbnQ6OmxvZ1dpdGhMZXZlbCk6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6
OmNsZWFyKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6ZGlyKToKKyAgICAgICAgKEpT
Qzo6Q29uc29sZUNsaWVudDo6ZGlyWE1MKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6
dGFibGUpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojp0cmFjZSk6CisgICAgICAgIChK
U0M6OkNvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkNvbnNv
bGVDbGllbnQ6Omdyb3VwKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6Z3JvdXBDb2xs
YXBzZWQpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojpncm91cEVuZCk6CisgICAgICAg
ICogcnVudGltZS9Db25zb2xlQ2xpZW50Lmg6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0LmNw
cDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKToK
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9UeXBlU2V0Lmg6CisKIDIwMTUtMDEtMDMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBh
cHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gb3BlcmF0aW9uTmV3RnVuY3Rpb24gd2hlbiBz
Y3JvbGxpbmcgb24gR29vZ2xlKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRWYWx1ZS5jcHAKaW5kZXggZDA0NmFiMi4uOWUyMjUxZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCkBAIC05OCw3ICs5OCw3IEBAIGJv
b2wgU2NyaXB0VmFsdWU6OmlzRnVuY3Rpb24oKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9yVmFs
dWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgaW50IG1heERlcHRoKQor
c3RhdGljIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0
ZSogc2NyaXB0U3RhdGUsIEpTVmFsdWUgdmFsdWUsIGludCBtYXhEZXB0aCkKIHsKICAgICBpZiAo
IXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTIzLDcgKzEyMyw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUo
RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWCiAKICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkg
ewogICAgICAgICBpZiAoaXNKU0FycmF5KHZhbHVlKSkgewotICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBpbnNwZWN0b3JBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
KyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gaW5zcGVjdG9yQXJyYXkgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXko
dmFsdWUpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0x
MzEsMTEgKzEzMSwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0lu
c3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVgogICAgICAgICAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNUb0luc3BlY3RvclZhbHVl
KHNjcmlwdFN0YXRlLCBlbGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFl
bGVtZW50VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoZWxlbWVudFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBpbnNwZWN0b3JBcnJheS0+cHVzaFZhbHVlKFdURjo6bW92ZShlbGVtZW50VmFs
dWUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpbnNwZWN0b3JBcnJheTsK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoaW5zcGVjdG9yQXJyYXkpOwogICAgICAgICB9
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3Rvck9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGluc3Bl
Y3Rvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkg
cHJvcGVydHlOYW1lcyhzY3JpcHRTdGF0ZSk7CiAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHNjcmlwdFN0YXRlLCBwcm9wZXJ0eU5hbWVz
LCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTE0NSwxNiArMTQ1LDE2IEBAIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRl
KiBzY3JpcHRTdGF0ZSwgSlNWCiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGlu
c3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBwcm9wZXJ0eVZh
bHVlLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5z
ZXRWYWx1ZShuYW1lLnN0cmluZygpLCBpbnNwZWN0b3JWYWx1ZSk7CisgICAgICAgICAgICBpbnNw
ZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5nKCksIFdURjo6bW92ZShpbnNwZWN0b3JW
YWx1ZSkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnNwZWN0b3JPYmplY3Q7CisgICAg
ICAgIHJldHVybiBXVEY6Om1vdmUoaW5zcGVjdG9yT2JqZWN0KTsKICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFsdWU6OnRvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBz
Y3JpcHRTdGF0ZSkgY29uc3QKK1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFsdWU6OnRv
SW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKIHsKICAgICBKU0xv
Y2tIb2xkZXIgaG9sZGVyKHNjcmlwdFN0YXRlKTsKICAgICByZXR1cm4ganNUb0luc3BlY3RvclZh
bHVlKHNjcmlwdFN0YXRlLCBtX3ZhbHVlLmdldCgpLCBJbnNwZWN0b3JWYWx1ZTo6bWF4RGVwdGgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaAppbmRleCBk
NWZhZGU5Li5mZWY3NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2Ny
aXB0VmFsdWUuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNjcmlwdFZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBvdGhl
ci5tX3ZhbHVlOyB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSop
IGNvbnN0OworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB0b0luc3BlY3Rv
clZhbHVlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKaW5k
ZXggZjdkMWU1NS4uMjAyZTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAgLTE4MSwxMCArMTgxLDExIEBAIHN0YXRpYyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6TGV2ZWwgbWVzc2Fn
ZUxldmVsVmFsdWUoTWVzCiAKIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5z
cGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyb250ZW5kRGlzcGF0Y2hl
ciwgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdl
ciwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlPiBqc29uT2JqID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlPiBqc29uT2JqID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRT
b3VyY2UobWVzc2FnZVNvdXJjZVZhbHVlKG1fc291cmNlKSkKICAgICAgICAgLnNldExldmVsKG1l
c3NhZ2VMZXZlbFZhbHVlKG1fbGV2ZWwpKQotICAgICAgICAuc2V0VGV4dChtX21lc3NhZ2UpOwor
ICAgICAgICAuc2V0VGV4dChtX21lc3NhZ2UpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAv
LyBGSVhNRTogb25seSBzZW5kIG91dCB0eXBlIGZvciBDb25zb2xlQVBJIHNvdXJjZSBtZXNzYWdl
cy4KICAgICBqc29uT2JqLT5zZXRUeXBlKG1lc3NhZ2VUeXBlVmFsdWUobV90eXBlKSk7CkBAIC0x
OTksNyArMjAwLDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJbnNwZWN0
b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnIKICAgICBpZiAobV9hcmd1bWVu
dHMgJiYgbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3Jp
cHRGb3IobV9hcmd1bWVudHMtPmdsb2JhbFN0YXRlKCkpOwogICAgICAgICBpZiAoIWluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+
IGpzb25BcmdzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4ganNvbkFyZ3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gTWVzc2FnZVR5cGU6OlRhYmxlICYmIGdlbmVyYXRlUHJldmlldyAm
JiBtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgICAgICAgICAgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUgdGFibGUgPSBtX2FyZ3VtZW50cy0+YXJndW1lbnRBdCgwKTsKICAg
ICAgICAgICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBjb2x1bW5zID0gbV9hcmd1bWVu
dHMtPmFyZ3VtZW50Q291bnQoKSA+IDEgPyBtX2FyZ3VtZW50cy0+YXJndW1lbnRBdCgxKSA6IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CkBAIC0yMDgsNyArMjA5LDcgQEAgdm9pZCBDb25zb2xl
TWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJbnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVy
KiBjb25zb2xlRnIKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAganNvbkFyZ3MtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUpOworICAgICAgICAgICAgICAg
IGpzb25BcmdzLT5hZGRJdGVtKGluc3BlY3RvclZhbHVlLmNvcHlSZWYoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fy
Z3VtZW50cy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gaW5zcGVjdG9y
VmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1bWVudEF0
KGkpLCBBU0NJSUxpdGVyYWwoImNvbnNvbGUiKSwgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTIxNiwx
NyArMjE3LDE3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5zcGVjdG9y
Q29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyCiAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBqc29uQXJncy0+
YWRkSXRlbShpbnNwZWN0b3JWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGpzb25BcmdzLT5h
ZGRJdGVtKGluc3BlY3RvclZhbHVlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAganNvbk9iai0+c2V0UGFyYW1ldGVycyhqc29uQXJncyk7
CisgICAgICAgICAgICBqc29uT2JqLT5zZXRQYXJhbWV0ZXJzKFdURjo6bW92ZShqc29uQXJncykp
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1fY2FsbFN0YWNrKQogICAgICAgICBqc29u
T2JqLT5zZXRTdGFja1RyYWNlKG1fY2FsbFN0YWNrLT5idWlsZEluc3BlY3RvckFycmF5KCkpOwog
Ci0gICAgY29uc29sZUZyb250ZW5kRGlzcGF0Y2hlci0+bWVzc2FnZUFkZGVkKGpzb25PYmopOwor
ICAgIGNvbnNvbGVGcm9udGVuZERpc3BhdGNoZXItPm1lc3NhZ2VBZGRlZChXVEY6Om1vdmUoanNv
bk9iaikpOwogfQogCiB2b2lkIENvbnNvbGVNZXNzYWdlOjp1cGRhdGVSZXBlYXRDb3VudEluQ29u
c29sZShJbnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnJvbnRlbmRE
aXNwYXRjaGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9D
b250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKaW5kZXggOGU1NzYzNy4uZjVkZjBiZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRp
bGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRT
ZWFyY2hVdGlsaXRpZXMuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxzaXplX3Q+PiBsaW5lRW5kaW5ncyhjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2Vu
ZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChzaXplX3Qg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBsaW5lQ29udGVudCkKK3N0YXRpYyBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gYnVpbGRPYmplY3RGb3JT
ZWFyY2hNYXRjaChzaXplX3QgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBsaW5lQ29udGVudCkK
IHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hN
YXRjaDo6Y3JlYXRlKCkKICAgICAgICAgLnNldExpbmVOdW1iZXIobGluZU51bWJlcikKQEAgLTE1
MywxNSArMTUzLDE3IEBAIGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBK
U0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdleCwgY29uCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5l
cyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiBz
ZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBxdWVy
eSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sIGlzUmVnZXgpCiB7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1h
dGNoPjo6Y3JlYXRlKCk7CiAKICAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ2V4
ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnksIGNhc2VT
ZW5zaXRpdmUsIGlzUmVnZXgpOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8c2l6ZV90LCBTdHJpbmc+
PiBtYXRjaGVzID0gZ2V0UmVndWxhckV4cHJlc3Npb25NYXRjaGVzQnlMaW5lcyhyZWdleCwgdGV4
dCk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG1hdGNoIDogbWF0Y2hlcykKLSAgICAgICAgcmVz
dWx0LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2gobWF0Y2guZmlyc3QsIG1hdGNo
LnNlY29uZCkpOworICAgIGZvciAoY29uc3QgYXV0byYgbWF0Y2ggOiBtYXRjaGVzKSB7CisgICAg
ICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPiBt
YXRjaE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2gobWF0Y2guZmlyc3QsIG1hdGNo
LnNlY29uZCk7CisgICAgICAgIHJlc3VsdC0+YWRkSXRlbShXVEY6Om1vdmUobWF0Y2hPYmplY3Qp
KTsKKyAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuaAppbmRleCA5
ODhhMGYyZC4uYjNiNjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFt
ZXNwYWNlIENvbnRlbnRTZWFyY2hVdGlsaXRpZXMgewogCiBKU19FWFBPUlRfUFJJVkFURSBKU0M6
OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIGNyZWF0ZVNlYXJjaFJlZ2V4KGNvbnN0IFN0cmluZyYg
cXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4KTsKIEpTX0VYUE9SVF9QUklW
QVRFIGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBKU0M6OllhcnI6OlJl
Z3VsYXJFeHByZXNzaW9uJiwgY29uc3QgU3RyaW5nJik7Ci1KU19FWFBPUlRfUFJJVkFURSBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBj
b25zdCBib29sIGlzUmVnZXgpOworSlNfRVhQT1JUX1BSSVZBVEUgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0
Y2g+PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sIGlzUmVnZXgpOwog
SlNfRVhQT1JUX1BSSVZBVEUgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbkZyb21PZmZzZXQoc2l6
ZV90IG9mZnNldCwgY29uc3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzKTsKIEpTX0VYUE9S
VF9QUklWQVRFIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4gbGluZUVuZGluZ3MoY29u
c3QgU3RyaW5nJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdC5jcHAKaW5kZXggOTVmYTc1ZC4uM2I4M2QwOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTEwNiw3
ICsxMDYsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOworICAgICpy
ZXN1bHQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5j
dGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUocmVzdWx0VmFsdWUpKTsKIH0KIAog
dm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgUmVmUHRyPEFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+KiBw
cm9wZXJ0aWVzKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFBy
b3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAqcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46
OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CisgICAgKnByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRzPEFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+Ojpy
dW50aW1lQ2FzdChXVEY6Om1vdmUocmVzdWx0KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+KiBwcm9wZXJ0aWVzKQpAQCAtMTM3LDEyICsx
MzcsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJl
c3VsdCk7CisgICAgYXV0byBhcnJheSA9IEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNh
c3QoV1RGOjptb3ZlKHJlc3VsdCkpOwogICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPiAwKQogICAg
ICAgICAqcHJvcGVydGllcyA9IGFycmF5OwogfQogCi1QYXNzUmVmUHRyPEFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENh
bGxGcmFtZXMoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMpCitSZWY8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluamVjdGVk
U2NyaXB0Ojp3cmFwQ2FsbEZyYW1lcyhjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY2Fs
bEZyYW1lcykKIHsKICAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CiAgICAgRGVwcmVjYXRlZDo6
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJ
TGl0ZXJhbCgid3JhcENhbGxGcmFtZXMiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rp
b25DYWxsSGFuZGxlcigpKTsKQEAgLTE1MywxMiArMTUzLDEyIEBAIFBhc3NSZWZQdHI8QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluamVjdGVkU2NyaXB0
Ojp3cmFwCiAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOwogICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gcmVzdWx0ID0gY2FsbEZyYW1lc1ZhbHVlLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3Rh
dGUoKSk7CiAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlOjpB
cnJheSkKLSAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChyZXN1bHQpOworICAgICAg
ICByZXR1cm4gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0KFdURjo6bW92ZShyZXN1bHQpKS5yZWxlYXNlTm9u
TnVsbCgpOwogCiAgICAgcmV0dXJuIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBncm91cE5h
bWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3KSBjb25zdAorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QoY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGdyb3VwTmFt
ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFoYXNOb1ZhbHVl
KCkpOwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCB3cmFwRnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJ3cmFwT2JqZWN0IiksIGluc3BlY3Rv
ckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CkBAIC0xNzksNyArMTc5LDcg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWMKICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1
bHRPYmplY3QpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgdGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjb2x1
bW5zKSBjb25zdAorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjb2x1bW5zKSBjb25z
dAogewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRG
dW5jdGlvbkNhbGwgd3JhcEZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0
ZXJhbCgid3JhcFRhYmxlIiksIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhh
bmRsZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0LmgKaW5kZXggNDJjNzkwZC4uMjkwOTJiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtNjIsOSArNjIsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8UHJvdG9jb2w6OkFycmF5PFByb3Rv
Y29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiogcmVzdWx0KTsKICAgICB2b2lkIGdl
dEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVy
dHlEZXNjcmlwdG9yPj4qIHJlc3VsdCk7CiAKLSAgICBQYXNzUmVmUHRyPFByb3RvY29sOjpBcnJh
eTxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IHdyYXBDYWxsRnJhbWVzKGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7Ci0gICAgUGFzc1JlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiB3cmFwT2JqZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3ID0gZmFsc2Up
IGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
d3JhcFRhYmxlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB0YWJsZSwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNvbHVtbnMpIGNvbnN0OworICAgIFJlZjxQcm90b2NvbDo6
QXJyYXk8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiB3cmFwQ2FsbEZyYW1lcyhjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiB3cmFwT2JqZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3ID0gZmFsc2Up
IGNvbnN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB3cmFw
VGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3Q7CiAKICAgICB2b2lkIHNldEV4Y2VwdGlv
blZhbHVlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CiAgICAgdm9pZCBjbGVhckV4
Y2VwdGlvblZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKaW5kZXggZGQxMjk4Yy4uN2RlMDUxOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRC
YXNlLmNwcApAQCAtMTM1LDE1ICsxMzUsMjAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1h
a2VFdmFsQ2FsbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNjcmkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dE9iamVjdCA9IHJlc3VsdFBhaXItPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInJlc3VsdCIpKTsK
LSAgICBib29sIHdhc1Rocm93blZhbCA9IGZhbHNlOwotICAgIGlmICghcmVzdWx0T2JqZWN0IHx8
ICFyZXN1bHRQYWlyLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgid2FzVGhyb3duIiksIHdhc1Ro
cm93blZhbCkpIHsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3Q7Cisg
ICAgaWYgKCFyZXN1bHRQYWlyLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgcmVz
dWx0T2JqZWN0KSkgeworICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJu
YWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJvd24gZmxh
ZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCB3YXNUaHJvd25WYWx1ZSA9
IGZhbHNlOworICAgIGlmICghcmVzdWx0UGFpci0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoIndh
c1Rocm93biIpLCB3YXNUaHJvd25WYWx1ZSkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJ
SUxpdGVyYWwoIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGEgcGFpciBvZiB2YWx1ZSBh
bmQgd2FzVGhyb3duIGZsYWciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgICpvYmpl
Y3RSZXN1bHQgPSBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOwotICAgICp3YXNUaHJvd24gPSB3YXNUaHJvd25W
YWw7CisgICAgKndhc1Rocm93biA9IHdhc1Rocm93blZhbHVlOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKaW5kZXggZGJlNzkzZS4uODk1
YTA5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKQEAgLTM2LDggKzM2LDggQEAKIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OkNhbGxiYWNrQmFzZShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKQotICAgIDogbV9iYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlcikKK0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2U6OkNhbGxiYWNrQmFzZShSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgYmFj
a2VuZERpc3BhdGNoZXIsIGludCBpZCkKKyAgICA6IG1fYmFja2VuZERpc3BhdGNoZXIoV1RGOjpt
b3ZlKGJhY2tlbmREaXNwYXRjaGVyKSkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX2FscmVhZHlT
ZW50KGZhbHNlKQogewpAQCAtNTQsMTggKzU0LDE4IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1cmUoY29uc3QgRXJyb3JTdHJpbmcmIGVy
CiAgICAgc2VuZElmQWN0aXZlKG51bGxwdHIsIGVycm9yKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kSWZBY3RpdmUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2Nh
dGlvbkVycm9yKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
OjpzZW5kSWZBY3RpdmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJ0aWFsTWVzc2FnZSwg
Y29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKIHsKICAgICBpZiAobV9hbHJlYWR5
U2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKG1faWQsIHBhcnRpYWxNZXNzYWdlLCBpbnZvY2F0aW9uRXJyb3IpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShtX2lkLCBXVEY6Om1vdmUocGFydGlhbE1lc3Nh
Z2UpLCBpbnZvY2F0aW9uRXJyb3IpOwogICAgIG1fYWxyZWFkeVNlbnQgPSB0cnVlOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQorUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgSW5zcGVjdG9yU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpCkBAIC05MCw4ICs5MCw4IEBAIHZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoQVNDSUlMaXRlcmFsKCJpZCIpKTsK
LSAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxs
SWRWYWx1ZTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
aWQiKSwgY2FsbElkVmFsdWUpKSB7CiAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IobnVsbHB0
ciwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZv
dW5kIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAyLDggKzEwMiw4IEBAIHZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
bWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSk7
Ci0gICAgaWYgKCFtZXRob2RWYWx1ZSkgeworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0
aG9kVmFsdWU7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRWYWx1ZShBU0NJSUxpdGVyYWwo
Im1ldGhvZCIpLCBtZXRob2RWYWx1ZSkpIHsKICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigm
Y2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCInbWV0aG9kJyBwcm9wZXJ0eSB3
YXNuJ3QgZm91bmQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjgsMTAgKzEyOCwx
MCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiAgICAgfQogCiAgICAgU3RyaW5nIGRvbWFpbk1ldGhvZCA9IG1ldGhvZC5z
dWJzdHJpbmcocG9zaXRpb24gKyAxKTsKLSAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChj
YWxsSWQsIGRvbWFpbk1ldGhvZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNlKCkpOworICAgIGRvbWFp
bkRpc3BhdGNoZXItPmRpc3BhdGNoKGNhbGxJZCwgZG9tYWluTWV0aG9kLCBtZXNzYWdlT2JqZWN0
LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCit2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9y
KQogewogICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpz
ZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yTwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHJlc3VsdCk7CiAg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgY2FsbElk
KTsKICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3Qg
bG9uZyogY29uc3QgY2FsbElkLCBDCiAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGVy
cm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxs
SWQsIENvbW1vbkVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAordm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBj
YWxsSWQsIENvbW1vbkVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBkYXRhKSBj
b25zdAogewogICAgIHN0YXRpYyBjb25zdCBpbnQgZXJyb3JDb2Rlc1tdID0gewogICAgICAgICAt
MzI3MDAsIC8vIFBhcnNlRXJyb3IKQEAgLTE2MywyMSArMTYzLDIxIEBAIHZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3Qg
Y2FsbElkLCBDCiAgICAgICAgIC0zMjAwMCwgLy8gU2VydmVyRXJyb3IKICAgICB9OwogCi0gICAg
QVNTRVJUKGVycm9yQ29kZSA+PSAwKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWVycm9yQ29kZSA8
IFdURl9BUlJBWV9MRU5HVEgoZXJyb3JDb2RlcykpOwotICAgIEFTU0VSVChlcnJvckNvZGVzW2Vy
cm9yQ29kZV0pOworICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCBlcnJvckNvZGUgPj0gMCk7Cisg
ICAgQVNTRVJUX0FSRyhlcnJvckNvZGUsICh1bnNpZ25lZCllcnJvckNvZGUgPCBXVEZfQVJSQVlf
TEVOR1RIKGVycm9yQ29kZXMpKTsKKyAgICBBU1NFUlRfQVJHKGVycm9yQ29kZSwgZXJyb3JDb2Rl
c1tlcnJvckNvZGVdKTsKIAogICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZXJyb3ItPnNldEludGVnZXIoQVNDSUlM
aXRlcmFsKCJjb2RlIiksIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CiAgICAgZXJyb3ItPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgZXJyb3JNZXNzYWdlKTsKICAgICBpZiAoZGF0
YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBkYXRhKTsK
KyAgICAgICAgZXJyb3ItPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBXVEY6Om1vdmUo
ZGF0YSkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
ZXJyb3IiKSwgZXJyb3IucmVsZWFzZSgpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJlcnJvciIpLCBXVEY6Om1vdmUoZXJyb3IpKTsKICAgICBpZiAoY2FsbElk
KQogICAgICAgICBtZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgKmNhbGxJ
ZCk7CiAgICAgZWxzZQpAQCAtMTg3LDM3ICsxODcsMzYgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQs
IEMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIERlZmF1bHRWYWx1ZVR5cGU+Ci1zdGF0aWMgUmV0dXJuVmFsdWVUeXBl
IGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzLCBE
ZWZhdWx0VmFsdWVUeXBlIGRlZmF1bHRWYWx1ZSwgYm9vbCAoKmFzTWV0aG9kKShJbnNwZWN0b3JW
YWx1ZSYsIFZhbHVlVHlwZSYpLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkKK3N0YXRpYyBSZXR1cm5W
YWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycywgRGVmYXVsdFZhbHVlVHlwZSBk
ZWZhdWx0VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoSW5zcGVjdG9yVmFsdWUmLCBWYWx1ZVR5cGUm
KSwgY29uc3QgY2hhciogdHlwZU5hbWUpCiB7Ci0gICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsK
LQotICAgIFZhbHVlVHlwZSB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICBpZiAodmFsdWVGb3Vu
ZCkKLSAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBWYWx1ZVR5cGUgcmVzdWx0ID0g
ZGVmYXVsdFZhbHVlOworICAgIC8vIG91dF9vcHRpb25hbFZhbHVlRm91bmQgc2lnbmFscyB0byB0
aGUgY2FsbGVyIHdoZXRoZXIgYW4gb3B0aW9uYWwgcHJvcGVydHkgd2FzIGZvdW5kLgorICAgIC8v
IGlmIG91dF9vcHRpb25hbFZhbHVlRm91bmQgPT0gbnVsbHB0ciwgdGhlbiB0aGlzIGlzIGEgcmVx
dWlyZWQgcHJvcGVydHkuCisgICAgaWYgKG91dF9vcHRpb25hbFZhbHVlRm91bmQpCisgICAgICAg
ICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gZmFsc2U7CiAKICAgICBpZiAoIW9iamVjdCkgewot
ICAgICAgICBpZiAoIXZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1
aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IHR5cGVOYW1lKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgaWYgKCFvdXRfb3B0
aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMuYWRkSXRlbShTdHJp
bmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0
ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKLSAgICBp
ZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQotICAg
ICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFt
ZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0
YSgpLCB0eXBlTmFtZSkpOwotICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgYXV0byBmaW5kUmVz
dWx0ID0gb2JqZWN0LT5maW5kKG5hbWUpOworICAgIGlmIChmaW5kUmVzdWx0ID09IG9iamVjdC0+
ZW5kKCkpIHsKKyAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICAg
ICAgcHJvdG9jb2xFcnJvcnMuYWRkSXRlbShTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycg
d2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVO
YW1lKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKCFhc01ldGhv
ZCgqdmFsdWVJdGVyYXRvci0+dmFsdWUsIHZhbHVlKSkgewotICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5
cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoIWFzTWV0aG9kKCpmaW5kUmVzdWx0LT52YWx1
ZSwgcmVzdWx0KSkgeworICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6Zm9y
bWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKLSAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOwor
ICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICAqb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCA9IHRydWU7CiAKLSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogc3RydWN0IEFzTWV0aG9kQnJpZGdlcyB7CkBAIC0yMzAsMzkgKzIyOSwzOSBAQCBzdHJ1
Y3QgQXNNZXRob2RCcmlkZ2VzIHsKICAgICBzdGF0aWMgYm9vbCBhc1ZhbHVlKEluc3BlY3RvclZh
bHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYgb3V0cHV0KSB7IHJldHVybiB2YWx1
ZS5hc1ZhbHVlKG91dHB1dCk7IH0KIH07CiAKLWludCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCitpbnQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVjdG9yT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCiB7CiAgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8aW50LCBpbnQsIGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9ycywgMCwgQXNNZXRob2RCcmlkZ2VzOjphc0ludGVnZXIsICJJbnRlZ2VyIik7
CiB9CiAKLWRvdWJsZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK2RvdWJsZSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4mIHByb3RvY29sRXJyb3JzKQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRv
dWJsZSwgZG91YmxlLCBkb3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6YXNEb3VibGUsICJOdW1iZXIiKTsKIH0KIAotU3Ry
aW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzKQorU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJv
dG9jb2xFcnJvcnMpCiB7CiAgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nLCBTdHJp
bmcsIFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgIiIs
IEFzTWV0aG9kQnJpZGdlczo6YXNTdHJpbmcsICJTdHJpbmciKTsKIH0KIAotYm9vbCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpCitib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFu
KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3Jz
KQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGJvb2wsIGJvb2wsIGJvb2w+KG9iamVj
dCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIGZhbHNlLCBBc01ldGhvZEJyaWRn
ZXM6OmFzQm9vbGVhbiwgIkJvb2xlYW4iKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzKQorUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZTxQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
LCBJbnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CisgICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+LCBJbnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAi
T2JqZWN0Iik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpCitSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2Nv
bEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkqPihvYmpl
Y3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJy
aWRnZXM6OmFzQXJyYXksICJBcnJheSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4sIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4sIEluc3BlY3RvckFy
cmF5Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwg
QXNNZXRob2RCcmlkZ2VzOjphc0FycmF5LCAiQXJyYXkiKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEluc3BlY3Rv
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQogewotICAgIHJldHVybiBnZXRQcm9w
ZXJ0eVZhbHVlPFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+LCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+LCBJbnNwZWN0b3JWYWx1ZSo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNWYWx1ZSwgIlZhbHVlIik7CisgICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3RvclZhbHVlPiwgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiwgSW5zcGVjdG9yVmFsdWUqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzVmFsdWUsICJWYWx1
ZSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aAppbmRleCBhOTllNmVhLi4yODUxYmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKICNkZWZp
bmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAogCi0jaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQwLDMwICs0MCwzMCBAQCB0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKIAogY2xhc3MgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlcj4gewogcHVibGljOgotICAgIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikgOiBtX2Jh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKSB7IH0KKyAgICBJbnNwZWN0b3JTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIpIDogbV9iYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikg
eyB9CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgPSAwOwogcHJvdGVjdGVkOgotICAgIFJl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAg
ICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9
OwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CiAKICAg
ICBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDYWxsYmFja0Jhc2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDYWxsYmFja0Jhc2U+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENhbGxiYWNrQmFzZShQYXNz
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgQ2Fs
bGJhY2tCYXNlKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKIAog
ICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2VuZEZhaWx1cmUo
Y29uc3QgRXJyb3JTdHJpbmcmKTsKICAgICAgICAgdm9pZCBkaXNhYmxlKCkgeyBtX2FscmVhZHlT
ZW50ID0gdHJ1ZTsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIHNlbmRJZkFjdGl2
ZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9y
U3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpOworICAgICAgICB2b2lkIHNlbmRJZkFjdGl2ZShSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYg
aW52b2NhdGlvbkVycm9yKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICAgICAgUmVmPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgICAgICBp
bnQgbV9pZDsKICAgICAgICAgYm9vbCBtX2FscmVhZHlTZW50OwogICAgIH07CkBAIC04MiwxNyAr
ODIsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
Y29uc3QgU3RyaW5nJiBkb21haW4sIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKik7CiAgICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZv
aWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKKyAgICB2b2lkIHNl
bmRSZXNwb25zZShsb25nIGNhbGxJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZXN1bHQs
IGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpOwogICAgIHZvaWQgcmVwb3J0UHJv
dG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OwotICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xF
cnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0
OwotCi0gICAgc3RhdGljIGludCBnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzKTsKLSAgICBzdGF0aWMgZG91YmxlIGdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycyk7Ci0gICAgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBn
ZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJ
bnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+JiYgZGF0YSkgY29uc3Q7CisKKyAgICBzdGF0aWMgaW50IGdldEludGVnZXIoSW5zcGVjdG9y
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGRv
dWJsZSBnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2Nv
bEVycm9ycyk7CisgICAgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGJvb2wgZ2V0Qm9v
bGVhbihJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsK
KyAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXRWYWx1ZShJbnNwZWN0b3JPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGdldEFycmF5KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJv
cnMpOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50LmgK
aW5kZXggYWUyYTdjZC4uMThkZjE0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50LmgKQEAgLTUxLDcgKzUxLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24o
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5l
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpT
Qzo6RXhlY1N0YXRlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZEluaXRpYWxpemVk
KCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9u
U3RvcHdhdGNoKCkgPSAwOworICAgIHZpcnR1YWwgUmVmPFdURjo6U3RvcHdhdGNoPiBleGVjdXRp
b25TdG9wd2F0Y2goKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmgKaW5kZXggMTQzZGVmOC4uMjk2ZjNhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKQEAgLTMx
LDEyICszMSwxMyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogbmFtZXNwYWNlIFByb3RvY29sIHsKIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEJpbmRpbmdUcmFpdHM7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFz
cyBPcHRPdXRwdXQgewogcHVibGljOgpAQCAtNjMsMTI2ICs2NCw0MiBAQCBwcml2YXRlOgogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE9wdE91dHB1dCk7CiB9OwogCi0vLyBUaGlzIGNsYXNzIHBy
b3ZpZGVzICJUcmFpdHMiIHR5cGUgZm9yIHRoZSBpbnB1dCB0eXBlIFQuIEl0IGlzIHByb2dyYW1t
ZWQgdXNpbmcgQysrIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uCi0vLyB0ZWNobmlxdWUuIEJ5IGRl
ZmF1bHQgaXQgc2ltcGx5IHRha2VzICJJdGVtVHJhaXRzIiB0eXBlIGZyb20gVCwgYnV0IGl0IGRv
ZXNuJ3Qgd29yayB3aXRoIHRoZSBiYXNlIHR5cGVzLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBBcnJheUl0ZW1IZWxwZXIgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6SXRlbVRyYWl0
cyBUcmFpdHM7Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgQXJyYXkgOiBwdWJs
aWMgSW5zcGVjdG9yQXJyYXlCYXNlIHsKIHByaXZhdGU6CiAgICAgQXJyYXkoKSB7IH0KIAotICAg
IEluc3BlY3RvckFycmF5KiBvcGVuQWNjZXNzb3JzKCkKKyAgICBJbnNwZWN0b3JBcnJheSYgb3Bl
bkFjY2Vzc29ycygpCiAgICAgewogICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVj
dG9yQXJyYXkpID09IHNpemVvZihBcnJheTxUPiksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJy
YXlCYXNlKj4odGhpcykpOworICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PEluc3BlY3RvckFy
cmF5Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4odGhpcykpOwogICAgIH0KIAog
cHVibGljOgotICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFQ+IHZhbHVlKQorICAgIHZvaWQg
YWRkSXRlbShSZWY8VD4mJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFycmF5SXRlbUhlbHBlcjxU
Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKHRoaXMtPm9wZW5BY2Nlc3NvcnMoKSwgdmFsdWUpOworICAg
ICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaFZhbHVlKCZ2YWx1ZS5nZXQoKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBhZGRJdGVtKFQgdmFsdWUpCisgICAgdm9pZCBhZGRJdGVtKFJlZlB0cjxUPiYmIHZh
bHVlKQogICAgIHsKLSAgICAgICAgQXJyYXlJdGVtSGVscGVyPFQ+OjpUcmFpdHM6OnB1c2hSYXco
dGhpcy0+b3BlbkFjY2Vzc29ycygpLCB2YWx1ZSk7CisgICAgICAgIG9wZW5BY2Nlc3NvcnMoKS5w
dXNoVmFsdWUoV1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8QXJyYXk8VD4+IGNyZWF0ZSgpCisgICAgCisgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5PFQ+KCkp
OworICAgICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaFN0cmluZyh2YWx1ZSk7CiAgICAgfQotfTsK
IAotc3RydWN0IFN0cnVjdEl0ZW1UcmFpdHMgewotICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIo
SW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkK
KyAgICB2b2lkIGFkZEl0ZW0oaW50IHZhbHVlKQogICAgIHsKLSAgICAgICAgYXJyYXktPnB1c2hW
YWx1ZSh2YWx1ZSk7CisgICAgICAgIG9wZW5BY2Nlc3NvcnMoKS5wdXNoSW50ZWdlcih2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWY8QXJyYXk8VD4+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcnJheTxUPigpKTsKICAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFN0cmluZz4gewotICAgIHN0cnVjdCBU
cmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmF3KEluc3BlY3RvckFycmF5KiBhcnJh
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1
c2hTdHJpbmcodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBBcnJheUl0ZW1IZWxwZXI8aW50PiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBpbnQgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoSW50ZWdlcih2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IEFycmF5SXRlbUhlbHBlcjxkb3Vi
bGU+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJhdyhJ
bnNwZWN0b3JBcnJheSogYXJyYXksIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXJyYXktPnB1c2hEb3VibGUodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLXRl
bXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8Ym9vbD4gewotICAgIHN0cnVjdCBUcmFp
dHMgewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmF3KEluc3BlY3RvckFycmF5KiBhcnJheSwg
Ym9vbCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hCb29sZWFuKHZh
bHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJ
dGVtSGVscGVyPEluc3BlY3RvclZhbHVlPiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1
c2hWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3Ry
dWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JPYmplY3Q+IHsKLSAgICBzdHJ1Y3QgVHJhaXRz
IHsKLSAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJlZlB0cihJbnNwZWN0b3JBcnJheSogYXJyYXks
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFycmF5PiB7Ci0gICAgc3Ry
dWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJy
YXkqIGFycmF5LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgYXJyYXktPnB1c2hBcnJheSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Owot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8UHJvdG9j
b2w6OkFycmF5PFQ+PiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPFByb3RvY29sOjpB
cnJheTxUPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUo
dmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKIH07CiAKIC8vIEhlbHBlciBtZXRob2RzIGZvciBQ
cm90b2NvbCBhbmQgb3RoZXIgSW5zcGVjdG9yIHR5cGVzIGFyZSBwcm92aWRlZCBieQpAQCAtMTky
LDggKzEwOSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQmluZGluZ1RyYWl0cyB7
CiAgICAgdHlwZWRlZiBUIEJpbmRpbmdUeXBlOwogCisgICAgc3RhdGljIHZvaWQgcHVzaChJbnNw
ZWN0b3JBcnJheSYsIEJpbmRpbmdUeXBlJik7CiAgICAgc3RhdGljIEluc3BlY3RvclZhbHVlOjpU
eXBlIHR5cGVUYWcoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUPiBydW50aW1lQ2FzdChQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOworICAgIHN0YXRpYyBSZWZQdHI8VD4gcnVudGltZUNh
c3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJik7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKik7
CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRApAQCAtMjA0LDE1ICsxMjIsMTYgQEAgc3RydWN0
IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBzdGF0
aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUp
CiAgICAgewotICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBUWVBFKTsKKyAgICAgICAg
QVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUgJiYgdmFsdWUtPnR5cGUoKSA9PSBUWVBFKTsKICAgICB9
CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpBcnJheTxUPj4gewotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEFycmF5PFQ+PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiB2YWx1ZSkKKyAgICBzdGF0aWMgUmVmUHRyPEFycmF5PFQ+PiBydW50aW1lQ2FzdChSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlRfQVJHKHZhbHVl
LCB2YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7CiAgICAgICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKQEAgLTIyNiw2ICsxNDUs
NyBAQCBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6QXJyYXk8VD4+IHsKICNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OwogICAgICAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5kZXggMmEyYTBi
Yy4uNDJhNmI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtMzQ3LDcgKzM0Nyw3IEBAIGJvb2wgZGVjb2RlU3RyaW5n
KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBvdXRwdXQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFs
dWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHZh
bHVlVG9rZW5FbmQsIGludCBkZXB0aCkKK1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1
ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdmFs
dWVUb2tlbkVuZCwgaW50IGRlcHRoKQogewogICAgIGlmIChkZXB0aCA+IHN0YWNrTGltaXQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzg1LDE0ICszODUsMTQgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFy
KiBlbmQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQVJSQVlfQkVHSU46
IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKICAgICAgICAgdG9r
ZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOwogICAg
ICAgICB3aGlsZSAodG9rZW4gIT0gQVJSQVlfRU5EKSB7CiAgICAgICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5k
LCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKGFycmF5Tm9k
ZSk7CisgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdURjo6bW92ZShhcnJheU5vZGUpKTsK
IAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVlLCB3ZSBleHBlY3QgYSBjb21tYSBv
ciB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKQEAg
LTQwOSwxMSArNDA5LDExIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUo
Y29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zCiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHRva2VuICE9IEFSUkFZX0VORCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICByZXN1bHQgPSBhcnJheS5yZWxlYXNlKCk7CisgICAgICAgIHJlc3VsdCA9IFdU
Rjo6bW92ZShhcnJheSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE9CSkVDVF9C
RUdJTjogewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBzdGFydCA9IHRva2VuRW5kOwog
ICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tl
bkVuZCk7CiAgICAgICAgIHdoaWxlICh0b2tlbiAhPSBPQkpFQ1RfRU5EKSB7CkBAIC00MzIsNyAr
NDMyLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hh
ciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnMKICAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVw
dGggKyAxKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgICAgICBvYmplY3QtPnNldFZhbHVlKGtleSwgdmFsdWUpOworICAg
ICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgICAg
ICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBrZXkvdmFs
dWUgcGFpciwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUKQEAgLTQ1MCw3ICs0
NTAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFy
KiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29ucwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbiAhPSBPQkpFQ1RfRU5EKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IHJlc3VsdCA9IG9iamVjdC5yZWxlYXNlKCk7CisgICAgICAgIHJlc3VsdCA9IFdURjo6bW92ZShv
YmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTczOSw4ICs3MzksOCBAQCBJbnNw
ZWN0b3JPYmplY3QqIEluc3BlY3Rvck9iamVjdEJhc2U6Om9wZW5BY2Nlc3NvcnMoKQogCiBib29s
IEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
JiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdl
dChuYW1lKTsKLSAgICBpZiAoIXZhbHVlKQorICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWU7CisgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHJldHVybiB2YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7CkBAIC03NDgsNDAgKzc0
OCwzOSBAQCBib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKLSAgICBpZiAoIXZh
bHVlKQorICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgaWYgKCFnZXRWYWx1
ZShuYW1lLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB2YWx1
ZS0+YXNTdHJpbmcob3V0cHV0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IElu
c3BlY3Rvck9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Citi
b29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAg
ICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0OwotICAgIHZhbHVlLT5hc09iamVjdChy
ZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiB2YWx1ZS0+
YXNPYmplY3Qob3V0cHV0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVj
dG9yT2JqZWN0QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorYm9vbCBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4mIG91dHB1dCkgY29uc3QKIHsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICgh
Z2V0VmFsdWUobmFtZSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdDsKLSAgICB2YWx1ZS0+YXNBcnJheShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiB2YWx1ZS0+YXNBcnJheShv
dXRwdXQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JPYmplY3RC
YXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorYm9vbCBJbnNwZWN0b3JPYmplY3RC
YXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4m
IG91dHB1dCkgY29uc3QKIHsKLSAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
ZGF0YS5maW5kKG5hbWUpOwotICAgIGlmIChpdCA9PSBtX2RhdGEuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBpdC0+dmFsdWU7CisgICAgRGljdGlvbmFyeTo6Y29u
c3RfaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fZGF0YS5maW5kKG5hbWUpOworICAgIGlmIChmaW5k
UmVzdWx0ID09IG1fZGF0YS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb3V0
cHV0ID0gZmluZFJlc3VsdC0+dmFsdWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTc5OSwxMyAr
Nzk4LDEzIEBAIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXImIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQuYXBwZW5kKCd7Jyk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERpY3Rpb25h
cnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobV9vcmRlcltpXSk7Ci0gICAgICAg
IEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOworICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBt
X2RhdGEuZmluZChtX29yZGVyW2ldKTsKKyAgICAgICAgQVNTRVJUKGZpbmRSZXN1bHQgIT0gbV9k
YXRhLmVuZCgpKTsKICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcs
Jyk7Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5rZXksIG91dHB1dCk7CisgICAgICAg
IGRvdWJsZVF1b3RlU3RyaW5nKGZpbmRSZXN1bHQtPmtleSwgb3V0cHV0KTsKICAgICAgICAgb3V0
cHV0LmFwcGVuZCgnOicpOwotICAgICAgICBpdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQpOwor
ICAgICAgICBmaW5kUmVzdWx0LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQogICAg
IG91dHB1dC5hcHBlbmQoJ30nKTsKIH0KQEAgLTg0NSw1MCArODQ0LDUwIEBAIEluc3BlY3RvckFy
cmF5QmFzZTo6SW5zcGVjdG9yQXJyYXlCYXNlKCkKIHsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gSW5zcGVjdG9yQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KQorUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBJbnNwZWN0b3JBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBtX2RhdGEuc2l6ZSgp
KTsKICAgICByZXR1cm4gbV9kYXRhW2luZGV4XTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3Rvck9iamVjdCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yT2JqZWN0KTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
CitSZWY8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQXJyYXkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluc3BlY3RvckFycmF5KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5z
cGVjdG9yVmFsdWU6Om51bGwoKQorUmVmPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1ZTo6
bnVsbCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JWYWx1ZSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yVmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPElu
c3BlY3RvclN0cmluZz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK1JlZjxJbnNwZWN0b3JTdHJpbmc+IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHJpbmco
dmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHJpbmcodmFsdWUp
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHJpbmc+IEluc3BlY3RvclN0cmluZzo6Y3Jl
YXRlKGNvbnN0IGNoYXIqIHZhbHVlKQorUmVmPEluc3BlY3RvclN0cmluZz4gSW5zcGVjdG9yU3Ry
aW5nOjpjcmVhdGUoY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbnNwZWN0b3JTdHJpbmcodmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNw
ZWN0b3JTdHJpbmcodmFsdWUpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVl
PiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoYm9vbCB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JC
YXNpY1ZhbHVlPiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoYm9vbCB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CiB9CiAKLVBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRl
KGludCB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJbnNwZWN0b3JCYXNpY1ZhbHVl
OjpjcmVhdGUoaW50IHZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
QmFzaWNWYWx1ZSh2YWx1ZSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckJh
c2ljVmFsdWUodmFsdWUpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoZG91YmxlIHZhbHVlKQorUmVmPEluc3BlY3RvckJh
c2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShkb3VibGUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDI5NmFmN2QuLjU2YThmYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAt
MzIsNyArMzIsNiBAQAogI2lmbmRlZiBJbnNwZWN0b3JWYWx1ZXNfaAogI2RlZmluZSBJbnNwZWN0
b3JWYWx1ZXNfaAogCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV90eXBlKFR5cGU6Ok51
bGwpIHsgfQogICAgIHZpcnR1YWwgfkluc3BlY3RvclZhbHVlKCkgeyB9CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbnVsbCgpOworICAgIHN0YXRpYyBSZWY8SW5zcGVj
dG9yVmFsdWU+IG51bGwoKTsKIAogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE51bGwg
PSAwLApAQCAtOTksOSArOTgsOSBAQCBwcml2YXRlOgogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUg
SW5zcGVjdG9yQmFzaWNWYWx1ZSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CiBwdWJsaWM6CiAK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUoYm9vbCk7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGludCk7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGRvdWJs
ZSk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUoYm9vbCk7Cisg
ICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUoaW50KTsKKyAgICBzdGF0
aWMgUmVmPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShkb3VibGUpOwogCiAgICAgdmlydHVh
bCBib29sIGFzQm9vbGVhbihib29sJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gTnVtYmVycyBm
cm9tIHRoZSBmcm9udGVuZCBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3VibGVzLCBzbyB3ZSBhbGxv
dwpAQCAtMTM4LDggKzEzNyw4IEBAIHByaXZhdGU6CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IEluc3BlY3RvclN0cmluZyA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgY2hh
ciopOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgU3RyaW5n
Jik7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JTdHJpbmc+IGNyZWF0ZShjb25zdCBjaGFyKik7
CiAKICAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nJiBvdXRwdXQpIGNvbnN0IG92ZXJy
aWRlOwogCkBAIC0xNzcsOSArMTc2LDkgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0SW50ZWdl
cihjb25zdCBTdHJpbmcmIG5hbWUsIGludCk7CiAgICAgdm9pZCBzZXREb3VibGUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKLSAgICB2b2lkIHNldE9iamVjdChjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4pOwotICAgIHZvaWQg
c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5QmFz
ZT4pOworICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+JiYpOworICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdEJhc2U+JiYpOworICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiYmKTsKIAogICAgIGl0ZXJhdG9y
IGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3Q7CkBAIC0xODgsMjMgKzE4NywyNSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgb3V0cHV0KSBjb25z
dDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJsZShjb25zdCBTdHJpbmcmIG5h
bWUsIFQmIG91dHB1dCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgICAgIGlmICghdmFsdWUpCisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFs
dWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIHJldHVybiB2YWx1ZS0+
YXNEb3VibGUob3V0cHV0KTsKICAgICB9CiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRJ
bnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAogICAgIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKLSAgICAgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICAgICAg
aWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVnZXIob3V0cHV0KTsKICAgICB9CiAKICAgICBi
b29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgb3V0cHV0KSBjb25zdDsK
LSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBn
ZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGdldE9iamVjdChjb25zdCBT
dHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JikgY29uc3Q7CisgICAgYm9vbCBn
ZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKSBjb25z
dDsKKyAgICBib29sIGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiYpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKTsK
IApAQCAtMjI3LDcgKzIyOCw3IEBAIHByaXZhdGU6CiAKIGNsYXNzIEluc3BlY3Rvck9iamVjdCA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3RCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSlNfRVhQ
T1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZSgpOworICAgIHN0
YXRpYyBKU19FWFBPUlRfUFJJVkFURSBSZWY8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGUoKTsKIAog
ICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmFzT2JqZWN0OwogCkBAIC0yNDYsNyArMjQ3
LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFN0cmluZzsK
ICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3Q7CiAgICAgdXNpbmcgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6Z2V0QXJyYXk7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6Z2V0OworICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFZhbHVlOwogCiAgICAg
dXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlOwogCkBAIC0yNzMsMTEgKzI3NCwxMSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwdXNoSW50ZWdlcihpbnQpOwogICAgIHZvaWQgcHVzaERv
dWJsZShkb3VibGUpOwogICAgIHZvaWQgcHVzaFN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB2
b2lkIHB1c2hWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7Ci0gICAgdm9pZCBwdXNo
T2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7Ci0gICAgdm9pZCBwdXNoQXJyYXko
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4pOworICAgIHZvaWQgcHVzaFZhbHVlKFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4mJik7CisgICAgdm9pZCBwdXNoT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JP
YmplY3RCYXNlPiYmKTsKKyAgICB2b2lkIHB1c2hBcnJheShSZWZQdHI8SW5zcGVjdG9yQXJyYXlC
YXNlPiYmKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldChzaXplX3QgaW5k
ZXgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KHNpemVfdCBpbmRleCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3Zl
cnJpZGU7CiAKQEAgLTI5NSw3ICsyOTYsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JB
cnJheSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheUJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBK
U19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjcmVhdGUoKTsKKyAg
ICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUmVmPEluc3BlY3RvckFycmF5PiBjcmVhdGUoKTsK
IAogICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6YXNBcnJheTsKIApAQCAtMzQ0LDI0ICsz
NDUsMjQgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWwKICAgICBzZXRWYWx1ZShuYW1lLCBJbnNw
ZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQoraW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFs
dWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICBpZiAobV9kYXRhLnNldChuYW1lLCB2YWx1ZSkuaXNO
ZXdFbnRyeSkKKyAgICBpZiAobV9kYXRhLnNldChuYW1lLCBXVEY6Om1vdmUodmFsdWUpKS5pc05l
d0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZvaWQg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiB2YWx1ZSkKK2lubGluZSB2b2lkIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3RCYXNlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgaWYgKG1fZGF0
YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAgaWYgKG1fZGF0YS5zZXQobmFtZSwg
V1RGOjptb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5hcHBlbmQobmFt
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheUJhc2U+IHZhbHVlKQoraW5s
aW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1l
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1
ZSk7Ci0gICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAgaWYg
KG1fZGF0YS5zZXQobmFtZSwgV1RGOjptb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAg
bV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CiAKQEAgLTM4NSwyMiArMzg2LDIyIEBAIGlubGluZSB2
b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpKTsKIH0KIAot
aW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoVmFsdWUoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hW
YWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVl
KTsKLSAgICBtX2RhdGEuYXBwZW5kKHZhbHVlKTsKKyAgICBtX2RhdGEuYXBwZW5kKFdURjo6bW92
ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hPYmpl
Y3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQoraW5saW5lIHZvaWQgSW5zcGVj
dG9yQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiYmIHZh
bHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgbV9kYXRhLmFwcGVuZCh2YWx1ZSk7Cisg
ICAgbV9kYXRhLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgSW5z
cGVjdG9yQXJyYXlCYXNlOjpwdXNoQXJyYXkoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hBcnJheShSZWZQdHI8SW5z
cGVjdG9yQXJyYXlCYXNlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgbV9k
YXRhLmFwcGVuZCh2YWx1ZSk7CisgICAgbV9kYXRhLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5j
cHAKaW5kZXggNTAwYWZlMi4uYTdmYjEwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNw
cApAQCAtNzUsMTkgKzc1LDE4IEBAIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6SlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50KEluc3BlY3RvckNvbnNvbGVBZ2VudCoKICAgICB9KTsKIH0K
IAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExl
dmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBwcnBBcmd1bWVudHMpCit2b2lkIEpT
R2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4gYXJndW1lbnRzID0gcHJwQXJndW1lbnRzOwogCiAgICAgaWYgKEpTR2xvYmFsT2Jq
ZWN0Q29uc29sZUNsaWVudDo6bG9nVG9TeXN0ZW1Db25zb2xlKCkpCi0gICAgICAgIENvbnNvbGVD
bGllbnQ6OnByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1lc3NhZ2VTb3VyY2U6OkNv
bnNvbGVBUEksIHR5cGUsIGxldmVsLCBleGVjLCBhcmd1bWVudHMpOworICAgICAgICBDb25zb2xl
Q2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpD
b25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgZXhlYywgYXJndW1lbnRzLmNvcHlSZWYoKSk7CiAKICAg
ICBTdHJpbmcgbWVzc2FnZTsKICAgICBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1lbnRBc1N0cmlu
ZyhtZXNzYWdlKTsKLSAgICBtX2NvbnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShNZXNz
YWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgZXhlYywgYXJndW1l
bnRzLnJlbGVhc2UoKSk7CisgICAgbV9jb25zb2xlQWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUo
TWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGV4ZWMsIFdU
Rjo6bW92ZShhcmd1bWVudHMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OmNvdW50KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKK3ZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpjb3VudChFeGVjU3Rh
dGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewogICAgIG1f
Y29uc29sZUFnZW50LT5jb3VudChleGVjLCBhcmd1bWVudHMpOwogfQpAQCAtMTEwLDEwICsxMDks
MTAgQEAgdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWUoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0
aW1lRW5kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29u
c29sZShleGVjLCAxKSk7Ci0gICAgbV9jb25zb2xlQWdlbnQtPnN0b3BUaW1pbmcodGl0bGUsIGNh
bGxTdGFjay5yZWxlYXNlKCkpOworICAgIG1fY29uc29sZUFnZW50LT5zdG9wVGltaW5nKHRpdGxl
LCBXVEY6Om1vdmUoY2FsbFN0YWNrKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xl
Q2xpZW50Ojp0aW1lU3RhbXAoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+
KQordm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVTdGFtcChFeGVjU3RhdGUq
LCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmKQogewogICAgIC8vIEZJWE1FOiBKU0NvbnRleHQg
aW5zcGVjdGlvbiBuZWVkcyBhIHRpbWVsaW5lLgogICAgIHdhcm5VbmltcGxlbWVudGVkKEFTQ0lJ
TGl0ZXJhbCgiY29uc29sZS50aW1lU3RhbXAiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaApp
bmRleCBmNGFiOTFlLi5lMzVlOWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmgKQEAgLTQz
LDE3ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ1RvU3lz
dGVtQ29uc29sZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwg
UGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y291bnQoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+
JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIFJl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwcm9m
aWxlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRp
dGxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGltZShKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB0aW1lRW5kKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0
ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IHZvaWQgd2FyblVuaW1wbGVtZW50ZWQoY29uc3QgU3RyaW5nJiBtZXRob2QpOwotICAgIHZvaWQg
aW50ZXJuYWxBZGRNZXNzYWdlKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lkIGludGVybmFsQWRk
TWVzc2FnZShNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0
cjxTY3JpcHRBcmd1bWVudHM+JiYpOwogCiAgICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2Nv
bnNvbGVBZ2VudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
aW5kZXggYmM4YzRiMS4uYjhhZGVjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMjIyLDkgKzIyMiw5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyOjpmcm9udGVuZEluaXRpYWxpemVkKCkKICNlbmRpZgogfQogCi1QYXNzUmVm
UHRyPFN0b3B3YXRjaD4gSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRp
b25TdG9wd2F0Y2goKQorUmVmPFN0b3B3YXRjaD4gSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250
cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQogewotICAgIHJldHVybiBtX2V4ZWN1dGlvblN0
b3B3YXRjaDsKKyAgICByZXR1cm4gbV9leGVjdXRpb25TdG9wd2F0Y2guY29weVJlZigpOwogfQog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBhNjBkNDdiLi4yYTAyMTg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVj
dG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBpbnQpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopIG92ZXJy
aWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdURjo6U3RvcHdhdGNoPiBleGVjdXRpb25TdG9wd2F0
Y2goKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9u
U3RvcHdhdGNoKCkgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICAgICB2aXJ0dWFsIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNs
aWVudCogYXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9hdWdtZW50aW5nQ2xpZW50OyB9IApAQCAtMTE1LDcgKzExNSw3IEBAIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yQWdlbnRSZWdpc3RyeSBtX2FnZW50czsKICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjsKLSAgICBSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOworICAg
IFJlZjxXVEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CiAgICAgYm9vbCBtX2lu
Y2x1ZGVOYXRpdmVDYWxsU3RhY2tXaXRoRXhjZXB0aW9uczsKICAgICBib29sIG1faXNBdXRvbWF0
aWNJbnNwZWN0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL1NjcmlwdENhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxGcmFtZS5jcHAKaW5kZXggN2M5NTBlOC4uMjhjMmFmNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmNwcApAQCAt
NTgsNyArNTgsNyBAQCBib29sIFNjcmlwdENhbGxGcmFtZTo6aXNFcXVhbChjb25zdCBTY3JpcHRD
YWxsRnJhbWUmIG8pIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+IFNjcmlwdENhbGxGcmFt
ZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNvbnNvbGU6OkNhbGxGcmFtZT4gU2NyaXB0Q2FsbEZyYW1lOjpidWlsZEluc3BlY3Rvck9iamVj
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNh
bGxGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldEZ1bmN0aW9uTmFtZShtX2Z1bmN0aW9uTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFt
ZS5oCmluZGV4IDZhOWNkNzcuLjAxN2RkZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0VxdWFsKGNvbnN0IFNjcmlwdENhbGxGcmFtZSYpIGNvbnN0OwogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNv
bnNvbGU6OkNhbGxGcmFtZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKKyAgICBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPiBidWlsZEluc3BlY3Rvck9i
amVjdCgpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAKaW5kZXggNmY4MWE1OC4uYWE0
NTJhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRD
YWxsU3RhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0
Q2FsbFN0YWNrLmNwcApAQCAtMzYsMTQgKzM2LDE0IEBACiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi1QYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUo
KQorUmVmPFNjcmlwdENhbGxTdGFjaz4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0Q2FsbFN0YWNrKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTY3JpcHRDYWxsU3RhY2spOwogfQogCi1QYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoVmVjdG9yPFNjcmlwdENhbGxGcmFtZT4mIGZyYW1l
cykKK1JlZjxTY3JpcHRDYWxsU3RhY2s+IFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKFZlY3RvcjxT
Y3JpcHRDYWxsRnJhbWU+JiBmcmFtZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3Jp
cHRDYWxsU3RhY2soZnJhbWVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NyaXB0Q2Fs
bFN0YWNrKGZyYW1lcykpOwogfQogCiBTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFjaygp
CkBAIC0xMDcsMTIgKzEwNywxMiBAQCBib29sIFNjcmlwdENhbGxTdGFjazo6aXNFcXVhbChTY3Jp
cHRDYWxsU3RhY2sqIG8pIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25z
b2xlOjpDYWxsRnJhbWU+PiBTY3JpcHRDYWxsU3RhY2s6OmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSBj
b25zdAorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNvbnNvbGU6OkNhbGxGcmFtZT4+IFNjcmlwdENhbGxTdGFjazo6YnVpbGRJbnNwZWN0b3JBcnJh
eSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4+IGZyYW1lcyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT46
OmNyZWF0ZSgpOworICAgIGF1dG8gZnJhbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7IGkrKykKICAgICAgICAgZnJh
bWVzLT5hZGRJdGVtKG1fZnJhbWVzLmF0KGkpLmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkpOwotICAg
IHJldHVybiBmcmFtZXM7CisgICAgcmV0dXJuIFdURjo6bW92ZShmcmFtZXMpOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
ay5oCmluZGV4IDYzZTNjZTEuLjZkYjdkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaApAQCAtNDcsOCArNDcsOCBAQCBjbGFzcyBK
U19FWFBPUlRfUFJJVkFURSBTY3JpcHRDYWxsU3RhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxTY3Jp
cHRDYWxsU3RhY2s+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heENhbGxT
dGFja1NpemVUb0NhcHR1cmUgPSAyMDA7CiAgICAgCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBjcmVhdGUoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+IGNyZWF0ZShWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiYpOworICAgIHN0YXRpYyBSZWY8
U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUmVmPFNjcmlwdENhbGxTdGFj
az4gY3JlYXRlKFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+Jik7CiAKICAgICB+U2NyaXB0Q2FsbFN0
YWNrKCk7CiAKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFcXVhbChTY3Jp
cHRDYWxsU3RhY2sqKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25z
b2xlOjpDYWxsRnJhbWU+PiBidWlsZEluc3BlY3RvckFycmF5KCkgY29uc3Q7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNh
bGxGcmFtZT4+IGJ1aWxkSW5zcGVjdG9yQXJyYXkoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDc2NWFmOTkuLjRmNjk1YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fcGVuZGluZ0luc3Bl
Y3REYXRhLmZpcnN0KQotICAgICAgICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0
LCBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQpOworICAgICAgICBpbnNwZWN0KG1fcGVuZGlu
Z0luc3BlY3REYXRhLmZpcnN0LmNvcHlSZWYoKSwgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25k
LmNvcHlSZWYoKSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9wZW5kaW5nRXh0cmFEb21haW5zRGF0YSkKQEAgLTk5LDcgKzk5LDcgQEAg
dm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmKQogICAgIG1fZW52
aXJvbm1lbnQuZnJvbnRlbmRJbml0aWFsaXplZCgpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50
OjppbnNwZWN0KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2Jq
ZWN0VG9JbnNwZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGludHMpCit2b2lkIElu
c3BlY3RvckFnZW50OjppbnNwZWN0KFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIG9iamVjdFRvSW5zcGVjdCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoaW50cykK
IHsKICAgICBpZiAobV9lbmFibGVkICYmIG1fZnJvbnRlbmREaXNwYXRjaGVyKSB7CiAgICAgICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KG9iamVjdFRvSW5zcGVjdCwgaGludHMpOwpA
QCAtMTMwLDkgKzEzMCw5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmFjdGl2YXRlRXh0cmFEb21h
aW4oY29uc3QgU3RyaW5nJiBkb21haW5OYW1lKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGRvbWFpbk5hbWVz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGRvbWFpbk5hbWVzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgZG9tYWluTmFtZXMt
PmFkZEl0ZW0oZG9tYWluTmFtZSk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmFjdGl2YXRl
RXh0cmFEb21haW5zKGRvbWFpbk5hbWVzLnJlbGVhc2UoKSk7CisgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmFjdGl2YXRlRXh0cmFEb21haW5zKFdURjo6bW92ZShkb21haW5OYW1lcykpOwogfQog
CiB2b2lkIEluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWlucyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZXh0cmFEb21haW5zKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKaW5kZXggYzkwZTI0Mi4uNzMwZGNl
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplZChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbnNwZWN0KFBh
c3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0VG9JbnNwZWN0
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGludHMpOworICAgIHZvaWQgaW5zcGVjdChS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3Qs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGludHMpOwogICAgIHZvaWQgZXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZChjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHAKaW5kZXggNDdhYmRmZC4uMDNiZDQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKQEAgLTE0MSwxNiArMTQxLDE2IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
aXNQYXVzZWQoKQogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpoYW5kbGVDb25zb2xlQXNz
ZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBpZiAoc2NyaXB0RGVidWdTZXJ2ZXIo
KS5wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkgIT0gSlNDOjpEZWJ1Z2dlcjo6RG9udFBhdXNlT25F
eGNlcHRpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QXNzZXJ0UGF1c2VSZWFzb24+IHJlYXNvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb24+IHJlYXNvbiA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCkucmVsZWFz
ZSgpOwogICAgICAgICBpZiAoIW1lc3NhZ2UuaXNOdWxsKCkpCiAgICAgICAgICAgICByZWFzb24t
PnNldE1lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpBc3NlcnQsIHJlYXNvbi0+b3BlbkFjY2Vz
c29ycygpKTsKICAgICB9CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YnVpbGRPYmplY3RGb3JCcmVha3BvaW50Q29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGlu
ZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlvbnMsIGJvb2wgaXNSZWdleCwgYm9vbCBhdXRvQ29udGlu
dWUpCitzdGF0aWMgUmVmPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JCcmVha3BvaW50
Q29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJl
ciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlv
bnMsIGJvb2wgaXNSZWdleCwgYm9vbCBhdXRvQ29udGludWUpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgYnJlYWtwb2ludE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgidXJsIiksIHVybCk7CiAgICAgYnJlYWtwb2ludE9iamVjdC0+c2V0SW50ZWdlcihBU0NJ
SUxpdGVyYWwoImxpbmVOdW1iZXIiKSwgbGluZU51bWJlcik7CiAgICAgYnJlYWtwb2ludE9iamVj
dC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvbHVtbk51bWJlciIpLCBjb2x1bW5OdW1iZXIp
OwpAQCAtMjM5LDcgKzIzOSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtw
b2ludEFjdGlvbnNGcm9tUHJvdG9jb2woRXJyb3JTdHJpbmcmIGVycm9yU3RyCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5
VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdl
eCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4m
IGxvY2F0aW9ucykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5
VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdl
eCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+
JiBsb2NhdGlvbnMpCiB7CiAgICAgbG9jYXRpb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPjo6Y3JlYXRlKCk7CiAg
ICAgaWYgKCFvcHRpb25hbFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewpAQCAtMjYxLDkgKzI2
MSw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpCiAgICAgYm9vbCBhdXRvQ29udGludWUgPSBm
YWxzZTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFjdGlvbnM7CiAgICAgaWYgKG9wdGlv
bnMpIHsKLSAgICAgICAgKCpvcHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0
aW9uIiksIGNvbmRpdGlvbik7Ci0gICAgICAgICgqb3B0aW9ucyktPmdldEJvb2xlYW4oQVNDSUlM
aXRlcmFsKCJhdXRvQ29udGludWUiKSwgYXV0b0NvbnRpbnVlKTsKLSAgICAgICAgYWN0aW9ucyA9
ICgqb3B0aW9ucyktPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKKyAgICAgICAg
b3B0aW9ucy0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRpdGlvbik7
CisgICAgICAgIG9wdGlvbnMtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGludWUi
KSwgYXV0b0NvbnRpbnVlKTsKKyAgICAgICAgb3B0aW9ucy0+Z2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJhY3Rpb25zIiksIGFjdGlvbnMpOwogICAgIH0KIAogICAgIEJyZWFrcG9pbnRBY3Rpb25zIGJy
ZWFrcG9pbnRBY3Rpb25zOwpAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IGxpCiAKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2Nh
dGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWRlbnRpZmllciwg
aXQtPmtleSwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAg
IGxvY2F0aW9ucy0+YWRkSXRlbShsb2NhdGlvbik7CisgICAgICAgICAgICBsb2NhdGlvbnMtPmFk
ZEl0ZW0oV1RGOjptb3ZlKGxvY2F0aW9uKSk7CiAgICAgfQogICAgICpvdXRCcmVha3BvaW50SWRl
bnRpZmllciA9IGJyZWFrcG9pbnRJZGVudGlmaWVyOwogfQpAQCAtMzAwLDcgKzMwMCw3IEBAIHN0
YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0
b3JPYmplY3QmIGxvY2F0aW9uLCBKCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pCit2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pCiB7CiAgICAg
SlNDOjpTb3VyY2VJRCBzb3VyY2VJRDsKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwpAQCAtMzEy
LDkgKzMxMiw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0CiAgICAgYm9vbCBhdXRvQ29udGlu
dWUgPSBmYWxzZTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFjdGlvbnM7CiAgICAgaWYg
KG9wdGlvbnMpIHsKLSAgICAgICAgKCpvcHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
Y29uZGl0aW9uIiksIGNvbmRpdGlvbik7Ci0gICAgICAgICgqb3B0aW9ucyktPmdldEJvb2xlYW4o
QVNDSUlMaXRlcmFsKCJhdXRvQ29udGludWUiKSwgYXV0b0NvbnRpbnVlKTsKLSAgICAgICAgYWN0
aW9ucyA9ICgqb3B0aW9ucyktPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKKyAg
ICAgICAgb3B0aW9ucy0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRp
dGlvbik7CisgICAgICAgIG9wdGlvbnMtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29u
dGludWUiKSwgYXV0b0NvbnRpbnVlKTsKKyAgICAgICAgb3B0aW9ucy0+Z2V0QXJyYXkoQVNDSUlM
aXRlcmFsKCJhY3Rpb25zIiksIGFjdGlvbnMpOwogICAgIH0KIAogICAgIEJyZWFrcG9pbnRBY3Rp
b25zIGJyZWFrcG9pbnRBY3Rpb25zOwpAQCAtMzUwLDcgKzM1MCw3IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgYnJlYWtwCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRp
bnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBsb2NhdGlvbikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29u
dGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbikKIHsKICAgICBpZiAobV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SUQgIT0gSlNDOjpub0JyZWFrcG9pbnRJRCkgewogICAgICAgICBzY3JpcHRE
ZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3Bv
aW50SUQpOwpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBy
ZXN1bWUoZXJyb3JTdHJpbmcpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgSlNDOjpTb3VyY2VJRCBz
b3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkKK1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIs
IEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9p
bnQpCiB7CiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3Igc2NyaXB0SXRlcmF0b3IgPSBtX3Njcmlw
dHMuZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5l
bmQoKSkKQEAgLTM4OCwxMSArMzg4LDEyIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvCiAgICAg
ICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElEc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRlbnRp
ZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLnNldChicmVha3BvaW50SWRlbnRpZmllciwg
VmVjdG9yPEpTQzo6QnJlYWtwb2ludElEPigpKS5pdGVyYXRvcjsKICAgICBkZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJRHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElE
KTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+
IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVh
dGUoKQorICAgIGF1dG8gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChTdHJpbmc6Om51bWJlcihz
b3VyY2VJRCkpCi0gICAgICAgIC5zZXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIpOworICAg
ICAgICAuc2V0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVyKQorICAgICAgICAucmVsZWFzZSgp
OwogICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoYWN0dWFsQ29sdW1uTnVtYmVyKTsKLSAg
ICByZXR1cm4gbG9jYXRpb247CisgICAgcmV0dXJuIFdURjo6bW92ZShsb2NhdGlvbik7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5n
JiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
Y29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElz
UmVnZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCkBAIC00MzAsMTMgKzQz
MSwxMyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVu
Y3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBmdW5jdGlvbklkLCAmZGV0YWlscyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJ
bnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIGRhdGEpCiB7CiAgICAgaWYgKG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2JyZWFrUmVhc29uID0gYnJlYWtSZWFzb247Ci0gICAgbV9icmVh
a0F1eERhdGEgPSBkYXRhOworICAgIG1fYnJlYWtBdXhEYXRhID0gV1RGOjptb3ZlKGRhdGEpOwog
ICAgIHNjcmlwdERlYnVnU2VydmVyKCkuc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQodHJ1ZSk7CiB9
CiAKQEAgLTU0NCwxMiArNTQ1LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
T3ZlcmxheU1lc3NhZ2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqKQogdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1AoY29uc3QgU3RyaW5n
JiBkaXJlY3RpdmVUZXh0KQogewogICAgIGlmIChzY3JpcHREZWJ1Z1NlcnZlcigpLnBhdXNlT25F
eGNlcHRpb25zU3RhdGUoKSAhPSBKU0M6OkRlYnVnZ2VyOjpEb250UGF1c2VPbkV4Y2VwdGlvbnMp
IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9s
YXRpb25QYXVzZVJlYXNvbj4gcmVhc29uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OkNTUFZpb2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKS5zZXREaXJlY3RpdmUoZGlyZWN0aXZl
VGV4dCk7CisgICAgICAgIGF1dG8gcmVhc29uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkNTUFZpb2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldERp
cmVjdGl2ZShkaXJlY3RpdmVUZXh0KQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAg
YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246
OkNTUFZpb2xhdGlvbiwgcmVhc29uLT5vcGVuQWNjZXNzb3JzKCkpOwogICAgIH0KIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxG
cmFtZXMoKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50
Q2FsbEZyYW1lcygpCiB7CiAgICAgaWYgKCFtX3BhdXNlZFNjcmlwdFN0YXRlKQogICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwpAQCAtNjA2LDcgKzYwOSw4IEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3VyY2VJ
RCwgY29uc3QgU2NyaXB0CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldFN0cmluZyhBU0NJ
SUxpdGVyYWwoImNvbmRpdGlvbiIpLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAgIGJy
ZWFrcG9pbnRPYmplY3QtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGludWUiKSwg
YnJlYWtwb2ludC5hdXRvQ29udGludWUpOwogICAgICAgICBFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zID0gYnJlYWtwb2ludE9i
amVjdC0+Z2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhY3Rpb25zIikpOworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFjdGlvbnM7CisgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpLCBhY3Rpb25zKTsKICAgICAgICAgaWYgKCFicmVh
a3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChlcnJvclN0cmluZywgYWN0aW9ucywgJmJyZWFrcG9p
bnQuYWN0aW9ucykpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgY29udGludWU7CkBAIC02NjUsMTQgKzY2OSwxNSBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3Rh
dGUsCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogICAgIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBwYXlsb2FkID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2ludEFjdGlvbihhY3Rpb24p
KTsKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpQcm9iZVNhbXBsZT4gcmVzdWx0ID0g
UHJvdG9jb2w6OkRlYnVnZ2VyOjpQcm9iZVNhbXBsZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3Vs
dCA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRQcm9iZUlkKGFjdGlvbi5pZGVudGlmaWVyKQogICAgICAgICAuc2V0QmF0Y2hJZChiYXRjaElk
KQogICAgICAgICAuc2V0U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAo
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25tZW50KCkuZXhlY3V0aW9u
U3RvcHdhdGNoKCktPmVsYXBzZWRUaW1lKCkpCi0gICAgICAgIC5zZXRQYXlsb2FkKHBheWxvYWQu
cmVsZWFzZSgpKTsKKyAgICAgICAgLnNldFBheWxvYWQocGF5bG9hZC5yZWxlYXNlKCkpCisgICAg
ICAgIC5yZWxlYXNlKCk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGlkU2FtcGxlUHJv
YmUocmVzdWx0LnJlbGVhc2UoKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNhbXBs
ZVByb2JlKFdURjo6bW92ZShyZXN1bHQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRDb250aW51ZSgpCkBAIC02ODcsMTAgKzY5MiwxMCBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVz
dW1lZCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJ
bnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb24gYnJlYWtSZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSkKIHsKICAg
ICBtX2JyZWFrUmVhc29uID0gYnJlYWtSZWFzb247Ci0gICAgbV9icmVha0F1eERhdGEgPSBkYXRh
OworICAgIG1fYnJlYWtBdXhEYXRhID0gV1RGOjptb3ZlKGRhdGEpOwogICAgIHNjcmlwdERlYnVn
U2VydmVyKCkuYnJlYWtQcm9ncmFtKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aAppbmRleCAwYWU3MzMxLi45YTc0Y2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtNzQsMTAgKzczLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJl
YWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJM
UmVnZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4mIGxvY2F0aW9ucykgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVn
ZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJy
ZWFrcG9pbnRJZGVudGlmaWVyKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGludWVU
b0xvY2F0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxv
Y2F0aW9uKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5
cGVzOjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFNjcmlw
dFNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIFN0cmluZyogc2Ny
aXB0U291cmNlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxz
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mKSBvdmVycmlkZTsKQEAgLTk0
LDkgKzkzLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaGFuZGxlQ29uc29sZUFzc2VydChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCi0gICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3Rh
dGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtS
ZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKKyAgICB2b2lkIHNjaGVk
dWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNo
ZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhKTsK
ICAgICB2b2lkIGNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBicmVha1By
b2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1Jl
YXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOworICAgIHZvaWQgYnJlYWtQ
cm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtS
ZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSk7CiAgICAgdm9pZCBzY3JpcHRF
eGVjdXRpb25CbG9ja2VkQnlDU1AoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KTsKIAogICAg
IGNsYXNzIExpc3RlbmVyIHsKQEAgLTEzMiw3ICsxMzEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBkaWRDbGVhckdsb2JhbE9iamVjdCgpOwogCiBwcml2YXRlOgotICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNh
bGxGcmFtZT4+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJy
ZW50Q2FsbEZyYW1lcygpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKEpTQzo6
U291cmNlSUQsIGNvbnN0IFNjcmlwdCYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9p
ZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRh
dGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKSBvdmVycmlkZSBmaW5hbDsKQEAgLTE0MCw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBicmVha3BvaW50QWN0aW9uU291bmQoaW50IGJyZWFrcG9pbnRBY3Rpb25JZGVu
dGlmaWVyKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2Jl
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYsIHVuc2lnbmVk
IGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgc2FtcGxlKSBvdmVycmlkZSBmaW5hbDsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiByZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVh
a3BvaW50Jik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2Nh
dGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmll
ciwgSlNDOjpTb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOwogICAgIGJvb2wgYXNz
ZXJ0UGF1c2VkKEVycm9yU3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckRlYnVnZ2VyQnJlYWtwb2lu
dFN0YXRlKCk7CiAgICAgdm9pZCBjbGVhckluc3BlY3RvckJyZWFrcG9pbnRTdGF0ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNjMyZGVmMy4uYTM5NDFkMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC04MCwxMiArODAsMTIgQEAgc3RhdGljIFNj
cmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHNldFBhdXNlT25FeGNlcHRp
b25zU3RhdGUoU2NyaXAKICAgICByZXR1cm4gcHJlc2VudFN0YXRlOwogfQogCi1zdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVy
cm9yUmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiB0b2tlbkxvY2F0aW9uKQorc3Rh
dGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVy
cm9yUmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiB0b2tlbkxvY2F0aW9uKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiByZXN1
bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlOjpjcmVhdGUoKQor
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlOjpjcmVh
dGUoKQogICAgICAgICAuc2V0U3RhcnRPZmZzZXQodG9rZW5Mb2NhdGlvbi5zdGFydE9mZnNldCkK
LSAgICAgICAgLnNldEVuZE9mZnNldCh0b2tlbkxvY2F0aW9uLmVuZE9mZnNldCk7Ci0gICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRFbmRPZmZzZXQodG9rZW5Mb2NhdGlv
bi5lbmRPZmZzZXQpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQpAQCAtMTM3LDcg
KzEzNyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNvbnN0IG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBi
b29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJv
b2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCit2b2lkIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9v
bCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29s
KiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmlu
amVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbgogCiAgICAgU3RyaW5nIGFyZ3VtZW50czsKICAgICBpZiAob3B0aW9uYWxBcmd1bWVudHMp
Ci0gICAgICAgIGFyZ3VtZW50cyA9ICgqb3B0aW9uYWxBcmd1bWVudHMpLT50b0pTT05TdHJpbmco
KTsKKyAgICAgICAgYXJndW1lbnRzID0gb3B0aW9uYWxBcmd1bWVudHMtPnRvSlNPTlN0cmluZygp
OwogCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OlBhdXNlT25FeGNlcHRpb25zU3RhdGUgcHJldmlv
dXNQYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gU2NyaXB0RGVidWdTZXJ2ZXI6OkRvbnRQYXVzZU9u
RXhjZXB0aW9uczsKICAgICBpZiAoYXNCb29sKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSkpCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OnJ1bihFcnJvclN0cmluZyYpCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojpn
ZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucywg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRpb25zKQordm9pZCBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5PiYmIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRp
b25zKQogewogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBWTSYg
dm0gPSBnbG9iYWxWTSgpOwpAQCAtMjM3LDggKzIzNyw5IEBAIHZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcm
IGVyCiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzVmFsaWQgPSB0eXBlTG9jYXRpb24gJiYg
dHlwZVNldCAmJiAhdHlwZVNldC0+aXNFbXB0eSgpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbiA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCkKLSAgICAg
ICAgICAgIC5zZXRJc1ZhbGlkKGlzVmFsaWQpOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uOjpjcmVhdGUoKQor
ICAgICAgICAgICAgLnNldElzVmFsaWQoaXNWYWxpZCkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7
CiAKICAgICAgICAgaWYgKGlzVmFsaWQpIHsKICAgICAgICAgICAgIGRlc2NyaXB0aW9uLT5zZXRM
ZWFzdENvbW1vbkFuY2VzdG9yKHR5cGVTZXQtPmxlYXN0Q29tbW9uQW5jZXN0b3IoKSk7CkBAIC0y
NDcsNyArMjQ4LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBl
c0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXIKICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uLT5zZXRJc1RydW5jYXRlZCh0eXBlU2V0LT5pc092ZXJmbG93bigpKTsKICAgICAgICAg
fQogCi0gICAgICAgIHR5cGVEZXNjcmlwdGlvbnMtPmFkZEl0ZW0oZGVzY3JpcHRpb24pOworICAg
ICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKFdURjo6bW92ZShkZXNjcmlwdGlvbikpOwog
ICAgIH0KIAogICAgIGRvdWJsZSBlbmQgPSBjdXJyZW50VGltZU1TKCk7CkBAIC0zMzEsMTEgKzMz
MiwxMiBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgIGNvbnN0IFZlY3RvcjxCYXNpY0Js
b2NrUmFuZ2U+JiBiYXNpY0Jsb2NrUmFuZ2VzID0gdm0uY29udHJvbEZsb3dQcm9maWxlcigpLT5n
ZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNvdXJjZUlELCB2bSk7CiAgICAgYmFzaWNCbG9ja3Mg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpCYXNpY0Jsb2NrPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBCYXNpY0Jsb2NrUmFuZ2Um
IGJsb2NrIDogYmFzaWNCbG9ja1JhbmdlcykgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrOjpjcmVhdGUoKQorICAgICAgICBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFN0
YXJ0T2Zmc2V0KGJsb2NrLm1fc3RhcnRPZmZzZXQpCiAgICAgICAgICAgICAuc2V0RW5kT2Zmc2V0
KGJsb2NrLm1fZW5kT2Zmc2V0KQotICAgICAgICAgICAgLnNldEhhc0V4ZWN1dGVkKGJsb2NrLm1f
aGFzRXhlY3V0ZWQpOwotICAgICAgICBiYXNpY0Jsb2Nrcy0+YWRkSXRlbShsb2NhdGlvbik7Cisg
ICAgICAgICAgICAuc2V0SGFzRXhlY3V0ZWQoYmxvY2subV9oYXNFeGVjdXRlZCkKKyAgICAgICAg
ICAgIC5yZWxlYXNlKCk7CisgICAgICAgIGJhc2ljQmxvY2tzLT5hZGRJdGVtKFdURjo6bW92ZShs
b2NhdGlvbikpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCBl
NWQ3M2UwLi4yZTAyOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaApAQCAtNjMsMTIg
KzYzLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYp
IG92ZXJyaWRlIHsgbV9lbmFibGVkID0gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFyc2Uo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Jikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lk
IGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNv
bnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJv
b2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJv
b2w+KiB3YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBjYWxsRnVu
Y3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBv
cHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11
dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0
ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhy
b3duKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIG9wdGlvbmFsQXJn
dW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJy
aWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5nJiwg
Y29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElkKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9w
ZXJ0aWVzKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdEdy
b3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIHJ1bihFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJp
bmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucywg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGxvY2F0aW9ucywgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj4+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZVR5cGVQcm9m
aWxlcihFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlVHlw
ZVByb2ZpbGVyKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEJh
c2ljQmxvY2tzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zb3VyY2VJRCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkJhc2ljQmxvY2s+PiYgb3V0X2Jhc2ljQmxvY2tzKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0
b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9j
cHBfZ2VuZXJhdG9yLnB5CmluZGV4IGE4M2UyZmEuLmJhNDkxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Y3BwX2dlbmVyYXRvci5weQpAQCAtMTE2LDEyICsxMTYsMTEgQEAgY2xhc3MgQ3BwR2VuZXJhdG9y
OgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUu
CiAKLSAgICAgICAgc2lnaWwgPSAnKicgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJyYn
CiAgICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFuZCBvYmplY3RzIHdpdGgg
ZGVmaW5lZCBwcm9wZXJ0aWVzLgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlzICdvYmplY3QnOgotICAgICAgICAgICAg
cmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JyArIHNpZ2ls
CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJicKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyAr
IHNpZ2lsCisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiYmJwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoK
QEAgLTE0NCw3ICsxNDMsNyBAQCBjbGFzcyBDcHBHZW5lcmF0b3I6CiAgICAgQHN0YXRpY21ldGhv
ZAogICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFtZSwg
aXNfb3B0aW9uYWwpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBP
YmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIENwcEdl
bmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGUoX3R5cGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKICAg
ICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9m
b3JfdHlwZShfdHlwZSkKICAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgpAQCAtMTU4LDkgKzE1
Nyw5IEBAIGNsYXNzIENwcEdlbmVyYXRvcjoKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
UHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAgICAgICBpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nCiAgICAgICAgICAgICBlbGlm
IF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4nCisgICAgICAgICAgICAg
ICAgcmV0dXJuICdSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4nCiAgICAgICAgICAg
ICBlbGlmIGlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNv
bnN0JyAlIGNwcF9uYW1lCiAgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkg
aW4gWydzdHJpbmcnXToKQEAgLTIxMiw3ICsyMTEsNyBAQCBjbGFzcyBDcHBHZW5lcmF0b3I6CiAg
ICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaC4K
IAogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6
Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiAnUmVmUHRy
PCVzPiYmJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAg
ICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5
cGUpCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CkBAIC0yOTcsNSArMjk2
LDkgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKQogCiAgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBzaG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1
cm4gaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3Rh
bmNlKF90eXBlLCAoUHJpbWl0aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsiYW55IiwgIm9iamVjdCJdKQorCisgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBzaG91bGRf
cGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6CiAgICAgICAgIHJldHVybiBpc2lu
c3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UoX3R5
cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVj
dCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cmlu
ZGV4IGUwNDg4NDIuLjRmM2MwYzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5CkBAIC03NiwxMCArNzYsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3Bh
dGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIp
OyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0
ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwogfTsKICIiIikKIApAQCAtMTA4LDExICsxMDgsMTEgQEAgcHJvdGVjdGVkOgogICAg
IEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKAog
ICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2Fs
bElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdl
KSBvdmVycmlkZTsKICR7Y29tbWFuZERlY2xhcmF0aW9uc30KIHByaXZhdGU6Ci0gICAgSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNwZWN0b3Ike2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTEyNSwxMyArMTI1LDEzIEBAIHBy
aXZhdGU6CiAgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlv
biA9ICgKICAgICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxiYWNrTmFtZX0g
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgICR7Y2FsbGJhY2tOYW1lfShQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOworICAgICAgICAk
e2NhbGxiYWNrTmFtZX0oUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
JiYsIGludCBpZCk7CiAgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJzfSk7
CiAgICAgfTsKICAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9
KSA9IDA7IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dp
dGNoID0gKAotICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQorICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
IApAQCAtMTQxLDcgKzE0MSw3IEBAICR7ZGlzcGF0Y2hDYXNlc30KIH0iIiIpCiAKICAgICBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkIEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkKKyIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMTY2LDE2ICsxNjYsMTYgQEAgJHtkaXNw
YXRjaENhc2VzfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKml0LT52
YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgKCgqdGhpcykuKml0LT52YWx1ZSko
Y2FsbElkLCBtZXNzYWdlLmdldCgpKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IgPSAoCi0gICAgIiIiUGFzc1JlZlB0cjxJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCisgICAgIiIiUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOwogfQogCi1JbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6
Okluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAgICA6IEluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgICwg
bV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKQEAgLTE4NiwyNiArMTg2LDI1IEBAIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyCiB9IiIiKQog
CiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1l
bnRzID0gKAotIiIiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7
Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CisiIiIgICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVy
YWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwogJHtpblBhcmFtZXRlckRlY2xhcmF0aW9u
c30KICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBl
cnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwn
JXNcJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfSIp
OwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3Nh
Z2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3Jz
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAiIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kID0gKAotIiIiSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxiYWNrTmFt
ZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNo
ZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KKyIiIkluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFj
a05hbWV9KFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hl
ciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZShXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKIHZvaWQgSW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05h
bWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQotICAgIHNlbmRJZkFjdGl2ZShqc29u
TWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7CisgICAgc2VuZElmQWN0aXZlKFdURjo6bW92ZShqc29u
TWVzc2FnZSksIEVycm9yU3RyaW5nKCkpOwogfSIiIikKIAogICAgIEZyb250ZW5kRGlzcGF0Y2hl
ckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKQEAgLTIyOCwyNiArMjI3LDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAg
ICAgICBCdWlsZGVyKFJlZjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzICR7b2JqZWN0VHlw
ZX07CiAgICAgcHVibGljOiIiIikKIAogICAgIFByb3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0
aW9uUG9zdGx1ZGUgPSAoCiAiIiIKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPCR7b2JqZWN0VHlw
ZX0+JiAoKQorICAgICAgICBSZWY8JHtvYmplY3RUeXBlfT4gcmVsZWFzZSgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmpl
Y3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nh
c3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjwke29iamVj
dFR5cGV9Pio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPCR7
b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVm
UHRyPCR7b2JqZWN0VHlwZX0+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjwk
e29iamVjdFR5cGV9Pio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTI1OCwx
MSArMjU0LDEwIEBAICR7Y29uc3RydWN0b3JFeGFtcGxlfQogICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotICAg
IHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRz
OyIiIikKKyAgICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIi
IlBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6
cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkK
KyIiIlJlZlB0cjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojpy
dW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKIHsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKICAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMTI3MmMwMC4uYTI0MWM1MyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKQEAgLTUyLDcgKzUyLDYgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVycyA9IFsKICAgICAgICAgICAgICciSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiJywKICAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+JywKLSAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIu
aD4nLAogICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQogCiAgICAgICAgIHR5
cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5nJyldCkBAIC0xNTcsNyArMTU2LDcgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAg
ICAgICAgaW5fcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcmJ10KICAgICAgICAgZm9yIF9wYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBpbl9wYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVj
a2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0cjwlcz4gY2Fs
bGJhY2siICUgY2FsbGJhY2tOYW1lKQorICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUmVm
PCVzPiYmIGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKIAogICAgICAgICBvdXRfcGFyYW1ldGVy
cyA9IFtdCiAgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA4NDYxNWRk
Li41ODJkZTRiIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAg
LTEwNCwxMCArMTA0LDEwIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNo
ZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAg
ICAgY2FzZXMgPSBbXQogICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIl
cyIpJyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCi0gICAgICAgIGNhc2VzLmFw
cGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgZG9tYWluLmNvbW1h
bmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNh
bGxJZCwgbWVzc2FnZSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCiAgICAg
ICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kc1sxOl06CiAgICAgICAgICAgICBjYXNl
cy5hcHBlbmQoJyAgICBlbHNlIGlmIChtZXRob2QgPT0gIiVzIiknICUgY29tbWFuZC5jb21tYW5k
X25hbWUpCi0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCAqbWVz
c2FnZS5nZXQoKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgY2FzZXMu
YXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgbWVzc2FnZSk7JyAlIGNvbW1hbmQuY29tbWFuZF9u
YW1lKQogCiAgICAgICAgIHN3aXRjaF9hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUn
OiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xNzgsMjIgKzE3OCwyOSBAQCBjbGFzcyBDcHBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAg
ICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnJiVzX3ZhbHVlRm91bmQnICUgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0
aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxzZTsnICUgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQogCisgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdp
bl8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICclcy5jb3B5UmVmKCknICUgcGFyYW1l
dGVyX2V4cHJlc3Npb24KKyAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyYlcycgJSBwYXJhbWV0ZXJf
ZXhwcmVzc2lvbgorCiAgICAgICAgICAgICBwYXJhbV9hcmdzID0gewogICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJh
bWV0ZXIocGFyYW1ldGVyKSwKICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyRXhwcmVzc2lv
bic6IHBhcmFtZXRlcl9leHByZXNzaW9uLAogICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhv
ZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlw
ZSksCiAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3Vt
ZW50CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlv
bnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgaW5fJShwYXJhbWV0ZXJOYW1lKXMgPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JShrZXllZEdldE1ldGhvZClzKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHN1Y2Nlc3NPdXRQ
YXJhbSlzLCBwcm90b2NvbEVycm9yc1B0cik7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICBp
bl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIGlu
XyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiUoa2V5ZWRH
ZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0
ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOycg
JSBwYXJhbV9hcmdzKQogCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRl
ck5hbWUpc192YWx1ZUZvdW5kID8gJmluXyUocGFyYW1ldGVyTmFtZSlzIDogbnVsbHB0cicgJSBw
YXJhbV9hcmdzCisgICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZyA9
ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJShwYXJhbWV0ZXJFeHByZXNzaW9uKXMg
OiBudWxscHRyJyAlIHBhcmFtX2FyZ3MKICAgICAgICAgICAgICAgICBhbHRlcm5hdGVfZGlzcGF0
Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQob3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmlu
ZykKICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQob3B0aW9uYWxfaW5f
cGFyYW1ldGVyX3N0cmluZykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYWx0
ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdpbl8nICsgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFw
cGVuZCgnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBh
bHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4
cHJlc3Npb24pCisgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKHBhcmFt
ZXRlcl9leHByZXNzaW9uKQogCiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CiAgICAgICAg
ICAgICBhc3luY19hcmdzID0gewpAQCAtMjA0LDcgKzIxMSw3IEBAIGNsYXNzIENwcEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGNhbGxiYWNrLT5kaXNh
YmxlKCk7JykKICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsnKQogICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAg
ICAgcmV0dXJuOycpCi0gICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxi
YWNrJykKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnY2FsbGJhY2suY29w
eVJlZigpJykKIAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBj
b21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgpAQCAtMjYxLDkgKzI2OCw5IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3Ry
aW5nIGVycm9yOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShj
YWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpOycgJSBjb21tYW5kX2Fy
Z3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9yJShkb21haW5O
YW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNr
ID0gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwg
Y2FsbElkKSk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJu
X3BhcmFtZXRlcnMpID4gMDoKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVy
X2RlY2xhcmF0aW9ucykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21t
YW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKQEAg
LTI4Miw2ICsyODksNiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKICAg
ICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJv
cik7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0dXJuICJcbiIuam9p
bihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBhZTA0YWRmLi5mZjA5YWIz
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01Myw3ICs1Myw2IEBAIGNsYXNzIENw
cEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAogICAgICAgICAgICAgJzxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKICAgICAgICAgICAgICc8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywK
ICAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KIAogICAgICAgICBoZWFkZXJf
YXJncyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXgg
NDI3MGIzYi4uODhmNThmNCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTEwNywxMyArMTA3LDEzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICAgICAgbGluZXMuYXBwZW5k
KCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzRnJvbnRlbmREaXNwYXRjaGVyOjolKGV2ZW50
TmFtZSlzKCUoZm9ybWFsUGFyYW1ldGVycylzKScgJSBldmVudF9hcmdzKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFs
KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdzKQogCiAgICAg
ICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zT2JqZWN0LmNvcHlSZWYoKSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkKaW5kZXggZDYwYzZhZC4uOTYxMTY1MCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CkBAIC01
Miw3ICs1Miw2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJh
dG9yKToKICAgICAgICAgaGVhZGVycyA9IHNldChbCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+JywKICAgICAgICAgICAgICc8d3RmL0Fzc2VydGlvbnMu
aD4nLAotICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicKICAgICAgICAgXSkKIAogICAg
ICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9y
dF9tYWNybycsIE5vbmUpCkBAIC0xOTUsOSArMTk0LDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlw
ZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0aW9uKSkKIAogICAgICAg
ICBjb25zdHJ1Y3Rvcl9leGFtcGxlID0gW10KLSAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5h
cHBlbmQoJyAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpjcmVhdGUoKScgJSAob2JqZWN0
X25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQo
JyAgICAgKiBSZWY8JXM+IHJlc3VsdCA9ICVzOjpjcmVhdGUoKScgJSAob2JqZWN0X25hbWUsIG9i
amVjdF9uYW1lKSkKICAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgogICAg
ICAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAgKiAgICAgLnNldCVzKC4u
LiknICUgdWNmaXJzdChtZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAgICBjb25zdHJ1Y3Rvcl9l
eGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAucmVsZWFzZSgpJykKIAogICAgICAgICBidWlsZGVy
X2FyZ3MgPSB7CiAgICAgICAgICAgICAnb2JqZWN0VHlwZSc6IG9iamVjdF9uYW1lLApAQCAtMzAy
LDYgKzMwMiw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJh
dG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgeycpCiAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwo
IiUobmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4odmFsdWUpKSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBlbGlmIENw
cEdlbmVyYXRvci5zaG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlw
ZSk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgV1RGOjptb3ZlKHZhbHVl
KSk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVy
YWwoIiUobmFtZSlzIiksIHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH0nKQpAQCAtMzMzLDcgKzMzNSw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVf
YXJndW1lbnRzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRp
bmdUcmFpdHM8JXM+IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBd
KSkKICAgICAgICAgICAgIGlmIGFyZ3VtZW50WzFdOgotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnc3RhdGljIFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOycgJSBhcmd1bWVudFswXSkKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCAzMWVmNDk0Li4yYzI2M2I1IDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMjIsNiArMTIyLDcgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQogICAgICAgICBsaW5lcy5hcHBlbmQo
J3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgiIiJ7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+
YXNPYmplY3Qob2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RT
dWNjZWVkZWQpOyIiIikKQEAgLTE2OSw2ICsxNzAsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5k
KCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9yLmNwcF9hc3Nl
cnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0
aW9uKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFN0cmluZyByZXN1bHQ7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0U3Vj
Y2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CmluZGV4IDhmZmFlOWIuLjA5MWZhNjQgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMTEsNyArMTExLDcgQEAgY2xhc3MgT2Jq
Q0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsnKQogCiAgICAg
ICAgIGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7JykKIAogICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmls
dGVyKGxhbWJkYSBwYXJhbWV0ZXI6IG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNH
ZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGNvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnMpCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHJlcXVp
cmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQppbmRleCAzYjgzNmZhLi5hM2M0ZTFiIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMTYsNyArMTE2LDcgQEAgY2xhc3MgT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAg
ICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyBvciBvcHRpb25hbF9wb2ludGVyX3Bh
cmFtZXRlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQog
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJXMuJXMiKSk7JyAlIChkb21haW4uZG9tYWlu
X25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X291dF9w
YXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQpAQCAtMTM2LDcgKzEzNiw3IEBAIGNsYXNzIE9iakNG
cm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4sIGV2ZW50
KToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAga2V5ZWRfc2V0X21l
dGhvZCA9IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIu
dHlwZSkKICAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCA1MTU0ZmVhLi40NzMxMDBiIDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTU4LDcgKzU4LDYgQEAgY2xh
c3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgJyIlc0VudW1Db252ZXJzaW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9y
Lk9CSkNfUFJFRklYLAogICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4nLAogICAgICAgICAgICAgJzx3dGYvQXNzZXJ0aW9ucy5oPicsCi0gICAgICAgICAgICAn
PHd0Zi9QYXNzUmVmUHRyLmg+JywKICAgICAgICAgXQogCiAgICAgICAgIGhlYWRlcl9hcmdzID0g
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IDljNGRhYzYuLmQ4
YTc5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTQxLDEw
ICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTE0Myw3ICsx
NDMsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIpOwogCiAj
aW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC0xNzIsMzIgKzE3MSwzMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBv
cHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAw
OwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKKyAgICAgICAgRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8SW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiog
cGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpOwogICAgIH07
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVy
cm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFBh
c3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2Fs
bGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+
JiYgY2FsbGJhY2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JT
dHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0
cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5
bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CiAg
ICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGlu
dCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYg
cHJpbnRDb2xvcik7CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOworICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYm
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUg
cGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0
IFN0cmluZyYgcHJpbnRDb2xvcik7CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0cmluZyYsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5JbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKIAogY2xhc3MgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92
ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKICAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAg
dm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgot
ICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKQEAgLTI2MiwxMiArMjYxLDEyIEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigqYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CiB9CiAKLUluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCiAgICAgLCBtX2FnZW50KGFnZW50KQog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjc3LDMzICsy
NzYsMzIgQEAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3IKICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0
aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICBpZiAobWV0aG9kID09ICJleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICAgICAgZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsIG1lc3NhZ2UpOwogICAgIGVs
c2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQot
ICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsICptZXNz
YWdlLmdldCgpKTsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
Y2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5j
IikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAg
ICAgIGV4ZWN1dGVTUUxTeW5jKGNhbGxJZCwgbWVzc2FnZSk7CiAgICAgZWxzZSBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMQXN5bmMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmMoY2FsbElkLCAq
bWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhjYWxsSWQsIG1lc3NhZ2Up
OwogICAgIGVsc2UKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
IG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91
bmQiKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0g
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnNQdHIpOworICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRh
YmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7Ci0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMzE1LDcgKzMxMyw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwog
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+IG91dF9ub3RlczsKICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwpA
QCAtMzQ3LDE0ICszNDUsMTQgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcKICAgICAgICAgaWYg
KG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgp
KTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKLUluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmRE
aXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CitJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxs
YmFjayhSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIs
IGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UoV1RGOjptb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxT
dHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIHRp
bWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3Ry
aW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+
KiBwcmludENvbG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgaWYgKGNvbHVtbk5h
bWVzKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5O
YW1lcyIpLCBjb2x1bW5OYW1lcyk7CiAgICAgaWYgKG5vdGVzLmlzQXNzaWduZWQoKSkKQEAgLTM3
MywyMCArMzcxLDE5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsCiAgICAgICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvci5n
ZXRWYWx1ZSgpKTsKICAgICBpZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29s
b3IuZ2V0VmFsdWUoKSk7Ci0gICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmlu
ZygpKTsKKyAgICBzZW5kSWZBY3RpdmUoV1RGOjptb3ZlKGpzb25NZXNzYWdlKSwgRXJyb3JTdHJp
bmcoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwot
ICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzUHRyKTsKKyAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyOworICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0
YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0zOTgsOSArMzk1LDkgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhs
b24KICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7
Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3Is
IGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjayk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgY2Fs
bElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
ZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOwogCiAg
ICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CkBA
IC00MTEsMTUgKzQwOCwxNCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbgogCiB2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKLSAgICBpbnQgaW5fZGF0
YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYXV0byBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOworICAgIGludCBpbl9k
YXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1z
Q29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVy
YWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIik7Ci0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJy
b3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtNDMxLDcgKzQyNyw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlCiAjZW5k
aWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwogICAgIFN0
cmluZyBvdXRfbm90ZXM7CiAgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CkBAIC00NTQsMTQgKzQ1
MCwxNCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZQogICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwogICAgICAgICByZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0
RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3Ip
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92
ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKLUluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNo
ZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KK0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2soUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmRE
aXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlKFdURjo6bW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAot
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcm
IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6
c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBw
YXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1l
c3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMp
OwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rl
cyk7CiAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIp
LCB0aW1lc3RhbXApOwpAQCAtNDcxLDIwICs0NjcsMTkgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRT
dWMKICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwg
c3FsRXJyb3IpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3Jl
ZW5Db2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3Jl
ZW5Db2xvcikpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmlu
dENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50
Q29sb3IpKTsKLSAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOwor
ICAgIHNlbmRJZkFjdGl2ZShXVEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBFcnJvclN0cmluZygpKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBhdXRv
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOworICAg
IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5l
cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJ
ZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3RyaW5nIGluX3F1ZXJ5
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0
KCkpOwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIik7Ci0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDk2LDkgKzQ5MSw5IEBAIHZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1f
YmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5j
KGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2spOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5
bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmRE
aXNwYXRjaGVyLmNvcHlSZWYoKSwgY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFz
eW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsK
IAogICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgp
OwpAQCAtNTUyLDcgKzU0Nyw2IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwCiAjaW5jbHVkZSAi
SW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTY1MCw3ICs2NDQsNiBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzA3LDEwICs3MDAsMTAg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKQEAg
LTcyOSwzMCArNzIyLDI3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q29kZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4m
ICgpCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKLSAgICAg
ICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAg
ICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnBy
ZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZlB0cjxFcnJvcj4g
cmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJv
cjo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0
Q29kZSguLi4pOworICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNl
KCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiB9IC8vIERhdGFiYXNl
CkBAIC0xMDY1LDcgKzEwNTUsNyBAQCB2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKAogICAgIH07CiAK
ICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVt
bk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQg
KmRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xv
cikgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFt
ZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xMTA1LDcgKzEwOTUsNyBAQCB2
b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVz
LCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFJXSVByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyAqc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwogICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBA
InZhbHVlcyIpOwpAQCAtMTE0NSw3ICsxMTM1LDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl8K
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQs
IGludCBkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBSV0lQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUldJUHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKQEAgLTExNzYsNyArMTE2Niw3IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluCiAgICAgfTsK
IAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgUldJUHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKICAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwpAQCAt
MTU2NSw3ICsxNTU1LDYgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggN2I1ZWY1Ny4uMjdmNzQ2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CkBAIC00MSwxOCArNDEsMTggQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFs
dGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3Qg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVm
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAog
CiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5BbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxs
SWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0
YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJp
bnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3ZhbHVlcywg
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3Rh
bXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCog
aW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYm
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcq
IGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGlu
X3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGlu
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTM4LDcg
KzEzOCw2IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIik7CiAK
ICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTE2NCwyMSArMTYzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgWWVsbG93ID0gNSwK
ICAgICAgICAgQmxhY2sgPSA2LAogICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENv
bG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRf
Y29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRf
b3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291
dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3Nj
cmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0
cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5D
b2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29u
c3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGlu
X3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92
YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29s
b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1l
cywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91
dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0g
MDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOwogfTsKIAogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAg
ICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgICB2b2lkIGV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciYsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yNDMsMTIg
KzI0MiwxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI+IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwogfQog
Ci1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAg
ICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKQEAgLTI1OCw1NyArMjU3LDU2IEBAIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3ZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAg
ICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMp
OwogCiAgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpCi0g
ICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQo
KSk7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBtZXNzYWdl
KTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIp
Ci0gICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsICptZXNzYWdlLmdl
dCgpKTsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2Fn
ZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBm
b3VuZCIpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBh
cmFtcyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOworICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7CiAgICAgYm9vbCBjb2x1bW5OYW1l
c192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXk+IGluX2NvbHVtbk5hbWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmY29sdW1u
TmFtZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKICAgICBib29sIG5vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgaW5fbm90
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoIm5vdGVz
IiksICZub3Rlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCB0
aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxkb3VibGU+IGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIp
LCAmdGltZXN0YW1wX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
cy5nZXQoKSk7CiAgICAgYm9vbCB2YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OwogICAgIGJvb2wgcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0VmFsdWUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInBheWxvYWQi
KSwgJnBheWxvYWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksICZwYXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAg
ICBib29sIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgJmRhdGFiYXNlSWRfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJ
SUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgJmRhdGFiYXNlSWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOwogICAgIGJvb2wgc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3IgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJzcWxFcnJvciIpLCAmc3FsRXJyb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3Ig
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lci5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmc3FsRXJyb3JfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGJvb2wgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZh
bHNlOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNv
bG9yIiksICZzY3JlZW5Db2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
U3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwg
JnNjcmVlbkNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICBib29s
IHByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBpbl9wcmludENvbG9y
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJwcmludENvbG9yIiksICZwcmludENvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzLmdldCgpKTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
IFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMiKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92
ZShwcm90b2NvbEVycm9ycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMoY2FsbElkLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gJmluX2NvbHVt
bk5hbWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxwdHIs
IHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVlc192
YWx1ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVGb3VuZCA/ICZp
bl9wYXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNl
SWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gJmluX3NxbEVycm9yIDogbnVsbHB0
ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIHBy
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhjYWxs
SWQsIGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBpbl9jb2x1bW5OYW1lcy5jb3B5UmVmKCkgOiBu
dWxscHRyLCBub3Rlc192YWx1ZUZvdW5kID8gJmluX25vdGVzIDogbnVsbHB0ciwgdGltZXN0YW1w
X3ZhbHVlRm91bmQgPyAmaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgdmFsdWVzX3ZhbHVlRm91bmQg
PyBpbl92YWx1ZXMuY29weVJlZigpIDogbnVsbHB0ciwgcGF5bG9hZF92YWx1ZUZvdW5kID8gaW5f
cGF5bG9hZC5jb3B5UmVmKCkgOiBudWxscHRyLCBkYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmaW5f
ZGF0YWJhc2VJZCA6IG51bGxwdHIsIHNxbEVycm9yX3ZhbHVlRm91bmQgPyBpbl9zcWxFcnJvci5j
b3B5UmVmKCkgOiBudWxscHRyLCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJmluX3NjcmVlbkNv
bG9yIDogbnVsbHB0ciwgcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJmluX3ByaW50Q29sb3IgOiBu
dWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CkBAIC0zMTgsNyArMzE2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgY2FsbEkKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwogICAgIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAg
IG1fYWdlbnQtPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIGNvbHVtbk5hbWVz
X3ZhbHVlRm91bmQgPyAmaW5fY29sdW1uTmFtZXMgOiBudWxscHRyLCBub3Rlc192YWx1ZUZvdW5k
ID8gJmluX25vdGVzIDogbnVsbHB0ciwgdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmaW5fdGltZXN0
YW1wIDogbnVsbHB0ciwgdmFsdWVzX3ZhbHVlRm91bmQgPyAmaW5fdmFsdWVzIDogbnVsbHB0ciwg
cGF5bG9hZF92YWx1ZUZvdW5kID8gJmluX3BheWxvYWQgOiBudWxscHRyLCBkYXRhYmFzZUlkX3Zh
bHVlRm91bmQgPyAmaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIHNxbEVycm9yX3ZhbHVlRm91bmQg
PyAmaW5fc3FsRXJyb3IgOiBudWxscHRyLCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJmluX3Nj
cmVlbkNvbG9yIDogbnVsbHB0ciwgcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJmluX3ByaW50Q29s
b3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1w
LCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9y
LCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworICAgIG1fYWdlbnQtPmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBp
bl9jb2x1bW5OYW1lcy5jb3B5UmVmKCkgOiBudWxscHRyLCBub3Rlc192YWx1ZUZvdW5kID8gJmlu
X25vdGVzIDogbnVsbHB0ciwgdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmaW5fdGltZXN0YW1wIDog
bnVsbHB0ciwgdmFsdWVzX3ZhbHVlRm91bmQgPyBpbl92YWx1ZXMuY29weVJlZigpIDogbnVsbHB0
ciwgcGF5bG9hZF92YWx1ZUZvdW5kID8gaW5fcGF5bG9hZC5jb3B5UmVmKCkgOiBudWxscHRyLCBk
YXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIHNxbEVycm9y
X3ZhbHVlRm91bmQgPyBpbl9zcWxFcnJvci5jb3B5UmVmKCkgOiBudWxscHRyLCBzY3JlZW5Db2xv
cl92YWx1ZUZvdW5kID8gJmluX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgcHJpbnRDb2xvcl92YWx1
ZUZvdW5kID8gJmluX3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsICZvdXRf
bm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0
YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3Ip
OwogCiAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICBpZiAob3V0X2NvbHVtbk5h
bWVzKQpAQCAtMzQwLDM5ICszMzgsMzggQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbEkKICAgICAg
ICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKICAgICAgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5nZXRW
YWx1ZSgpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
LSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFt
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXls
b2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJ
ZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9y
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9y
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xv
ciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zQ29udGFpbmVyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4g
aW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgZG91
YmxlIGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUo
cGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0
KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBh
cmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwor
ICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9y
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgaW5fcHJpbnRD
b2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1v
dmUocHJvdG9jb2xFcnJvcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMoY2FsbElkLCBpbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVz
dGFtcCwgaW5fdmFsdWVzLCBpbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvciwg
aW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3IpOworICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsIGluX2NvbHVtbk5hbWVz
LmNvcHlSZWYoKSwgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLmNvcHlSZWYoKSwg
aW5fcGF5bG9hZC5jb3B5UmVmKCksIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLmNvcHlSZWYo
KSwgaW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsK
ICAgICBTdHJpbmcgb3V0X25vdGVzOwogICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwpAQCAtMzgy
LDcgKzM3OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkCiAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwogICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKICAg
ICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBv
dXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
ZXJyb3IsIGluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMs
IGluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwg
aW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFt
cCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJv
ciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKyAgICBtX2FnZW50LT5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIGluX2NvbHVtbk5hbWVzLmNvcHlSZWYoKSwg
aW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLmNvcHlSZWYoKSwgaW5fcGF5bG9hZC5j
b3B5UmVmKCksIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLmNvcHlSZWYoKSwgaW5fc2NyZWVu
Q29sb3IsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90
aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRf
c3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CiAKICAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOwpAQCAtMzk1LDcgKzM5Miw3IEBAIHZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgY2FsbElkCiAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50
VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwogICAgIH0KLSAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCks
IGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00NDMsNyArNDQwLDYg
QEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtNTQxLDcgKzUzNyw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC01OTgsMTAgKzU5MywxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJv
ciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7Ci0gICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAg
ICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgpAQCAtNjIwLDMwICs2MTUsMjcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAg
ICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAgUmVmPEVy
cm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFz
c1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4q
PigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3Jl
YXRlKCkKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQogICAgICAq
ICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLik7CisgICAgICog
ICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1U
cmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKQEAgLTc2Nyw4ICs3NTksOCBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyKGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNv
bnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGlu
X3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xv
ciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpIG92ZXJy
aWRlOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTk0NywxNCArOTM5LDE0IEBAIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
aW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIGNhbGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGlt
ZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFs
dWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBp
bnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mJiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3Ry
aW5nKiBpbl9wcmludENvbG9yKQogewogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CiAgICAgfTsKIAogICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJh
c2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwogICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90
ZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAgLTEwMTIsMTQgKzEwMDQsMTQgQEAgdm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhsb25nIGMKICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGNvbHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDog
bmlsKSBub3RlczooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90
aW1lc3RhbXAgPyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9f
aW5fdmFsdWVzIDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5p
bCkgZGF0YWJhc2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNx
bEVycm9yOihpbl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjoo
aW5fc2NyZWVuQ29sb3IgPyAmb19pbl9zY3JlZW5Db2xvciA6IG5pbCkgcHJpbnRDb2xvcjooaW5f
cHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IgOiBuaWwpXTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4m
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0
YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92YWx1ZXMs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVycm9yLCBj
b25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3Ip
Cit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBk
b3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJX
SVByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAg
LTE0MTMsNyArMTQwNSw2IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQK
aW5kZXggMzgyMmZhOS4uMmY5MDNlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0
Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7
IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRl
OgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CiB9OwogCiAKQEAgLTE1Niw3ICsxNTYsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrMyIpOwogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xOTAsMTIgKzE4OSwxMiBAQCBwcm90
ZWN0ZWQ6CiAKIGNsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwor
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBsb2FkUmVz
b3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSk7CiBwcml2YXRlOgotICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTIwNyw4ICsyMDYsOCBAQCBw
cml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsK
KyAgICBzdGF0aWMgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJl
c291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOwogICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwpAQCAtMjE4LDcgKzIxNyw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2
YXRlOgotICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTI4NCwxMiArMjgzLDEyIEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5J
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQogSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOwogfQogCi1JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQorSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI5OSwxMiArMjk4LDEyIEBAIEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlMSIpCi0gICAg
ICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGxvYWRS
ZXNvdXJjZTEoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3JrMSIsICcu
JywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQpAQCAtMzE5LDE4ICszMTgsMTggQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwogCi0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQs
IFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorUmVmPElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigqYmFja2VuZERpc3BhdGNo
ZXIsIGFnZW50KSk7CiB9CiAKLUluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Oklu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCitJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQogICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIpCiAgICAgLCBtX2FnZW50KGFnZW50KQogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMzQwLDcgKzMzOSw3IEBAIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMiKSwgdGhpcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCkBAIC0zNzEsNyArMzcwLDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+dmFsdWUp
KGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJ
ZCwgbWVzc2FnZS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JikKQEAgLTM4NCwxMCArMzgzLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYK
IAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UxKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQog
CiB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00MDAsMTAgKzM5OSwxMCBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7CiAKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmKQpAQCAtNDE2LDEwICs0MTUsMTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBl
cnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKQEAgLTQzMiwx
MCArNDMxLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVy
cm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00NDgsMTAgKzQ0NywxMCBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNShlcnJvcik7CiAKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3Zl
KHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQpAQCAtNDY0LDEwICs0NjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWMKICNlbmRpZgog
CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTYoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKQEAgLTQ4MCwxMCArNDc5LDEwIEBA
IHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9y
OwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsKIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTUzMSw3ICs1MzAsNiBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2luY2x1ZGUg
Ikluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC02MjksNyArNjI3LDYgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTEyOTIsNyArMTI4OSw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1D
b252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQ
dHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFs
dWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CmluZGV4IDhkYzljMWYuLjQw
MTg1YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMu
anNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
Y2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsg
fQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAg
ICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAg
IFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
KyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
CiB9OwogCiAKQEAgLTE0NCw3ICsxNDQsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJFdmVudERvbWFpbiIpOwogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNzEsMTIgKzE3MCwxMiBAQCBwcm90ZWN0
ZWQ6CiAKIGNsYXNzIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Up
IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcios
IEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2
YXRlOgogICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKIHByaXZhdGU6Ci0gICAg
SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTI0MSwxMiArMjQwLDEy
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAotSW5zcGVjdG9yQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
LCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
K0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1fYWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNTYsMTIgKzI1NSwxMiBAQCBJbnNw
ZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkNvbW1hbmREb21haW4iKSwgdGhpcyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPElu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9
PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKQotICAgICAgICBjb21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICAgICAgY29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJDb21tYW5k
RG9tYWluIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CkBAIC0yNzYsMTQg
KzI3NSwxNCBAQCB2b2lkIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYQogI2VuZGlmCiAKICAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwogICAgIG1f
YWdlbnQtPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVl
KTsKIAogICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCiAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgicmV0dXJuVmFsdWUiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51
bUNvbnN0YW50VmFsdWUob3V0X3JldHVyblZhbHVlKSk7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7CisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3Vs
dCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zMzEsNyArMzMw
LDYgQEAgdm9pZCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2EKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewpAQCAtNDAxLDExICszOTksMTEgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKIHZvaWQgSW5zcGVjdG9yRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50
V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2Qi
KSwgQVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIikpOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInBhcmFtZXRlciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QuY29weVJlZigpKTsKIAogICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KQEAgLTQ1NCw3ICs0NTIsNiBAQCB2b2lkIEluc3Bl
Y3RvckV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVy
KFBhcmFtZXRlciBwYQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC04MTMsNyArODEwLDcgQEAgdm9p
ZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShsb24KICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XihSV0lQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVy
blZhbHVlIHJldHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmV0dXJuVmFsdWUi
KSwgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwogICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHRPYmplY3QucmVsZWFzZSgpLCBTdHJp
bmcoKSk7CiAgICAgfTsKQEAgLTEwMjEsOSArMTAxOCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiAgICAgaWYgKCFmcm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJh
bWV0ZXIiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicGFyYW1ldGVyIiksIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1l
dGVyKSk7CiAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIp
LCBwYXJhbXNPYmplY3QpOwogICAgIGZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CkBAIC0xMTQ1LDcgKzExNDIsNiBAQCBf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJXSVByb3Rv
Y29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
UGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IGQ5MmVjNTIuLmNhZmU0NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9l
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEs
MTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xMzMsNyArMTMzLDYg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKIAogI2luY2x1
ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtMjQyLDcgKzI0MSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI2luY2x1ZGUgIkluc3Bl
Y3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTIsOCArMjUwLDggQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KLSAgICB2b2lk
IGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3Rl
cywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENv
bG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9p
ZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3Rlcywg
Y29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9h
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3Is
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25z
dCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKTsKKyAgICB2b2lk
IGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3Ry
aW5nJiBwcmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKIH07CkBAIC0zMDUsMTEgKzMwMywxMSBAQCBw
cml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBT
dHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25z
dCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
c3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRp
b25hbFBhcmFtZXRlcnMiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1
bW5OYW1lcykKICAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNv
bHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBpZiAobm90ZXMpCkBAIC0zMjYsMTYgKzMy
NCwxNiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdAogICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICpzY3JlZW5Db2xvcik7CiAgICAg
aWYgKHByaW50Q29sb3IpCiAgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCAqcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0LmNvcHlS
ZWYoKSk7CiAKICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xv
cikKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAs
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENv
bG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
cGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVt
bk5hbWVzKTsKICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVz
IiksIG5vdGVzKTsKICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRp
bWVzdGFtcCIpLCB0aW1lc3RhbXApOwpAQCAtMzQ0LDcgKzM0Miw3IEBAIHZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhQYXNzUmVmCiAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxF
cnJvciIpLCBzcWxFcnJvcik7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3IpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFt
c09iamVjdC5jb3B5UmVmKCkpOwogCiAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQpAQCAt
MzkzLDcgKzM5MSw2IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6
OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmCiAKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKQEAgLTQ0NSwxMCArNDQyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQog
Ci0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92
ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBF
cnJvcjsKICAgICBwdWJsaWM6CkBAIC00NjcsMzAgKzQ2NCwyNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBv
cGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9y
Pio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRo
aXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKICAg
ICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
LSAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqIFJl
ZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRNZXNzYWdl
KC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKiAgICAgLnNldENvZGUoLi4u
KQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAg
IHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRz
OwogfTsKIAogfSAvLyBEYXRhYmFzZQpAQCAtODg4LDkgKzg4Miw5IEBAIHVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyIpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgaWYgKGNvbHVtbk5h
bWVzKQogICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsKICAgICBpZiAo
bm90ZXMpCkBAIC05MjUsOSArOTE5LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJz
Y3JlZW5Db2xvciIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0
ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKICAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsK
ICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0
aW1lc3RhbXApOwpAQCAtMTA0MSw3ICsxMDM1LDYgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVy
cy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbi1yZXN1bHQKaW5kZXggZjdiNDQ5ZC4uM2M1YjYxNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xNDIsNyArMTQyLDYgQEAg
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiKTsKIAogI2luY2x1ZGUg
Ikluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAt
MTY3LDEyICsxNjYsMTIgQEAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykK
IGNsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHN0YXRp
YyBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
JiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKIHBy
aXZhdGU6Ci0gICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogcHVibGljOgpAQCAtMjQxLDEyICsyNDAsMTIgQEAgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGEKICNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCiAKICNpZiBQ
TEFURk9STShXRUJfQ09NTUFORFMpCi1QYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OwogfQogCi1JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
c3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI1NiwxMiArMjU1LDEyIEBAIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3Zv
aWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
CiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAgbG9h
ZFJlc291cmNlKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBsb2FkUmVzb3VyY2Uo
Y2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3JrMSIsICcuJywgbWV0aG9k
LCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQpAQCAtMjc2LDEwICsyNzUsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3QKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CiAKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3Zl
KHJlc3VsdCksIGVycm9yKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCiAK
QEAgLTMyOCw3ICszMjcsNiBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdAogI2luY2x1ZGUgIklu
c3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zOTUsNyArMzkzLDcgQEAgbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAjaWYgUExBVEZPUk0oV0VCX0VWRU5UUykKIHZvaWQgSW5zcGVjdG9y
TmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJt
ZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIpKTsKIAogICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKQEAgLTQ0Niw3ICs0NDQsNiBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKQEAgLTQ5MywxMCArNDkwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk5ldHdvcmtFcnJvciovSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3Jr
RXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAg
ICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKICAgICBwdWJsaWM6CkBAIC01MTUsMzAg
KzUxMiwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8TmV0d29ya0Vycm9yPiYg
KCkKKyAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9y
KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5ldHdvcmtFcnJvcj4q
PigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxOZXR3b3JrRXJy
b3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5ldHdv
cmtFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJv
cj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0g
TmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9
IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAg
ICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICog
ICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiB9
IC8vIE5ldHdvcmsyCkBAIC05OTAsNyArOTg0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKICAgICBpZiAoIWZyb250ZW5kQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiKSk7CiAgICAg
ZnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKIH0KQEAgLTEwOTgsNyArMTA5Miw2IEBAIF9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhl
bHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
LXJlc3VsdAppbmRleCAyZGNmMTMzLi4zNGQyNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
LSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNo
ZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9
CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToK
LSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwogfTsKIAogCkBAIC0xMjcsNyArMTI3LDYgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIklu
c3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjM2
LDcgKzIzNSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI2luY2x1ZGUgIkluc3BlY3RvclBy
b3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMzQsNyArMzMyLDYgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTgxNyw3ICs4MTQsNiBAQCB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBl
cnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0CmluZGV4IDkzOTkzYTMuLmRmMzkzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRj
aGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsg
fQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6
Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKIH07CiAKIApAQCAtMTI3LDcgKzEyNyw2IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJJ
bnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIz
Niw3ICsyMzUsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzM0LDcgKzMzMiw2IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zODQsMTAgKzM4MSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypL
ZXlQYXRoKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVy
KFJlZjwvKktleVBhdGgqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7CiAgICAgcHVibGljOgpAQCAtMzk5
LDM4ICszOTYsMzUgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEtleVBhdGg+JiAo
KQorICAgICAgICBSZWY8S2V5UGF0aD4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9m
KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxLZXlQYXRoPio+KCZtX3Jlc3VsdCk7Ci0g
ICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPEtleVBhdGg+IHJlbGVhc2UoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPEtleVBhdGg+KCp0aGlzKS5yZWxlYXNlKCk7
CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAg
IH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQ
dHI8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldFR5
cGUoLi4uKTsKKyAgICAgKiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkK
KyAgICAgKiAgICAgLnNldFR5cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAq
LwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3Ry
dWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCiAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRB
cnJheShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVl
KQorICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCB2YWx1ZSk7CisgICAgICAgIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSwgV1RGOjptb3ZlKHZhbHVlKSk7
CiAgICAgfQogfTsKIApAQCAtOTIwLDcgKzkxNCw2IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBl
cnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmluZGV4IDIwNGEyYjguLmY2Njk1NDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAt
NDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTI3
LDcgKzEyNyw2IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIzNiw3ICsyMzUsNiBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMzM0LDcgKzMzMiw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC04MDMsNyArODAwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICNp
bXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAppbmRleCAzNjU0NmMyLi43ZjFl
NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwx
MCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTEzMCw3ICsxMzAsNiBA
QCBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwge0RpZWQ6
ICJEaWVkIiwgRmFpbnRlZDogIkZhaW50ZQogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yMzksNyArMjM4LDYgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTMzNyw3ICszMzUsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIApAQCAtODY0LDcgKzg2MSw2IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFJXSVByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNv
bnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKaW5kZXggZGE3NTY0Ni4uNThjYTQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0g
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVy
OyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0g
ICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKIH07CiAKIApAQCAtMTMxLDcgKzEzMSw2IEBAIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCJSdW50aW1lLlR3b0xlZ2dlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6CiAK
ICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTI0MCw3ICsyMzksNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRl
ICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzM4LDcgKzMzNiw2IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC05MDIsNyArODk5LDYg
QEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFscykgewogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIK
ICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5k
ZXggY2M0MmZkMi4uOTFkNzVjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1
bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0
ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAK
QEAgLTEyNyw3ICsxMjcsNiBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yMzYsNyArMjM1LDYgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKQEAgLTMzNCw3ICszMzIsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMzg3LDEwICszODQsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0lu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1
bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJp
ZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKQEAgLTQwOSwzMCArNDA2LDI3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQog
Ci0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIFJlZjxFcnJvcj4g
cmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQ
dHI8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRy
PEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJl
c3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgotICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgp
CisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKICAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqICAgICAu
c2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsK
ICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRz
IEl0ZW1UcmFpdHM7CiB9OwogCiBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewpAQCAtNDUyLDQwICs0NDYsMzcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0lu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1
bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJp
ZW5kIGNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+JiAoKQorICAgICAgICBS
ZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQ
YXNzUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMp
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+
KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJl
c3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKTsKKyAgICAgKiBSZWY8T3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpj
cmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
fQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOwogCi0gICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQogICAgIHsK
LSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1
bW5OYW1lcyIpLCB2YWx1ZSk7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgV1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQog
CiAgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtNDk4LDE5ICs0ODks
MTkgQEAgcHVibGljOgogICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXREb3VibGUoQVND
SUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQgc2V0VmFs
dWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgIHZv
aWQgc2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgV1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4g
dmFsdWUpCisgICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAgICAgIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBXVEY6Om1vdmUodmFsdWUp
KTsKICAgICB9CiAKLSAgICB2b2lkIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9yKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQogICAgIHsKLSAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwg
dmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJlcnJvciIpLCBXVEY6Om1vdmUodmFsdWUpKTsKICAgICB9CiB9OwogCkBAIC01MzcsMTUg
KzUyOCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
LSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiY29sdW1uTmFtZXMiKSwgdmFsdWUpOwpAQCAtNTY2LDU1ICs1NTcsNTIgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwg
dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+JiAoKQorICAg
ICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUp
ID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UGFyYW1ldGVyQnVuZGxl
Pio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPFBhcmFtZXRl
ckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
UGFyYW1ldGVyQnVuZGxlPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFy
YW1ldGVyQnVuZGxlPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgog
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8UGFyYW1ldGVyQnVu
ZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogUmVmPFBhcmFt
ZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQogICAgICAqICAg
ICAuc2V0Q29sdW1uTmFtZXMoLi4uKQogICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQogICAgICAq
ICAgICAuc2V0VGltZXN0YW1wKC4uLikKICAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCiAgICAg
ICogICAgIC5zZXRQYXlsb2FkKC4uLikKLSAgICAgKiAgICAgLnNldEVycm9yKC4uLik7CisgICAg
ICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJ
dGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiAvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVz
ZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVj
dG9yT2JqZWN0IG1ldGhvZHMuICovCkBAIC02NDAsMTAgKzYyOCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRy
KQorICAgICAgICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMq
L0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAg
ZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CiAgICAgcHVibGlj
OgpAQCAtNjgzLDMzICs2NzEsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4mICgpCisgICAgICAgIFJlZjxPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAg
fQogCi0gICAgICAgIFBhc3NSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWZQdHI8T2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+Kj4oJnJlc3VsdCkpOwogICAgICAg
ICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAg
ICAqIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAgICAqIFJlZjxPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzOjpjcmVhdGUoKQogICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCiAgICAgICog
ICAgIC5zZXRBcnJheSguLi4pCiAgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQogICAgICAqICAg
ICAuc2V0VmFsdWUoLi4uKQotICAgICAqICAgICAuc2V0T2JqZWN0KC4uLik7CisgICAgICogICAg
IC5zZXRPYmplY3QoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRy
YWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpAQCAtNzM4LDE1ICs3MjMsMTUg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRy
KQorICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUo
b2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgUGFy
YW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29s
dW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1u
TmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVt
bk5hbWVzIiksIHZhbHVlKTsKQEAgLTc2Nyw1NSArNzUyLDUyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZh
bHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFs
dWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxv
YWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAgICAgUmVm
PFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXpl
b2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9y
ZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+
IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFtZXRl
ckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1
bmRsZT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVz
dWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5k
bGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldENv
bHVtbk5hbWVzKC4uLikKICAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKICAgICAgKiAgICAgLnNl
dFRpbWVzdGFtcCguLi4pCiAgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQogICAgICAqICAgICAu
c2V0UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pOworICAgICAqICAgICAu
c2V0RXJyb3IoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0
cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBUZXN0CkBAIC0xMzMxLDcgKzEzMTMsNiBAQCBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJXSVByb3RvY29s
RW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFz
c1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDc2ZDAxZWQuLmE1NGM5NTE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTMxLDcgKzEzMSw2IEBAIEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIs
IEhlbnM6ICJIZW5zCiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI0MCw3ICsyMzksNiBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzM4
LDcgKzMzNiw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zOTYsMTAgKzM5MywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypUeXBlTmVlZGluZ0Nhc3QqL0luc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qVHlwZU5lZWRpbmdDYXN0
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CiAgICAgcHVibGljOgpAQCAtNDMyLDQwICs0
MjksMzcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNldCksIHByb3Bl
cnR5X3RyZWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUcmVlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFR5cGVO
ZWVkaW5nQ2FzdD4mICgpCisgICAgICAgIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2UoKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQogCi0gICAgICAg
IFBhc3NSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+KCp0aGlzKS5yZWxlYXNlKCk7Cisg
ICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWlu
dGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9
CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAq
IFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9IFR5cGVOZWVkaW5nQ2FzdDo6Y3JlYXRl
KCkKKyAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6
OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQogICAgICAqICAgICAuc2V0TnVt
YmVyKC4uLikKICAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQogICAgICAqICAgICAuc2V0SWQo
Li4uKQotICAgICAqICAgICAuc2V0VHJlZSguLi4pOworICAgICAqICAgICAuc2V0VHJlZSguLi4p
CisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAg
dHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7
CiB9OwogCiAvKiAgKi8KQEAgLTQ5OSw0MCArNDkzLDM3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlY3Vyc2l2ZU9iamVj
dDEqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVm
PC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0
KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+JiAoKQor
ICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2Jq
ZWN0MSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZWN1cnNpdmVP
YmplY3QxPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPFJl
Y3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgICAgICBS
ZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VO
b25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxSZWN1cnNpdmVPYmplY3QxPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAK
ICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8UmVj
dXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCk7CisgICAg
ICogUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0
ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0g
ICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFp
dHM7CiAKLSAgICB2b2lkIHNldE9iaihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoIm9iaiIp
LCB2YWx1ZSk7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxp
dGVyYWwoIm9iaiIpLCBXVEY6Om1vdmUodmFsdWUpKTsKICAgICB9CiB9OwogCkBAIC01NTMsNDAg
KzU0NCwzNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5k
IGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CiAgICAgcHVibGljOgogCi0gICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYgKCkKKyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVj
dDI+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4qPigmbV9yZXN1bHQpOwotICAg
ICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPigq
dGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0Mj4qPigm
cmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJl
Y3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpOworICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiBy
ZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QyOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgp
OwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90
b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCi0gICAgdm9pZCBzZXRPYmooUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1
ZSkKKyAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgV1RGOjptb3ZlKHZh
bHVlKSk7CiAgICAgfQogfTsKIApAQCAtNTk4LDcgKzU4Niw3IEBAIHN0YXRpYyB2b2lkIGFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKICNlbmRp
ZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVu
dGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSk7Citz
dGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4g
cnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpOwog
I2lmICFBU1NFUlRfRElTQUJMRUQKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECkBAIC02ODQsNiArNjcyLDcgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfQVJH
KHZhbHVlLCB2YWx1ZSk7CiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBib29sIGNhc3RTdWNjZWVk
ZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKICAgICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7
CkBAIC02OTQsNiArNjgzLDcgQEAgdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGUKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVk
ZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNj
ZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwpAQCAtNzI5LDcgKzcxOSw3IEBAIHZvaWQgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRW
YWx1ZUhhc0V4CiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCi1QYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKIHsKICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKQEAgLTc0NSw2ICs3MzUsNyBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OgogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCiB7CisgICAg
QVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9i
amVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsK
ICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwpAQCAtNzY1
LDYgKzc1Niw3IEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2
ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwogICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc09iamVjdChvYmplY3QpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CkBAIC0xMjU2LDcgKzEyNDgsNiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25I
ZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNp
bXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVw
bGF5L0VuY29kZWRWYWx1ZS5jcHAKaW5kZXggYzcxZGJjNi4uNzI3ZWJhMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcApAQCAtMzcsMjIgKzM3LDIy
IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1QYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gRW5jb2RlZFZhbHVlOjphc09iamVjdCgpCitSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBFbmNvZGVkVmFsdWU6OmFzT2JqZWN0KCkKIHsKICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gbV92YWx1
ZS0+YXNPYmplY3QocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gRW5jb2RlZFZhbHVlOjph
c0FycmF5KCkKK1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gRW5jb2RlZFZhbHVlOjphc0FycmF5KCkK
IHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdDsKICAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSBtX3ZhbHVlLT5hc0FycmF5KHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0
U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxW
ZWN0b3I8Y2hhcj4+OjplbmNvZGVWYWx1ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKQEAg
LTE3NSwyMyArMTc1LDIzIEBAIHRlbXBsYXRlPD4gU3RyaW5nIEVuY29kZWRWYWx1ZTo6Y29udmVy
dFRvPFN0cmluZz4oKQogdGVtcGxhdGU8Pgogdm9pZCBFbmNvZGVkVmFsdWU6OnB1dDxFbmNvZGVk
VmFsdWU+KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB0eXBlbmFtZSBFbmNvZGluZ1RyYWl0czxF
bmNvZGVkVmFsdWU+OjpEZWNvZGVkVHlwZSYgdmFsdWUpCiB7Ci0gICAgYXNPYmplY3QoKS0+c2V0
VmFsdWUoa2V5LCB2YWx1ZS5tX3ZhbHVlKTsKKyAgICBhc09iamVjdCgpLT5zZXRWYWx1ZShrZXks
IHZhbHVlLm1fdmFsdWUuY29weVJlZigpKTsKIH0KIAogdGVtcGxhdGU8Pgogdm9pZCBFbmNvZGVk
VmFsdWU6OmFwcGVuZDxFbmNvZGVkVmFsdWU+KGNvbnN0IHR5cGVuYW1lIEVuY29kaW5nVHJhaXRz
PEVuY29kZWRWYWx1ZT46OkRlY29kZWRUeXBlJiB2YWx1ZSkKIHsKLSAgICBhc0FycmF5KCktPnB1
c2hWYWx1ZSh2YWx1ZS5tX3ZhbHVlKTsKKyAgICBhc0FycmF5KCktPnB1c2hWYWx1ZSh2YWx1ZS5t
X3ZhbHVlLmNvcHlSZWYoKSk7CiB9CiAKIHRlbXBsYXRlPD4KIGJvb2wgRW5jb2RlZFZhbHVlOjpn
ZXQ8RW5jb2RlZFZhbHVlPihjb25zdCBTdHJpbmcmIGtleSwgdHlwZW5hbWUgRW5jb2RpbmdUcmFp
dHM8RW5jb2RlZFZhbHVlPjo6RGVjb2RlZFR5cGUmIGRlY29kZWRWYWx1ZSkKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWUoYXNPYmplY3QoKS0+
Z2V0KGtleSkpOwotICAgIGlmICghaW5zcGVjdG9yVmFsdWUpCisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICghYXNPYmplY3QoKS0+Z2V0VmFsdWUo
a2V5LCB2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRlY29kZWRWYWx1ZSA9
IEVuY29kZWRWYWx1ZShpbnNwZWN0b3JWYWx1ZSk7CisgICAgZGVjb2RlZFZhbHVlID0gRW5jb2Rl
ZFZhbHVlKFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaAppbmRleCBjMDAxMGU4Li44NjU5
YjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKQEAg
LTQxLDcgKzQxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEVuY29kaW5nVHJhaXRz
OwogCiBjbGFzcyBFbmNvZGVkVmFsdWUgZmluYWwgewogcHVibGljOgotICAgIGV4cGxpY2l0IEVu
Y29kZWRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQor
ICAgIGV4cGxpY2l0IEVuY29kZWRWYWx1ZShSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4mJiB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KIAogICAgIEVuY29kZWRW
YWx1ZSgpCkBAIC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydFRvKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBhc09iamVjdCgpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gYXNBcnJheSgpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gYXNP
YmplY3QoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheT4gYXNBcnJheSgpOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weQpp
bmRleCBkZjliOTY3Li42NWY1NDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5w
eQpAQCAtMzQxLDEzICszNDEsMTMgQEAgY2xhc3MgVHlwZToKICAgICAgICAgaWYgc2VsZi5tb2Rl
ID09IFR5cGVNb2Rlcy5TQ0FMQVI6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlX25hbWUo
cXVhbGlmaWVkKQogICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSBUeXBlTW9kZXMuU0hBUkVEOgot
ICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzPiIgJSBzZWxmLnR5cGVfbmFtZShxdWFs
aWZpZWQpCisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjwlcz4iICUgc2VsZi50eXBlX25hbWUo
cXVhbGlmaWVkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyYi
ICUgc2VsZi50eXBlX25hbWUocXVhbGlmaWVkKQogCiAgICAgZGVmIGFyZ3VtZW50X3R5cGUoc2Vs
ZiwgcXVhbGlmaWVkPUZhbHNlKToKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFR5cGVNb2Rlcy5T
SEFSRUQ6Ci0gICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXM+IiAlIHNlbGYudHlwZV9u
YW1lKHF1YWxpZmllZCkKKyAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiYmIiAlIHNlbGYu
dHlwZV9uYW1lKHF1YWxpZmllZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBz
ZWxmLnN0b3JhZ2VfdHlwZSgpCiAKQEAgLTkzOSw3ICs5MzksNyBAQCBjbGFzcyBHZW5lcmF0b3I6
CiAKICAgICBkZWYgZ2VuZXJhdGVfbWVtYmVyX21vdmVfZXhwcmVzc2lvbihzZWxmLCBfbWVtYmVy
KToKICAgICAgICAgX3R5cGUgPSBzZWxmLl9tb2RlbC5nZXRfdHlwZV9mb3JfbWVtYmVyKF9tZW1i
ZXIpCi0gICAgICAgIGlmIF90eXBlLm1vZGUgPT0gVHlwZU1vZGVzLk9XTkVEOgorICAgICAgICBp
ZiBfdHlwZS5tb2RlIGluIFtUeXBlTW9kZXMuT1dORUQsIFR5cGVNb2Rlcy5TSEFSRURdOgogICAg
ICAgICAgICAgcmV0dXJuICJXVEY6Om1vdmUoJXMpIiAlIF9tZW1iZXIubWVtYmVyTmFtZQogICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIF9tZW1iZXIubWVtYmVyTmFtZQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAppbmRleCBjMWI5
ZjExLi5iNzY2MzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
b2xlQ2xpZW50LmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgQ29uc29sZUNsaWVudDo6cHJp
bnRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwK
ICAgICBXVEZMb2dBbHdheXMoIiVzIiwgYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OnByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1l
bnRzKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4g
cHJwQXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0
aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4mJiBwcnBBcmd1bWVudHMpCiB7CiAgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzID0gcHJwQXJndW1lbnRzOwogCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBDb25zb2xlQ2xp
ZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlIHNvdXJj
ZSwgTWVzc2EKICAgICB9CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6aW50ZXJuYWxNZXNzYWdl
V2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gcHJwQXJndW1l
bnRzLCBBcmd1bWVudFJlcXVpcmVtZW50IGFyZ3VtZW50UmVxdWlyZW1lbnQpCit2b2lkIENvbnNv
bGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUgdHlw
ZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4mJiBwcnBBcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZW1lbnQgYXJndW1lbnRS
ZXF1aXJlbWVudCkKIHsKICAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMgPSBw
cnBBcmd1bWVudHM7CiAgICAgaWYgKGFyZ3VtZW50UmVxdWlyZW1lbnQgPT0gQXJndW1lbnRSZXF1
aXJlZCAmJiAhYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkpCkBAIC0xOTUsNTcgKzE5NSw1NyBA
QCB2b2lkIENvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVz
c2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldgogICAgIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKHR5
cGUsIGxldmVsLCBleGVjLCBhcmd1bWVudHMucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBDb25zb2xl
Q2xpZW50Ojpsb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4gYXJndW1lbnRzLCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCit2b2lkIENvbnNvbGVDbGll
bnQ6OmxvZ1dpdGhMZXZlbChFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+
JiYgYXJndW1lbnRzLCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdl
V2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgZXhlYywgYXJndW1lbnRz
LCBBcmd1bWVudFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVs
KE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJn
dW1lbnRSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Y2xlYXIoRXhlY1N0YXRl
KiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25z
b2xlQ2xpZW50OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+
JiYgYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVz
c2FnZVR5cGU6OkNsZWFyLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1
bWVudE5vdFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1l
c3NhZ2VUeXBlOjpDbGVhciwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIFdURjo6bW92ZShhcmd1
bWVudHMpLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojpk
aXIoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
KQordm9pZCBDb25zb2xlQ2xpZW50OjpkaXIoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0
QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFu
ZExldmVsKE1lc3NhZ2VUeXBlOjpEaXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVu
dHMsIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2
ZWwoTWVzc2FnZVR5cGU6OkRpciwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIFdURjo6bW92ZShh
cmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojpk
aXJYTUwoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzKQordm9pZCBDb25zb2xlQ2xpZW50OjpkaXJYTUwoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpEaXJYTUwsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVj
LCBhcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhU
eXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkRpclhNTCwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMs
IFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25z
b2xlQ2xpZW50Ojp0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGVDbGllbnQ6OnRhYmxlKEV4ZWNTdGF0ZSogZXhl
YywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxN
ZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6VGFibGUsIE1lc3NhZ2VMZXZlbDo6
TG9nLCBleGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVybmFsTWVz
c2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlRhYmxlLCBNZXNzYWdlTGV2ZWw6Okxv
ZywgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50UmVxdWlyZWQpOwogfQogCi12
b2lkIENvbnNvbGVDbGllbnQ6OnRyYWNlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6dHJhY2UoRXhlY1N0
YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBp
bnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpUcmFjZSwgTWVzc2Fn
ZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RSZXF1aXJlZCk7CisgICAg
aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6VHJhY2UsIE1lc3Nh
Z2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1
aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6YXNzZXJ0Q29uZGl0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgYm9vbCBjb25k
aXRpb24pCit2b2lkIENvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzLCBib29sIGNvbmRpdGlvbikK
IHsKICAgICBpZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnRlcm5hbE1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpBc3NlcnQsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RSZXF1aXJlZCk7CisgICAgaW50ZXJu
YWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6QXNzZXJ0LCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJl
ZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXAoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50Ojpn
cm91cChFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRz
KQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlN0
YXJ0R3JvdXAsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50Tm90
UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5
cGU6OlN0YXJ0R3JvdXAsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1l
bnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Z3Jv
dXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4g
YXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50Ojpncm91cENvbGxhcHNlZChFeGVjU3RhdGUq
IGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVy
bmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlN0YXJ0R3JvdXBDb2xsYXBz
ZWQsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50Tm90UmVxdWly
ZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlN0
YXJ0R3JvdXBDb2xsYXBzZWQsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJn
dW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6
Z3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJn
dW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50Ojpncm91cEVuZChFeGVjU3RhdGUqIGV4ZWMsIFJl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2Fn
ZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkVuZEdyb3VwLCBNZXNzYWdlTGV2ZWw6Okxv
ZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpFbmRHcm91cCwgTWVzc2FnZUxldmVs
OjpMb2csIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zb2xlQ2xpZW50LmgKaW5kZXggOGY0ZjE5My4uYTE2Yjg1YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuaApAQCAtNDIsMzAgKzQyLDMwIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db25zb2xlQ2xpZW50KCkgeyB9CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlcik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRDb25zb2xlTWVzc2FnZVdp
dGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlND
OjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRDb25zb2xlTWVzc2FnZVdpdGhB
cmd1bWVudHMoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpF
eGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwogCi0gICAg
dm9pZCBsb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4sIE1lc3NhZ2VMZXZlbCk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBkaXIoRXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZv
aWQgZGlyWE1MKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVu
dHM+KTsKLSAgICB2b2lkIHRhYmxlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIHRyYWNlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGFzc2VydENvbmRpdGlvbihF
eGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiwgYm9vbCBj
b25kaXRpb24pOwotICAgIHZvaWQgZ3JvdXAoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgZ3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgZ3Jv
dXBFbmQoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4p
OworICAgIHZvaWQgbG9nV2l0aExldmVsKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4mJiwgTWVzc2FnZUxldmVsKTsKKyAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0
ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCBkaXIo
RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2
b2lkIGRpclhNTChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+
JiYpOworICAgIHZvaWQgdGFibGUoRXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
QXJndW1lbnRzPiYmKTsKKyAgICB2b2lkIHRyYWNlKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCBhc3NlcnRDb25kaXRpb24oRXhlY1N0
YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmLCBib29sIGNvbmRpdGlv
bik7CisgICAgdm9pZCBncm91cChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+JiYpOworICAgIHZvaWQgZ3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRlKiwgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2b2lkIGdyb3VwRW5kKEV4ZWNT
dGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
PikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdl
V2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0
ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjb3VudChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVu
dHM+JiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZShFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHRpdGxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByb2ZpbGVFbmQoRXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB0aW1lKEV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdGltZUVu
ZChFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHRpbWVTdGFtcChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAoRXhlY1N0YXRlKiwgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7CiAKIHByaXZhdGU6CiAgICAgZW51
bSBBcmd1bWVudFJlcXVpcmVtZW50IHsgQXJndW1lbnRSZXF1aXJlZCwgQXJndW1lbnROb3RSZXF1
aXJlZCB9OwotICAgIHZvaWQgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdl
VHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRBcmd1bWVudHM+LCBBcmd1bWVudFJlcXVpcmVtZW50KTsKKyAgICB2b2lkIGludGVy
bmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlND
OjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYsIEFyZ3Vt
ZW50UmVxdWlyZW1lbnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCmluZGV4IDMxMGY2NGQuLjJhNTUyZjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCkBAIC0yMzcsMTcgKzIzNywx
NyBAQCBTdHJpbmcgVHlwZVNldDo6bGVhc3RDb21tb25BbmNlc3RvcigpIGNvbnN0CiB9CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IFR5
cGVTZXQ6OmFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0CitSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJl
RGVzY3JpcHRpb24+PiBUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25z
dAogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGRlc2NyaXB0aW9uID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3Ry
dWN0dXJlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3Ry
dWN0dXJlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LnNpemUoKTsgaSsrKQogICAgICAgICBkZXNjcmlwdGlvbi0+
YWRkSXRlbShtX3N0cnVjdHVyZUhpc3RvcnkuYXQoaSktPmluc3BlY3RvclJlcHJlc2VudGF0aW9u
KCkpOwogCi0gICAgcmV0dXJuIGRlc2NyaXB0aW9uLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RG
Ojptb3ZlKGRlc2NyaXB0aW9uKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUeXBlU2V0PiBUeXBlU2V0OjppbnNwZWN0b3JUeXBlU2V0KCkgY29uc3QKK1Jl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlU2V0PiBUeXBlU2V0OjppbnNwZWN0
b3JUeXBlU2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHlwZVNldDo6Y3JlYXRlKCkKICAgICAgICAgLnNldElzRnVuY3Rpb24oKG1fc2VlblR5
cGVzICYgVHlwZUZ1bmN0aW9uKSAhPSBUeXBlTm90aGluZykKQEAgLTUxMSwxMSArNTExLDExIEBA
IFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIH0KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50
YXRpb24oKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2Ny
aXB0aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKQogewotICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlv
bj4gYmFzZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0
aW9uOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
U3RydWN0dXJlRGVzY3JpcHRpb24+IGN1cnJlbnRPYmplY3QgPSBiYXNlOwotICAgIFJlZlB0cjxT
dHJ1Y3R1cmVTaGFwZT4gY3VycmVudFNoYXBlID0gdGhpczsKKyAgICBhdXRvIGJhc2UgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCku
cmVsZWFzZSgpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1
cmVEZXNjcmlwdGlvbj4gY3VycmVudE9iamVjdCA9IGJhc2UuY29weVJlZigpOworICAgIFJlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4gY3VycmVudFNoYXBlKHRoaXMpOwogCiAgICAgd2hpbGUgKGN1cnJl
bnRTaGFwZSkgewogICAgICAgICBhdXRvIGZpZWxkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz46OmNyZWF0ZSgpOwpAQCAtNTI1LDIxICs1MjUsMjEgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0
dXJlU2hhcGU6OmkKICAgICAgICAgZm9yIChhdXRvIGZpZWxkIDogY3VycmVudFNoYXBlLT5tX29w
dGlvbmFsRmllbGRzKQogICAgICAgICAgICAgb3B0aW9uYWxGaWVsZHMtPmFkZEl0ZW0oZmllbGQu
Z2V0KCkpOwogCi0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcyhmaWVsZHMpOwotICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRPcHRpb25hbEZpZWxkcyhvcHRpb25hbEZpZWxkcyk7Cisg
ICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcygmZmllbGRzLmdldCgpKTsKKyAgICAgICAg
Y3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoJm9wdGlvbmFsRmllbGRzLmdldCgpKTsK
ICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0Q29uc3RydWN0b3JOYW1lKGN1cnJlbnRTaGFwZS0+
bV9jb25zdHJ1Y3Rvck5hbWUpOwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRJc0ltcHJlY2lz
ZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rpb25hcnlNb2RlKTsKIAogICAgICAgICBpZiAoY3Vy
cmVudFNoYXBlLT5tX3Byb3RvKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IG5leHRPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7Ci0g
ICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1Y3R1cmUobmV4dE9iamVj
dCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gbmV4dE9iamVjdDsKKyAgICAgICAgICAg
IGF1dG8gbmV4dE9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVy
ZURlc2NyaXB0aW9uOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAgICAgICAgICBjdXJyZW50T2Jq
ZWN0LT5zZXRQcm90b3R5cGVTdHJ1Y3R1cmUoJm5leHRPYmplY3QuZ2V0KCkpOworICAgICAgICAg
ICAgY3VycmVudE9iamVjdCA9IFdURjo6bW92ZShuZXh0T2JqZWN0KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGN1cnJlbnRTaGFwZSA9IGN1cnJlbnRTaGFwZS0+bV9wcm90bzsKICAgICB9CiAKLSAg
ICByZXR1cm4gYmFzZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShiYXNlKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
U2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgKaW5kZXggYjJj
ODEwNy4uMWNhMzkxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaApA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShSZWZQdHI8U3Ry
aW5nSW1wbD4pOwogICAgIFN0cmluZyBzdHJpbmdSZXByZXNlbnRhdGlvbigpOwogICAgIFN0cmlu
ZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBpbnNwZWN0b3JSZXByZXNlbnRhdGlv
bigpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbj4gaW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKTsKICAgICB2b2lkIHNldENvbnN0cnVj
dG9yTmFtZShTdHJpbmcgbmFtZSkgeyBtX2NvbnN0cnVjdG9yTmFtZSA9IChuYW1lLmlzRW1wdHko
KSA/ICJPYmplY3QiIDogbmFtZSk7IH0KICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lKCkgeyBy
ZXR1cm4gbV9jb25zdHJ1Y3Rvck5hbWU7IH0KICAgICB2b2lkIHNldFByb3RvKFBhc3NSZWZQdHI8
U3RydWN0dXJlU2hhcGU+IHNoYXBlKSB7IG1fcHJvdG8gPSBzaGFwZTsgfQpAQCAtMTAyLDExICsx
MDIsMTEgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCk7CiAgICAgU3RyaW5n
IGR1bXBUeXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwotICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRh
dGlvbnMoKSBjb25zdDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBhbGxTdHJ1Y3R1
cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsKICAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29u
c3Q7CiAgICAgYm9vbCBpc092ZXJmbG93bigpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVyZmxvd247
IH0KICAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3RvcigpIGNvbnN0OwotICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZVNldD4gaW5zcGVjdG9yVHlwZVNl
dCgpIGNvbnN0OworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlU2V0
PiBpbnNwZWN0b3JUeXBlU2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmc7IH0KICAgICBib29sIGRvZXNUeXBlQ29u
Zm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OwogICAgIHVpbnQzMl90IHNlZW5UeXBlcygpIGNv
bnN0IHsgcmV0dXJuIG1fc2VlblR5cGVzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc5ODJjYTQuLmJmMDE0ZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTUtMDEtMDQgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hp
bmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHB1cmdlIFBhc3NSZWZQdHIgZnJv
bSBJbnNwZWN0b3IgY29kZSBhbmQgdXNlIFJlZiBmb3IgdHlwZWQgYW5kIHVudHlwZWQgcHJvdG9j
b2wgb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwMDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3dGYvU3RvcHdhdGNoLmg6CisgICAgICAgIChXVEY6OlN0b3B3YXRjaDo6Y3JlYXRlKTog
UmV0dXJuIGEgUmVmLgorCiAyMDE1LTAxLTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXdvcmsgY29kZSB0aGF0IGhpZGVzIGNoYXJhY3RlcnMgaW4gcGFzc3dv
cmQgZmllbGRzIHRvIHN0cmVhbWxpbmUgYSBsaXR0bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1N0b3B3YXRjaC5oIGIvU291cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKaW5kZXggNDIxMzkx
MS4uOWNiYTlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKKysrIGIv
U291cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKQEAgLTMzLDkgKzMzLDkgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIGNsYXNzIFN0b3B3YXRjaCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3B3YXRjaD4gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3B3YXRjaD4gY3JlYXRlKCkKKyAgICBz
dGF0aWMgUmVmPFN0b3B3YXRjaD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3RvcHdhdGNoKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9w
d2F0Y2goKSk7CiAgICAgfQogCiAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMzYzc3
YzcuLjVjY2NlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMzUgQEAKKworMjAxNS0wMS0wNCAg
QnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogcHVyZ2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVm
IGZvciB0eXBlZCBhbmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlcGxhY2VzIHVzZXMg
b2YgUGFzc1JlZlB0ciB3aXRoIHVzZXMgb2YgUmVmUHRyJiYgYW5kIFdURjo6bW92ZSgpIGluIGNv
ZGUKKyAgICAgICAgcmVsYXRlZCB0byBXZWIgSW5zcGVjdG9yLiBJdCBhbHNvIGNvbnZlcnRzIG1h
bnkgdXNlcyBvZiBSZWZQdHIgdG8gUmVmIHdoZXJlCisgICAgICAgIHJlZmVyZW5jZXMgYXJlIGFs
d2F5cyBub24tbnVsbC4gVGhlc2UgdHdvIHJlZmFjdG9yaW5ncyBoYXZlIGJlZW4gY29tYmluZWQg
c2luY2UKKyAgICAgICAgdGhleSB0ZW5kIHRvIHJlcXVpcmUgc2ltaWxhciBjaGFuZ2VzIHRvIHRo
ZSBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlZC4KKwor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmxvZ0V4Y2VwdGlv
blRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkTWVzc2FnZSk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVw
b3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYU1NBdWRpdG9yRGVsZWdhdGU6OmdlbmVyYXRlVmlvbGF0aW9uUmVwb3J0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwpOgorICAgICAgICAqIGluc3BlY3Rv
ci9Db21tYW5kTGluZUFQSUhvc3QuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGlj
YXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNo
ZWRTdHlsZXNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpn
ZXRDb21wdXRlZFN0eWxlRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NB
Z2VudDo6c2V0U3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OnRvZ2dsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpz
ZXRSdWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dFN1cHBvcnRlZENTU1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OmdldE5hbWVkRmxvd0NvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJlZ2lvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFt
ZWRGbG93KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENv
bnNvbGVUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpjb25zb2xlVGltZVN0YW1wKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c3RvcFByb2ZpbGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YnVp
bGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQ29uZmlnQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
QWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6aGlnaGxpZ2h0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6aGlnaGxpZ2h0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6aW5uZXJIaWdobGlnaHRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJp
bGl0eUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlv
bkZvckRPTUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdl
SWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3Rv
cmFnZUFyZWEpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHA6IFVzZSBS
ZWYgZm9yIGFsbCBjYWxsYmFja3Mgc2luY2UgdGhleSBhcmUKKyAgICAgICAgbm90IG51bGxhYmxl
LgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTCk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpiaW5k
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6c2V0RGF0YWJhc2UpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOiBVc2UgUmVmIGZvciBhbGwgY2FsbGJhY2tz
IHNpbmNlIHRoZXkgYXJlCisgICAgICAgIG5vdCBudWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2VOYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI6OkNsZWFyT2JqZWN0U3RvcmVM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZTo6Q2xlYXJPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6Y2xlYXJPYmplY3RTdG9y
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNv
bGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29u
c29sZUNvdW50SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnN0b3BDb25zb2xlVGltaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXBJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZ0ltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2VJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkNyZWF0
ZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vz
c2lvbkxvYWRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZXNzaW9uTW9kaWZpZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSU3lu
Y2hyb25vdXNseUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRMb2FkWEhSU3luY2hyb25vdXNseUltcGwpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydFByb2ZpbGluZ0lt
cGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVXb3JrZXJTY3JpcHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
YXB0dXJlU3RvcHBlZEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1N0YXJ0ZWRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tQYXVzZWRJbXBsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxh
eWJhY2tIaXRQb3NpdGlvbkltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja0ZpbmlzaGVkSW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om5ldHdvcmtTdGF0ZUNoYW5n
ZWRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxMb2FkWEhSKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2Vzc2lvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZXNzaW9uTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0
YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
SW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVh
c29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yUG9pbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6YnVpbGRPYmplY3RGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQXJyYXlG
b3JRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uc0hpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZE9iamVjdEZvclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmpl
Y3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpkcmF3UGFpbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZv
clJlbmRlcmVyRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yU2hh
cGVPdXRzaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRPYmplY3RGb3JIaWdo
bGlnaHRlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXkp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVY
SFJUZXh0RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckNvb2tpZSk6
CisgICAgICAgIChXZWJDb3JlOjpidWlsZEFycmF5Rm9yQ29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JSZXBsYXlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9i
amVjdEZvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9ySW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlZ21lbnRE
YXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZE9iamVjdEZvckhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmpl
Y3RGb3JUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbExvYWRYSFIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkU2Vu
ZFdlYlNvY2tldEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdl
bnQ6OnNldEV4dHJhSFRUUEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xp
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6
OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0Q2FjaGVEaXNhYmxlZCk6IERlbGV0
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChQYXJzZWRT
dHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkU291
cmNlUmFuZ2VPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRNZWRpYU9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphc0NTU1J1bGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxN
ZWRpYUxpc3RDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpJbnNwZWN0b3JTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmV4dHJhY3RTb3VyY2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlU2hlZXRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9y
U2VsZWN0b3JIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0b3JzRnJvbVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2Jq
ZWN0Rm9yU2VsZWN0b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OnRvZ2dsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3R5bGVTaGVldDo6cmVtZW1iZXJJbnNwZWN0b3JTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Oklu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3BlY3RvclN0eWxlRm9ySWQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NJZDo6SW5zcGVjdG9yQ1NTSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTSWQ6OmFzUHJvdG9jb2xWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNv
cmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
TmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WEhSUmVwbGF5RGF0
YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhIUlJlcGxheURhdGE6OlhIUlJlcGxheURh
dGEpOgorICAgICAgICAqIGluc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6ZGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpz
ZXREZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNv
dXJjZURhdGE6OmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0
YTo6UmVzb3VyY2VEYXRhOjpzZXRCdWZmZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGlu
ZVJlY29yZEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlQmFja2dyb3VuZFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdDRXZlbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVuY3Rpb25DYWxsRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUNvbnNvbGVQcm9maWxl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBy
b2JlU2FtcGxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6
OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVySW5zdGFsbERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhI
UkxvYWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlRXZhbHVhdGVTY3JpcHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlVGltZVN0YW1wRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlU2VuZFJl
cXVlc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVjZWl2ZVJlc291cmNlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUxheW91dERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVEZWNv
ZGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVSZXNpemVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVNYXJrRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVBhcnNlSFRNTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVBbmltYXRpb25GcmFtZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZVBhaW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZFByb2ZpbGVJbnNwZWN0b3JPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRQcm9maWxlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVdlYlNvY2tldENyZWF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmlj
V2ViU29ja2V0RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcjo6
ZXhlY3V0aW9uU3RvcHdhdGNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50Ojpjb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlQ29uc29sZUNsaWVudDo6cHJvZmlsZUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlQ29uc29sZUNsaWVudDo6dGltZUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29s
ZUNsaWVudDo6dGltZVN0YW1wKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50Lmg6
CisgICAgICAgICogcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGF5Q29udHJvbGxlcjo6c3dpdGNoU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlDb250cm9sbGVyOjpjcmVhdGVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
eUNvbnRyb2xsZXI6OmNvbXBsZXRlU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlD
b250cm9sbGVyOjpsb2FkU2VnbWVudEF0SW5kZXgpOgorICAgICAgICAqIHJlcGxheS9SZXBsYXlJ
bnB1dENyZWF0aW9uTWV0aG9kcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbml0aWFsTmF2aWdh
dGlvbjo6Y3JlYXRlRnJvbVBhZ2UpOgorICAgICAgICAqIHdvcmtlcnMvU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6
OmxvZ0V4Y2VwdGlvblRvQ29uc29sZSk6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJH
bG9iYWxTY29wZS5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRvQ29uc29s
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZVRvV29ya2VyQ29u
c29sZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oOgorCiAyMDE0LTEy
LTI5ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBwYXNzIHBhcmFtZXRlcnMgdG8gaW5zcGVjdG9yIGFnZW50cyBieSByZWZl
cmVuY2Ugd2hlcmUgcG9zc2libGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAppbmRleCBiOWQ1OTEyLi41MGVmMDA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZU1hbmFnZXIuY3BwCkBAIC0zMDcsNyArMzA3LDcgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0
YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGUK
IAogICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGRhdGFiYXNl
Q29udGV4dEZvcihjb250ZXh0KTsKICAgICBkYXRhYmFzZUNvbnRleHQtPnNldEhhc09wZW5EYXRh
YmFzZXMoKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShj
b250ZXh0LCBkYXRhYmFzZSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+aG9zdCgpLCBuYW1l
LCBleHBlY3RlZFZlcnNpb24pOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3Bl
bkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLmNvcHlSZWYoKSwgY29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKS0+aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24pOwogCiAgICAgaWYgKGJhY2tl
bmQtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0
YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IDhmOGNiOGUuLjFmNDU2MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjYwNiw5ICsy
NjA2LDkgQEAgRXZlbnRUYXJnZXQqIERvY3VtZW50OjplcnJvckV2ZW50VGFyZ2V0KCkKICAgICBy
ZXR1cm4gbV9kb21XaW5kb3cuZ2V0KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmxvZ0V4Y2VwdGlv
blRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIERvY3VtZW50Ojpsb2dFeGNl
cHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaykKIHsKLSAgICBhZGRNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBlcnJvck1lc3NhZ2UsIHNvdXJj
ZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2spOworICAgIGFkZE1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIFdURjo6bW92ZShjYWxsU3RhY2sp
KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IFVSTCYgdXJsKQpAQCAtNDk2Nyw3
ICs0OTY3LDcgQEAgdm9pZCBEb2N1bWVudDo6YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QKICAgICAgICAgcGFnZS0+Y29uc29s
ZSgpLmFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgcmVxdWVzdElkZW50aWZpZXIs
IHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291
cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCit2b2lk
IERvY3VtZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rv
cjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmICghaXNDb250ZXh0VGhy
ZWFkKCkpIHsKICAgICAgICAgcG9zdFRhc2soQWRkQ29uc29sZU1lc3NhZ2VUYXNrKHNvdXJjZSwg
bGV2ZWwsIFN0cmluZ0NhcHR1cmUobWVzc2FnZSkpKTsKQEAgLTQ5NzUsNyArNDk3NSw3IEBAIHZv
aWQgRG9jdW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nCiAgICAgfQogCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNvbnNvbGUoKS5hZGRNZXNzYWdlKHNvdXJjZSwgbGV2
ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3Rh
Y2ssIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgICAgIHBhZ2UtPmNvbnNvbGUoKS5h
ZGRNZXNzYWdlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgc3RhdGUsIHJlcXVlc3RJZGVudGlm
aWVyKTsKIH0KIAogU2VjdXJpdHlPcmlnaW4qIERvY3VtZW50Ojp0b3BPcmlnaW4oKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAppbmRleCA5ODM2ZWE5Li5mMWI3ZDNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaApAQCAtMTE3OSw3ICsxMTc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZFdpbGxSZXZl
YWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJ
bnRQb2ludCYgbmV3UG9zaXRpb24sIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJ
bnRTaXplJiBjb250ZW50c1NpemUsIEVsZW1lbnQqIHRhcmdldCA9IG51bGxwdHIpOwogCiAgICAg
dmlydHVhbCBFdmVudFRhcmdldCogZXJyb3JFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNv
bHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51
bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNr
PiYmKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZvaWQgaW5pdEROU1ByZWZldGNoKCk7CiAKQEAg
LTEzMTcsNyArMTMxNyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBvdmVycmlkZSBmaW5hbCB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2
b2lkIGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYo
KTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBs
b25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2
b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4m
JiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9
IDApIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBkb3VibGUgbWluaW11bVRpbWVySW50
ZXJ2YWwoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IGIyZGI1OTEuLjFhMDYzN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTM1MCwyNSAr
MzUwLDI1IEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c2FuaXRpemVTY3JpcHRFcnJv
cihTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50JiBsaW5lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ss
IENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVt
YmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgUmVmUHRyPFNj
cmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ssIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQog
ewogICAgIGlmIChtX2luRGlzcGF0Y2hFcnJvckV2ZW50KSB7CiAgICAgICAgIGlmICghbV9wZW5k
aW5nRXhjZXB0aW9ucykKICAgICAgICAgICAgIG1fcGVuZGluZ0V4Y2VwdGlvbnMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0V4Y2VwdGlvbj4+PigpOwot
ICAgICAgICBtX3BlbmRpbmdFeGNlcHRpb25zLT5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxQZW5k
aW5nRXhjZXB0aW9uPihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291
cmNlVVJMLCBjYWxsU3RhY2spKTsKKyAgICAgICAgbV9wZW5kaW5nRXhjZXB0aW9ucy0+YXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0V4Y2VwdGlvbj4oZXJyb3JNZXNzYWdlLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgY2FsbFN0YWNrLmNvcHlSZWYoKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gRmlyc3QgcmVwb3J0IHRoZSBvcmlnaW5hbCBl
eGNlcHRpb24gYW5kIG9ubHkgdGhlbiBhbGwgdGhlIG5lc3RlZCBvbmVzLgogICAgIGlmICghZGlz
cGF0Y2hFcnJvckV2ZW50KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBz
b3VyY2VVUkwsIGNhY2hlZFNjcmlwdCkpCi0gICAgICAgIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShl
cnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3Rh
Y2spOworICAgICAgICBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoZXJyb3JNZXNzYWdlLCBzb3VyY2VV
UkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY2FsbFN0YWNrLmNvcHlSZWYoKSk7CiAKICAg
ICBpZiAoIW1fcGVuZGluZ0V4Y2VwdGlvbnMpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdFeGNlcHRpb24+Pj4gcGVu
ZGluZ0V4Y2VwdGlvbnMgPSBXVEY6Om1vdmUobV9wZW5kaW5nRXhjZXB0aW9ucyk7CiAgICAgZm9y
IChhdXRvJiBleGNlcHRpb24gOiAqcGVuZGluZ0V4Y2VwdGlvbnMpCi0gICAgICAgIGxvZ0V4Y2Vw
dGlvblRvQ29uc29sZShleGNlcHRpb24tPm1fZXJyb3JNZXNzYWdlLCBleGNlcHRpb24tPm1fc291
cmNlVVJMLCBleGNlcHRpb24tPm1fbGluZU51bWJlciwgZXhjZXB0aW9uLT5tX2NvbHVtbk51bWJl
ciwgZXhjZXB0aW9uLT5tX2NhbGxTdGFjayk7CisgICAgICAgIGxvZ0V4Y2VwdGlvblRvQ29uc29s
ZShleGNlcHRpb24tPm1fZXJyb3JNZXNzYWdlLCBleGNlcHRpb24tPm1fc291cmNlVVJMLCBleGNl
cHRpb24tPm1fbGluZU51bWJlciwgZXhjZXB0aW9uLT5tX2NvbHVtbk51bWJlciwgZXhjZXB0aW9u
LT5tX2NhbGxTdGFjay5jb3B5UmVmKCkpOwogfQogCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggMmI0M2NhNy4uZDliZWJiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC03Niw3ICs3
Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZUV2YWwoY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpID0gMDsKIAogICAgIGJvb2wgc2FuaXRpemVTY3JpcHRFcnJvcihTdHJp
bmcmIGVycm9yTWVzc2FnZSwgaW50JiBsaW5lTnVtYmVyLCBpbnQmIGNvbHVtbk51bWJlciwgU3Ry
aW5nJiBzb3VyY2VVUkwsIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKLSAgICB2b2lkIHJlcG9y
dEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGlu
dCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOworICAgIHZv
aWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51
bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFJlZlB0cjxJ
bnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOwog
CiAgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVs
bHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHZpcnR1YWwg
dm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0g
MDsKQEAgLTE5OCw5ICsxOTgsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0
YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdENhbGxTdGFjaz4mJiwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0KiBl
cnJvckV2ZW50VGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0Nv
bnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
LCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdENhbGxTdGFjaz4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdENhbGxTdGFjaz4mJikgPSAwOwogICAgIGJvb2wgZGlzcGF0Y2hFcnJvckV2ZW50KGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIENhY2hlZFNjcmlwdCopOwogCiAgICAgdmlydHVhbCB2
b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvckRlbGVnYXRlLmNwcAppbmRleCBhMzJmYTA4Li4wNGRk
MDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yRGVs
ZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxl
Z2F0ZS5jcHAKQEAgLTgyLDEyICs4MiwxMiBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBYU1NBdWRp
dG9yRGVsZWdhdGU6OmdlbmVyYXRlVmlvbGF0aW9uUmVwb3J0KGNvbnN0IFhTU0luZm8mCiAgICAg
ICAgICAgICBodHRwQm9keSA9IGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKTsKICAgICB9CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXBvcnREZXRhaWxzID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXBvcnREZXRhaWxzID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXBvcnREZXRhaWxzLT5zZXRTdHJpbmco
InJlcXVlc3QtdXJsIiwgeHNzSW5mby5tX29yaWdpbmFsVVJMKTsKICAgICByZXBvcnREZXRhaWxz
LT5zZXRTdHJpbmcoInJlcXVlc3QtYm9keSIsIGh0dHBCb2R5KTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlcG9ydE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgcmVwb3J0T2JqZWN0LT5zZXRPYmplY3QoInhzcy1yZXBvcnQiLCByZXBvcnREZXRhaWxzLnJl
bGVhc2UoKSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVwb3J0T2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXBvcnRPYmplY3QtPnNldE9iamVjdCgieHNzLXJl
cG9ydCIsIFdURjo6bW92ZShyZXBvcnREZXRhaWxzKSk7CiAKICAgICByZXR1cm4gRm9ybURhdGE6
OmNyZWF0ZShyZXBvcnRPYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRl
eCBiMTNkOWMxLi5iNDY0ZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29t
bWFuZExpbmVBUElIb3N0LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJ
SG9zdDo6ZGlzY29ubmVjdCgpCiAjZW5kaWYKIH0KIAotdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6
Omluc3BlY3RJbXBsKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVjdCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gaGludHMpCit2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVj
dEltcGwoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIG9iamVjdCwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiYmIGhpbnRzKQogewogICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTAxLDggKzEwMSw4IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0
SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3QsIFBhc3NSZWZQCiAgICAgaWYg
KCFoaW50cy0+YXNPYmplY3QoaGludHNPYmplY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZW1vdGVP
YmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD46OnJ1bnRpbWVDYXN0KG9iamVjdCk7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+aW5z
cGVjdChyZW1vdGVPYmplY3QucmVsZWFzZSgpLCBoaW50c09iamVjdC5yZWxlYXNlKCkpOworICAg
IGF1dG8gcmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUob2JqZWN0KSk7Cisg
ICAgbV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChXVEY6Om1vdmUocmVtb3RlT2JqZWN0KSwgV1RG
Ojptb3ZlKGhpbnRzT2JqZWN0KSk7CiB9CiAKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpnZXRF
dmVudExpc3RlbmVyc0ltcGwoTm9kZSogbm9kZSwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYg
bGlzdGVuZXJzQXJyYXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29t
bWFuZExpbmVBUElIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVB
UElIb3N0LmgKaW5kZXggYjAzZjE5Ni4uMzFlNmM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaApAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhZGRJbnNwZWN0ZWRPYmplY3Qoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RhYmxlT2Jq
ZWN0Pik7CiAgICAgdm9pZCBjbGVhckluc3BlY3RlZE9iamVjdHMoKTsKICAgICBJbnNwZWN0YWJs
ZU9iamVjdCogaW5zcGVjdGVkT2JqZWN0KHVuc2lnbmVkIGluZGV4KTsKLSAgICB2b2lkIGluc3Bl
Y3RJbXBsKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0VG9JbnNw
ZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGhpbnRzKTsKKyAgICB2
b2lkIGluc3BlY3RJbXBsKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIG9iamVj
dFRvSW5zcGVjdCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgaGludHMpOwog
CiAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0ltcGwoTm9kZSosIFZlY3RvcjxFdmVudExpc3Rl
bmVySW5mbz4mIGxpc3RlbmVyc0FycmF5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5
NGQ0Yzc4Li40N2Q4M2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcApAQCAtMTA4LDExICsxMDgs
MTIgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEZyYW1lc1dpdGhN
YW5pZmVzdHMoRXJyb3JTdHJpbmcmLCBSZWZQdHIKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUhv
c3Q6OkNhY2hlSW5mbyBpbmZvID0gaG9zdC0+YXBwbGljYXRpb25DYWNoZUluZm8oKTsKICAgICAg
ICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaW5mby5tX21hbmlmZXN0LnN0cmluZygpOwogICAgICAg
ICBpZiAoIW1hbmlmZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0PiB2YWx1
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlm
ZXN0OjpjcmVhdGUoKQorICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxp
Y2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0PiB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUoKQogICAgICAg
ICAgICAgICAgIC5zZXRGcmFtZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSkKICAgICAg
ICAgICAgICAgICAuc2V0TWFuaWZlc3RVUkwobWFuaWZlc3RVUkwpCi0gICAgICAgICAgICAgICAg
LnNldFN0YXR1cyhzdGF0aWNfY2FzdDxpbnQ+KGhvc3QtPnN0YXR1cygpKSk7Ci0gICAgICAgICAg
ICByZXN1bHQtPmFkZEl0ZW0odmFsdWUpOworICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3Rh
dGljX2Nhc3Q8aW50Pihob3N0LT5zdGF0dXMoKSkpCisgICAgICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShXVEY6Om1vdmUodmFsdWUpKTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTE1MSw3ICsxNTIsNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nJiBl
cgogICAgIGFwcGxpY2F0aW9uQ2FjaGUgPSBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUo
cmVzb3VyY2VzLCBpbmZvKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywg
Y29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUlu
Zm8pCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRp
b25DYWNoZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFw
cGxpY2F0aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xp
c3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpDYWNoZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQogewogICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNoZUluZm8ubV9tYW5pZmVz
dC5zdHJpbmcoKSkKQEAgLTE2MiwxNyArMTYzLDE3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4gSW5zcGVjdG9yQXBw
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRp
b25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZEFy
cmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKK1JlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNh
Y2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2VzKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBy
ZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+OjpjcmVhdGUoKTsK
KyAgICBhdXRvIHJlc291cmNlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46
OmNyZWF0ZSgpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiByZXNvdXJjZUluZm8gOiBhcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2VzKQogICAgICAgICByZXNvdXJjZXMtPmFkZEl0ZW0oYnVpbGRPYmpl
Y3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UocmVzb3VyY2VJbmZvKSk7CiAKLSAgICByZXR1
cm4gcmVzb3VyY2VzOworICAgIHJldHVybiBXVEY6Om1vdmUocmVzb3VyY2VzKTsKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OlJlc291cmNlSW5mbyYgcmVzb3VyY2VJbmZvKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShj
b25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCiB7
CiAgICAgU3RyaW5nQnVpbGRlciB0eXBlczsKIApAQCAtMTkxLDExICsxOTIsMTEgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+IEluc3AKICAgICBpZiAocmVzb3VyY2VJbmZvLm1faXNFeHBsaWNpdCkKICAg
ICAgICAgdHlwZXMuYXBwZW5kTGl0ZXJhbCgiRXhwbGljaXQgIik7CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291
cmNlPiB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0VXJsKHJlc291cmNlSW5mby5tX3Jlc291cmNlLnN0cmluZygpKQogICAg
ICAgICAuc2V0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlSW5mby5tX3NpemUpKQotICAg
ICAgICAuc2V0VHlwZSh0eXBlcy50b1N0cmluZygpKTsKLSAgICByZXR1cm4gdmFsdWU7CisgICAg
ICAgIC5zZXRUeXBlKHR5cGVzLnRvU3RyaW5nKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAppbmRleCBiYzZmZWJiLi5j
NzEyOWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC02Nyw5ICs2Nyw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4mKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxp
Y2F0aW9uQ2FjaGU+IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpDYWNoZUluZm8mKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZT4+IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0Jik7Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0IEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4gYnVpbGRPYmplY3RG
b3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUlu
Zm9MaXN0JiwgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYpOworICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNh
dGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJ
bmZvTGlzdCYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mKTsKIAog
ICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihFcnJvclN0
cmluZyYsIFN0cmluZyBmcmFtZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggNjVmNWRjNC4uZjQyMWI0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC02MTIsNDAgKzYx
Miw0MiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBubwogCiAgICAgLy8gUHNldWRvIGVsZW1lbnRz
LgogICAgIGlmICghaW5jbHVkZVBzZXVkbyB8fCAqaW5jbHVkZVBzZXVkbykgewotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpQc2V1ZG9JZE1hdGNoZXM+PiBwc2V1ZG9FbGVtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gcHNldWRvRWxlbWVudHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz46OmNyZWF0ZSgp
OwogICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVET0lE
OyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0gc3Rh
dGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lkICsgMSkpIHsKICAgICAgICAgICAgIGF1dG8gbWF0
Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVt
ZW50LCBwc2V1ZG9JZCwgU3R5bGVSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwogICAgICAgICAgICAg
aWYgKCFtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPiBtYXRjaGVzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAg
ICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1h
dGNoZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRQc2V1ZG9JZChzdGF0aWNf
Y2FzdDxpbnQ+KHBzZXVkb0lkKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldE1hdGNoZXMoYnVp
bGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGVs
ZW1lbnQpKTsKLSAgICAgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cy0+YWRkSXRlbShtYXRjaGVz
LnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVzKGJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCBlbGVtZW50KSkK
KyAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBwc2V1ZG9F
bGVtZW50cy0+YWRkSXRlbShXVEY6Om1vdmUobWF0Y2hlcykpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgcHNldWRvSWRNYXRjaGVzID0gcHNldWRvRWxlbWVudHMucmVsZWFz
ZSgpOworICAgICAgICBwc2V1ZG9JZE1hdGNoZXMgPSBXVEY6Om1vdmUocHNldWRvRWxlbWVudHMp
OwogICAgIH0KIAogICAgIC8vIEluaGVyaXRlZCBzdHlsZXMuCiAgICAgaWYgKCFpbmNsdWRlSW5o
ZXJpdGVkIHx8ICppbmNsdWRlSW5oZXJpdGVkKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk+PiBlbnRyaWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gZW50cmllcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT46OmNyZWF0ZSgpOwogICAgICAgICBFbGVtZW50
KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICB3aGls
ZSAocGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgU3R5bGVSZXNvbHZlciYgcGFyZW50U3R5
bGVSZXNvbHZlciA9IHBhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZl
cigpOwogICAgICAgICAgICAgYXV0byBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTdHlsZVJl
c29sdmVyLnN0eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIFN0eWxlUmVzb2x2ZXI6
OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkluaGVyaXRlZFN0eWxlRW50cnk+IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQotICAgICAgICAgICAgICAgIC5zZXRNYXRj
aGVkQ1NTUnVsZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsIHBhcmVudEVsZW1lbnQpKTsKKyAgICAgICAgICAgIGF1dG8gZW50
cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0
ZSgpCisgICAgICAgICAgICAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyhidWlsZEFycmF5Rm9yTWF0
Y2hlZFJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwgcGFyZW50RWxl
bWVudCkpCisgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgIGlmIChwYXJl
bnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxlKCktPmxlbmd0aCgpKSB7
CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBzdHls
ZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHBhcmVudEVsZW1lbnQpOwogICAgICAgICAg
ICAgICAgIGlmIChzdHlsZVNoZWV0KQogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2V0SW5s
aW5lU3R5bGUoc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHls
ZUZvcklkKEluc3BlY3RvckNTU0lkKHN0eWxlU2hlZXQtPmlkKCksIDApKSkpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBlbnRyaWVzLT5hZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICBlbnRyaWVzLT5hZGRJdGVtKFdURjo6bW92ZShlbnRyeSkpOwogICAgICAgICAg
ICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGluaGVyaXRlZEVudHJpZXMgPSBlbnRyaWVzLnJlbGVhc2UoKTsKKyAg
ICAgICAgaW5oZXJpdGVkRW50cmllcyA9IFdURjo6bW92ZShlbnRyaWVzKTsKICAgICB9CiB9CiAK
QEAgLTY3MSw3ICs2NzMsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBubwogICAgICAgICByZXR1
cm47CiAKICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0
eWxlSW5mbyA9IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGVsZW1lbnQsIHRy
dWUpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0
b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGVJbmZvLCBudWxs
cHRyKTsKKyAgICBSZWY8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9y
U3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mbywgbnVsbHB0
cik7CiAgICAgc3R5bGUgPSBpbnNwZWN0b3JTdHlsZS0+YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5
bGUoKTsKIH0KIApAQCAtNzE4LDkgKzcyMCw5IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAg
ICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0
eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+JiByZXN1bHQpCiB7Ci0gICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChm
dWxsU3R5bGVJZCk7CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZC5j
b3B5UmVmKCkpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwogCiAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRG
b3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0SWQoKSk7CkBAIC03MzQsOSAr
NzM2LDkgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3AKICAgICBlcnJvclN0cmluZyA9IEluc3Bl
Y3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQ
cm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+JiByZXN1bHQpCiB7Ci0gICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxs
U3R5bGVJZCk7CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZC5jb3B5
UmVmKCkpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwogCiAgICAgSW5zcGVj
dG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJ
ZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0SWQoKSk7CkBAIC03NTAsOSArNzUy
LDkgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEkKICAgICBlcnJvclN0cmluZyA9IEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRp
c2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0
KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGZ1bGxTdHlsZUlkLCBp
bnQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3Vu
ZElkKGZ1bGxTdHlsZUlkKTsKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHls
ZUlkLmNvcHlSZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVT
aGVldEZvcklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTc2
Niw5ICs3NjgsOSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbgogICAgIGVycm9yU3RyaW5nID0g
SW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkK
K3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFJ1bGVJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxl
SWQpOworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFJ1bGVJZC5jb3B5UmVmKCkp
OwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5
bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJv
clN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0SWQoKSk7CkBAIC04MTEsMjkgKzgxMywzMCBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50IGNvbnRleHROb2RlSQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRT
dXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4m
IGNzc1Byb3BlcnRpZXMpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4gcHJvcGVydGllcyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlJbmZvPjo6Y3JlYXRlKCk7CisgICAgYXV0byBwcm9wZXJ0aWVzID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUlu
Zm8+OjpjcmVhdGUoKTsKICAgICBmb3IgKGludCBpID0gZmlyc3RDU1NQcm9wZXJ0eTsgaSA8PSBs
YXN0Q1NTUHJvcGVydHk7ICsraSkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGlkID0gY29udmVy
dFRvQ1NTUHJvcGVydHlJRChpKTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUHJvcGVydHlJbmZvPiBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldE5hbWUoZ2V0UHJv
cGVydHlOYW1lU3RyaW5nKGlkKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5z
ZXROYW1lKGdldFByb3BlcnR5TmFtZVN0cmluZyhpZCkpCisgICAgICAgICAgICAucmVsZWFzZSgp
OwogCiAgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9IHNo
b3J0aGFuZEZvclByb3BlcnR5KGlkKTsKICAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIHByb3BlcnRpZXMtPmFkZEl0ZW0ocHJvcGVydHkucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIHByb3BlcnRpZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKHByb3BlcnR5KSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gbG9uZ2hhbmRzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gbG9uZ2hhbmRzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsraikgewogICAgICAgICAg
ICAgQ1NTUHJvcGVydHlJRCBsb25naGFuZElEID0gc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtqXTsK
ICAgICAgICAgICAgIGxvbmdoYW5kcy0+YWRkSXRlbShnZXRQcm9wZXJ0eU5hbWVTdHJpbmcobG9u
Z2hhbmRJRCkpOwogICAgICAgICB9Ci0gICAgICAgIHByb3BlcnR5LT5zZXRMb25naGFuZHMobG9u
Z2hhbmRzLnJlbGVhc2UoKSk7Ci0gICAgICAgIHByb3BlcnRpZXMtPmFkZEl0ZW0ocHJvcGVydHku
cmVsZWFzZSgpKTsKKyAgICAgICAgcHJvcGVydHktPnNldExvbmdoYW5kcyhXVEY6Om1vdmUobG9u
Z2hhbmRzKSk7CisgICAgICAgIHByb3BlcnRpZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKHByb3BlcnR5
KSk7CiAgICAgfQotICAgIGNzc1Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKKyAg
ICBjc3NQcm9wZXJ0aWVzID0gV1RGOjptb3ZlKHByb3BlcnRpZXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgZm9yY2VkUHNldWRvQ2xh
c3NlcykKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiYgZm9yY2VkUHNldWRvQ2xhc3NlcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9kb21B
Z2VudC0+YXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1l
bnQpCkBAIC04NjIsMTIgKzg2NSwxMiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXROYW1l
ZEZsb3dDb2xsZWN0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvYwogICAgIG1f
bmFtZWRGbG93Q29sbGVjdGlvbnNSZXF1ZXN0ZWQuYWRkKGRvY3VtZW50Tm9kZUlkKTsKIAogICAg
IFZlY3RvcjxSZWZQdHI8V2ViS2l0TmFtZWRGbG93Pj4gbmFtZWRGbG93c1ZlY3RvciA9IGRvY3Vt
ZW50LT5uYW1lZEZsb3dzKCkubmFtZWRGbG93cygpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4+IG5hbWVk
Rmxvd3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6Ok5hbWVkRmxvdz46OmNyZWF0ZSgpOworICAgIGF1dG8gbmFtZWRGbG93cyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pjo6
Y3JlYXRlKCk7CiAKICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8V2ViS2l0TmFtZWRGbG93Pj46Oml0
ZXJhdG9yIGl0ID0gbmFtZWRGbG93c1ZlY3Rvci5iZWdpbigpOyBpdCAhPSBuYW1lZEZsb3dzVmVj
dG9yLmVuZCgpOyArK2l0KQogICAgICAgICBuYW1lZEZsb3dzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0
Rm9yTmFtZWRGbG93KGVycm9yU3RyaW5nLCBpdC0+Z2V0KCksIGRvY3VtZW50Tm9kZUlkKSk7CiAK
LSAgICByZXN1bHQgPSBuYW1lZEZsb3dzLnJlbGVhc2UoKTsKKyAgICByZXN1bHQgPSBXVEY6Om1v
dmUobmFtZWRGbG93cyk7CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSog
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50
KQpAQCAtMTAwMCw3ICsxMDAzLDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYgZXJyb3IKIAogSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3RvckNTU0FnZW50Ojpk
ZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25l
ckRvY3VtZW50KQogewotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbiBvcmlnaW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
OlJlZ3VsYXI7CisgICAgYXV0byBvcmlnaW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46OlJlZ3VsYXI7CiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdl
U3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5
KCkpCiAgICAgICAgIG9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbjo6VXNlckFnZW50OwogICAgIGVsc2UgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmIHBhZ2VT
dHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCktPm5v
ZGVOYW1lKCkgPT0gIiNkb2N1bWVudCIpCkBAIC0xMDEzLDcgKzEwMTYsNyBAQCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVj
dE9yaWdpbihDU1NTdAogICAgIHJldHVybiBvcmlnaW47CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9y
Q1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKICAgICBpZiAoIXN0eWxlUnVsZSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xMDI3LDcgKzEwMzAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yUgogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JSdWxlKGNzc29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1QYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTAzNyw5ICsxMDQwLDkgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVj
dEZvclIKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKSA6IG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZXMsIFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQqIGVsZW1lbnQpCitSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZXMsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gcmVzdWx0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPjo6Y3JlYXRlKCk7CiAK
ICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBjb250ZXh0KFNlbGVjdG9yQ2hl
Y2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzKTsKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0
b3JDaGVja2VyKGVsZW1lbnQtPmRvY3VtZW50KCkpOwpAQCAtMTA0OSw3ICsxMDUyLDcgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlJ1bGVNYXRjaD4+IEluc3AKICAgICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PGludD4+IG1hdGNoaW5nU2VsZWN0b3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50
Pjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gbWF0Y2hpbmdTZWxlY3RvcnMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0
b3JMaXN0JiBzZWxlY3Rvckxpc3QgPSBtYXRjaGVkUnVsZS0+c2VsZWN0b3JMaXN0KCk7CiAgICAg
ICAgIGxvbmcgaW5kZXggPSAwOwogICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7CkBAIC0xMDYwLDE2ICsxMDYzLDE3IEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpSdWxlTWF0Y2g+PiBJbnNwCiAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9CiAKLSAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPiBtYXRjaCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAg
ICAgLnNldFJ1bGUocnVsZU9iamVjdC5yZWxlYXNlKCkpCi0gICAgICAgICAgICAuc2V0TWF0Y2hp
bmdTZWxlY3RvcnMobWF0Y2hpbmdTZWxlY3RvcnMucmVsZWFzZSgpKTsKLSAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKG1hdGNoLnJlbGVhc2UoKSk7CisgICAgICAgIGF1dG8gbWF0Y2ggPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRS
dWxlKFdURjo6bW92ZShydWxlT2JqZWN0KSkKKyAgICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVj
dG9ycyhXVEY6Om1vdmUobWF0Y2hpbmdTZWxlY3RvcnMpKQorICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKKyAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFdURjo6bW92ZShtYXRjaCkpOwogICAgIH0KIAot
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCog
ZWxlbWVudCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCogZWxl
bWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50
PigqZWxlbWVudCkpCkBAIC0xMDgzLDEzICsxMDg3LDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yCiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYXR0cmlidXRlU3R5bGUt
PmlzTXV0YWJsZSgpKTsKICAgICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBtdXRhYmxlQXR0cmli
dXRlU3R5bGUgPSBzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKj4oYXR0cmlidXRl
U3R5bGUpOwogCi0gICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IElu
c3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgbXV0YWJsZUF0dHJpYnV0ZVN0
eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIG51bGxwdHIpOworICAgIFJlZjxJbnNw
ZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3Bl
Y3RvckNTU0lkKCksIG11dGFibGVBdHRyaWJ1dGVTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJh
dGlvbigpLCBudWxscHRyKTsKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IEluc3BlY3RvckNTU0FnZW50OjpidWls
ZEFycmF5Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IHJlZ2lvbkxpc3QsIGludCBkb2N1bWVudE5vZGVJZCkKK1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IEluc3Bl
Y3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIFJlZlB0cjxOb2RlTGlzdD4mJiByZWdpb25MaXN0LCBpbnQgZG9jdW1lbnROb2RlSWQpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UmVnaW9uPj4gcmVnaW9ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZWdp
b25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpSZWdpb24+OjpjcmVhdGUoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
b25MaXN0LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0IHJlZ2lvbk92ZXJzZXQ7CkBAIC0xMTExLDIxICsxMTE1
LDIyIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpSZWdpb24+PiBJbnNwZWN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lv
bj4gcmVnaW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb246OmNyZWF0ZSgpCisg
ICAgICAgIGF1dG8gcmVnaW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb246OmNy
ZWF0ZSgpCiAgICAgICAgICAgICAuc2V0UmVnaW9uT3ZlcnNldChyZWdpb25PdmVyc2V0KQogICAg
ICAgICAgICAgLy8gZG9jdW1lbnROb2RlSWQgd2FzIHByZXZpb3VzbHkgYXNzZXJ0ZWQKLSAgICAg
ICAgICAgIC5zZXROb2RlSWQobV9kb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKGVycm9yU3Ry
aW5nLCBkb2N1bWVudE5vZGVJZCwgcmVnaW9uTGlzdC0+aXRlbShpKSkpOworICAgICAgICAgICAg
LnNldE5vZGVJZChtX2RvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRv
Y3VtZW50Tm9kZUlkLCByZWdpb25MaXN0LT5pdGVtKGkpKSkKKyAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKLSAgICAgICAgcmVnaW9ucy0+YWRkSXRlbShyZWdpb24ucmVsZWFzZSgpKTsKKyAgICAg
ICAgcmVnaW9ucy0+YWRkSXRlbShXVEY6Om1vdmUocmVnaW9uKSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIHJlZ2lvbnMucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVnaW9ucyk7CiB9
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+IEluc3Bl
Y3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvck5hbWVkRmxvdyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFdlYktpdE5hbWVkRmxvdyogd2Via2l0TmFtZWRGbG93LCBpbnQgZG9jdW1lbnROb2Rl
SWQpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZE9iamVjdEZvck5hbWVkRmxvdyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIFdlYktpdE5hbWVkRmxvdyogd2Via2l0TmFtZWRGbG93LCBpbnQgZG9jdW1lbnROb2RlSWQp
CiB7CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBjb250ZW50TGlzdCA9IHdlYmtpdE5hbWVkRmxvdy0+
Z2V0Q29udGVudCgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+
PiBjb250ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBjb250ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRl
KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29udGVudExpc3QtPmxlbmd0aCgp
OyArK2kpIHsKICAgICAgICAgLy8gZG9jdW1lbnROb2RlSWQgd2FzIHByZXZpb3VzbHkgYXNzZXJ0
ZWQKQEAgLTExMzYsNyArMTE0MSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpOYW1lZEZsb3c+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvCiAgICAgICAg
IC5zZXREb2N1bWVudE5vZGVJZChkb2N1bWVudE5vZGVJZCkKICAgICAgICAgLnNldE5hbWUod2Vi
a2l0TmFtZWRGbG93LT5uYW1lKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRPdmVyc2V0KHdlYmtp
dE5hbWVkRmxvdy0+b3ZlcnNldCgpKQotICAgICAgICAuc2V0Q29udGVudChjb250ZW50LnJlbGVh
c2UoKSkKKyAgICAgICAgLnNldENvbnRlbnQoV1RGOjptb3ZlKGNvbnRlbnQpKQogICAgICAgICAu
c2V0UmVnaW9ucyhidWlsZEFycmF5Rm9yUmVnaW9ucyhlcnJvclN0cmluZywgd2Via2l0TmFtZWRG
bG93LT5nZXRSZWdpb25zKCksIGRvY3VtZW50Tm9kZUlkKSkKICAgICAgICAgLnJlbGVhc2UoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXgg
M2RkY2E5Yi4uZDNhMDFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0xMTgsMTMgKzExNywx
MyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVT
aGVldElkLCBTdHJpbmcqIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0
eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNv
bnN0IFN0cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlVGV4
dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
IHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQcm9wZXJ0eShF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0
eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3R5bGVJZCwgaW50IHBy
b3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgs
IGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
JiByZXN1bHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJy
b3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgcnVs
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkUnVs
ZShFcnJvclN0cmluZyYsIGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGZv
cmNlZFBzZXVkb0NsYXNzZXMpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXROYW1lZEZs
b3dDb2xsZWN0aW9uKEVycm9yU3RyaW5nJiwgaW50IGRvY3VtZW50Tm9kZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZs
b3c+PiYgcmVzdWx0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKQEAgLTE1MywxMiArMTUyLDEyIEBA
IHByaXZhdGU6CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogYXNzZXJ0U3R5bGVTaGVldEZvcklk
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5
bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwogCi0gICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShTdHlsZVJ1
bGUqLCBTdHlsZVJlc29sdmVyJik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKLSAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiwgU3R5bGVSZXNvbHZlciYsIEVsZW1lbnQqKTsKLSAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0
Rm9yQXR0cmlidXRlc1N0eWxlKEVsZW1lbnQqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gYnVpbGRB
cnJheUZvclJlZ2lvbnMoRXJyb3JTdHJpbmcmLCBQYXNzUmVmUHRyPE5vZGVMaXN0PiwgaW50IGRv
Y3VtZW50Tm9kZUlkKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
TmFtZWRGbG93PiBidWlsZE9iamVjdEZvck5hbWVkRmxvdyhFcnJvclN0cmluZyYsIFdlYktpdE5h
bWVkRmxvdyosIGludCBkb2N1bWVudE5vZGVJZCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVsZSosIFN0eWxl
UmVzb2x2ZXImKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxl
PiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4g
YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVs
ZT4+JiwgU3R5bGVSZXNvbHZlciYsIEVsZW1lbnQqKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxl
bWVudCopOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IGJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5n
JiwgUmVmUHRyPE5vZGVMaXN0PiYmLCBpbnQgZG9jdW1lbnROb2RlSWQpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gYnVpbGRPYmplY3RGb3JOYW1lZEZs
b3coRXJyb3JTdHJpbmcmLCBXZWJLaXROYW1lZEZsb3cqLCBpbnQgZG9jdW1lbnROb2RlSWQpOwog
CiAgICAgLy8gSW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUxpc3RlbmVyIGltcGxlbWVudGF0aW9uCiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50Kikgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3Ry
dW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJ
bnN0cnVtZW50YXRpb24uaAppbmRleCAzMmE2MjQ3Li40MWQ1NzZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0
aW9uLmgKQEAgLTM1LDE1ICszNSwxNCBAQAogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNp
bmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
ZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCB1bnNpZ25l
ZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291
cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNv
bGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCBjYWxsU3RhY2ssIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAgICAgYWRkTWVzc2FnZVRvQ29u
c29sZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3Nh
Z2UsIFdURjo6bW92ZShjYWxsU3RhY2spLCByZXF1ZXN0SWRlbnRpZmllcik7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKQEAgLTU1LDEx
ICs1NCwxMSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3Nh
Z2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdQogI2VuZGlmCiB9CiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlJiBw
YWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCB1bnNpZ25lZCBs
b25nIHJlcXVlc3RJZGVudGlmaWVyKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYgYXJndW1lbnRzLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAg
ICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNvdXJjZSwg
dHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHN0YXRlLCBhcmd1bWVudHMsIHJlcXVlc3RJZGVudGlmaWVy
KTsKKyAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMs
IHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHN0YXRlLCBXVEY6Om1vdmUoYXJndW1lbnRz
KSwgcmVxdWVzdElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7CkBAIC05MSwxMSArOTAsMTEgQEAgaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2Us
IE1lc3NhZ2VTb3UKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqIHdvcmtlckdsb2Jh
bFNjb3BlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
cikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29u
c29sZShXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUsIE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFj
aywgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3Bl
KSkKLSAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMs
IHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjaywgcmVxdWVzdElkZW50aWZp
ZXIpOworICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgV1RGOjptb3ZlKGNhbGxTdGFjayksIHJl
cXVlc3RJZGVudGlmaWVyKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHdvcmtlckdsb2JhbFNj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKQEAgLTEyNiwxMSArMTI1LDExIEBAIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShX
b3JrZXJHbG9iYWxTY29wZSogd29yCiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQoUGFnZSYgcGFnZSwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMp
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChQYWdl
JiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBjb25zb2xlQ291bnRJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCBzdGF0ZSwgYXJndW1lbnRzKTsKKyAgICAgICAgY29uc29sZUNvdW50SW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUsIFdURjo6bW92ZShhcmd1bWVudHMpKTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NDksMTEgKzE0OCwxMSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0
YXJ0Q29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cgogI2VuZGlmCiB9CiAKLWlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmcoRnJh
bWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2Ny
aXB0Q2FsbFN0YWNrPiBzdGFjaykKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c3RvcENvbnNvbGVUaW1pbmcoRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgc3RhY2spCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIHN0b3BD
b25zb2xlVGltaW5nSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIHRpdGxlLCBzdGFj
ayk7CisgICAgICAgIHN0b3BDb25zb2xlVGltaW5nSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywg
ZnJhbWUsIHRpdGxlLCBXVEY6Om1vdmUoc3RhY2spKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGl0bGUpOwpAQCAtMTYxLDEyICsxNjAsMTIgQEAg
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhG
cmFtZSYgZnJhbWUsIGNvbnN0IFN0cmkKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAoRnJhbWUmIGZyYW1lLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCitpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAoRnJhbWUmIGZyYW1lLCBS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7
CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBjb25zb2xlVGltZVN0YW1w
SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIGFyZ3VtZW50cyk7CisgICAgICAgIGNv
bnNvbGVUaW1lU3RhbXBJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgV1RGOjptb3Zl
KGFyZ3VtZW50cykpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTShhcmd1bWVudHMpOwpAQCAtMTg1LDcgKzE4NCw3IEBAIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpFeGVj
U3RhdGUqCiAjZW5kaWYKIH0KIAotaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyAmdGl0bGUpCitpbmxpbmUgUmVmUHRyPEpTQzo6UHJv
ZmlsZT4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nKFBhZ2UmIHBhZ2Us
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcgJnRpdGxlKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAyZWQ4YWRmLi44
YmYwZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpn
ZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQsIEluc3BlY3Rvck92ZXJsYXk6OkMKICAg
ICBtX292ZXJsYXktPmdldEhpZ2hsaWdodChoaWdobGlnaHQsIGNvb3JkaW5hdGVTeXN0ZW0pOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVp
bGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjb25zdAorUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBj
b25zdAogewogICAgIHJldHVybiBtX292ZXJsYXktPmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWRO
b2RlKCk7CiB9CkBAIC00NTQsOSArNDU0LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpm
cm9udGVuZEluaXRpYWxpemVkKCkKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFN0b3B3YXRjaD4g
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkKK1JlZjxTdG9wd2F0Y2g+
IEluc3BlY3RvckNvbnRyb2xsZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCgpCiB7Ci0gICAgcmV0dXJu
IG1fZXhlY3V0aW9uU3RvcHdhdGNoOworICAgIHJldHVybiBtX2V4ZWN1dGlvblN0b3B3YXRjaC5j
b3B5UmVmKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDdjNzhlZTQuLjM4YWVlYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApA
QCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29s
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
ckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNVbmRlclRlc3Q7IH0KICAgICB2b2lkIHNldElzVW5kZXJUZXN0KGJvb2wg
aXNVbmRlclRlc3QpIHsgbV9pc1VuZGVyVGVzdCA9IGlzVW5kZXJUZXN0OyB9CkBAIC0xMzEsNyAr
MTMxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbEluamVjdGVkU2NyaXB0
RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBz
Y3JpcHRMaW5lKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FsbEluamVjdGVkU2Ny
aXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
ZnJvbnRlbmRJbml0aWFsaXplZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
VEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBSZWY8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb247CkBAIC0x
NTAsNyArMTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogICAgIElu
c3BlY3Rvcjo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKLSAgICBSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOwor
ICAgIFJlZjxXVEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CiAgICAgUGFnZSYg
bV9wYWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CiAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQqIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBiYmFjZGM0
Li5kYWEwZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
c3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0U2l6ZSA9IDEwMDAwOwogc3RhdGljIGNvbnN0IFVD
aGFyIGVsbGlwc2lzVUNoYXJbXSA9IHsgMHgyMDI2LCAwIH07CiAKLXN0YXRpYyBDb2xvciBwYXJz
ZUNvbG9yKGNvbnN0IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb2xvck9iamVjdCkKK3N0
YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgY29s
b3JPYmplY3QpCiB7CiAgICAgaWYgKCFjb2xvck9iamVjdCkKICAgICAgICAgcmV0dXJuIENvbG9y
Ojp0cmFuc3BhcmVudDsKQEAgLTEzMiw4ICsxMzIsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xv
cihjb25zdCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29sb3JPYmplY3QpCiAKIHN0YXRp
YyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBJbnNwZWN0
b3JPYmplY3QqIGNvbmZpZ09iamVjdCkKIHsKLSAgICBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBjb2xvck9iamVjdCA9IGNvbmZpZ09iamVjdC0+Z2V0T2JqZWN0KGZpZWxkTmFtZSk7Ci0g
ICAgcmV0dXJuIHBhcnNlQ29sb3IoY29sb3JPYmplY3QpOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGNvbG9yT2JqZWN0OworICAgIGNvbmZpZ09iamVjdC0+Z2V0T2JqZWN0KGZpZWxkTmFt
ZSwgY29sb3JPYmplY3QpOworICAgIHJldHVybiBwYXJzZUNvbG9yKFdURjo6bW92ZShjb2xvck9i
amVjdCkpOwogfQogCiBzdGF0aWMgYm9vbCBwYXJzZVF1YWQoY29uc3QgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCkBAIC01NzksOSArNTgwLDkgQEAg
aW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVU
b1B1c2gpCiAgICAgICAgICAgICBhdXRvIG5ld01hcCA9IHN0ZDo6bWFrZV91bmlxdWU8Tm9kZVRv
SWRNYXA+KCk7CiAgICAgICAgICAgICBkYW5nbGluZ01hcCA9IG5ld01hcC5nZXQoKTsKICAgICAg
ICAgICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuYXBwZW5kKG5ld01hcC5yZWxlYXNlKCkpOwot
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICBhdXRvIGNoaWxkcmVuID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBjaGlsZHJlbi0+YWRk
SXRlbShidWlsZE9iamVjdEZvck5vZGUobm9kZSwgMCwgZGFuZ2xpbmdNYXApKTsKLSAgICAgICAg
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZXRDaGlsZE5vZGVzKDAsIGNoaWxkcmVuKTsKKyAg
ICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZXRDaGlsZE5vZGVzKDAsIFdURjo6bW92
ZShjaGlsZHJlbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBwYXRoLmFwcGVuZChwYXJlbnQpOwpAQCAtODc2LDE1ICs4NzcsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmkKICAgICBheFByb3BlcnRpZXMgPSBidWlsZE9iamVjdEZvckFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzKG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
ZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB3aGl0
ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBub2RlSWRz
LCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KQordm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYm
IG5vZGVJZHMsIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpCiB7CiAgICAgLy8g
RklYTUU6IFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIgb2YgbWF0
Y2hlcyB3aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KICAgICBJbnNwZWN0b3JOb2RlRmlu
ZGVyIGZpbmRlcih3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKIAogICAgIGlmIChub2RlSWRzKSB7
Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG5vZGVJZHNSZWYgPSAqbm9k
ZUlkczsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVJZHNSZWYtPmxlbmd0
aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbm9kZVZhbHVl
ID0gbm9kZUlkc1JlZi0+Z2V0KGkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bm9kZUlkcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBub2RlVmFsdWUgPSBub2RlSWRzLT5nZXQoaSk7CiAgICAgICAgICAgICBpZiAoIW5vZGVW
YWx1ZSkgewogICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZh
bGlkIG5vZGVJZHMgaXRlbS4iKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDQ2LDM3
ICsxMDQ2LDM3IEBAIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yCiAgICAgcmV0dXJuIGhpZ2hsaWdo
dENvbmZpZzsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFi
bGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiogaGlnaGxpZ2h0Q29uZmlnKQordm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBl
bmFibGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZykK
IHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGln
aHRDb25maWcgPyBoaWdobGlnaHRDb25maWctPmdldCgpIDogMCk7CisgICAgc2V0U2VhcmNoaW5n
Rm9yTm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0
Q29uZmlnLmdldCgpIDogbnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRp
bmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5n
JiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0
bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBx
dWFkID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURjo6bW92ZShxdWFkKSwgY29sb3Is
IG91dGxpbmVDb2xvciwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICBpbm5lckhpZ2hsaWdodFF1
YWQoV1RGOjptb3ZlKHF1YWQpLCBjb2xvci5jb3B5UmVmKCksIG91dGxpbmVDb2xvci5jb3B5UmVm
KCksIHVzZVBhZ2VDb29yZGluYXRlcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiBxdWFkQXJyYXksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xv
ciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvciwgY29uc3QgYm9v
bCogdXNlUGFnZUNvb3JkaW5hdGVzKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0
UXVhZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4mJiBxdWFkQXJyYXksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gc3RkOjptYWtlX3VuaXF1ZTxG
bG9hdFF1YWQ+KCk7CiAgICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdldCgpKSkg
ewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBRdWFkIGZvcm1h
dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEY6
Om1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29sb3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7Cisg
ICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURjo6bW92ZShxdWFkKSwgY29sb3IuY29weVJlZigpLCBv
dXRsaW5lQ29sb3IuY29weVJlZigpLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0
UXVhZD4gcXVhZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdl
Q29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQo
c3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29s
b3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIGhpZ2hsaWdo
dENvbmZpZyA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwotICAgIGhpZ2hs
aWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoKmNvbG9yKTsKLSAgICBoaWdobGlnaHRD
b25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcigqb3V0bGluZUNvbG9yKTsKKyAgICBo
aWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yLmNvcHlSZWYoKSk7Cisg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNv
bG9yLmNvcHlSZWYoKSk7CiAgICAgaGlnaGxpZ2h0Q29uZmlnLT51c2VQYWdlQ29vcmRpbmF0ZXMg
PSB1c2VQYWdlQ29vcmRpbmF0ZXMgPyAqdXNlUGFnZUNvb3JkaW5hdGVzIDogZmFsc2U7CiAgICAg
bV9vdmVybGF5LT5oaWdobGlnaHRRdWFkKFdURjo6bW92ZShxdWFkKSwgKmhpZ2hsaWdodENvbmZp
Zyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaGlnaGxpZ2h0
SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJ
ZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCwgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IDA7CiAgICAgaWYgKG5vZGVJZCkgewpAQCAtMTA5OCwxNCArMTA5
OCwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElucwogICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0
Tm9kZShub2RlLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4qIG91dGxpbmVDb2xvcikKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdo
dEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IG91dGxpbmVDb2xvcikKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZnJhbWVG
b3JJZChmcmFtZUlkKTsKICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7
CiAgICAgICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdobGln
aHRDb25maWc+KCk7CiAgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSB0cnVlOyAv
LyBBbHdheXMgc2hvdyB0b29sdGlwcyBmb3IgZnJhbWVzLgotICAgICAgICBoaWdobGlnaHRDb25m
aWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKCpjb2xvcik7Ci0gICAgICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKCpvdXRsaW5lQ29sb3IpOworICAgICAgICBo
aWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yLmNvcHlSZWYoKSk7Cisg
ICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxp
bmVDb2xvci5jb3B5UmVmKCkpOwogICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJh
bWUtPm93bmVyRWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKICAgICB9CiB9CkBAIC0xMjIw
LDcgKzEyMjAsNyBAQCBzdGF0aWMgU3RyaW5nIGRvY3VtZW50QmFzZVVSTFN0cmluZyhEb2N1bWVu
dCogZG9jdW1lbnQpCiAgICAgcmV0dXJuIGRvY3VtZW50LT5jb21wbGV0ZVVSTCgiIikuc3RyaW5n
KCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQg
ZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBpbnQgaWQgPSBiaW5kKG5vZGUs
IG5vZGVzTWFwKTsKICAgICBTdHJpbmcgbm9kZU5hbWU7CkBAIC0xMjUzLDE5ICsxMjUzLDIwIEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlOjpjcmVhdGUoKQorICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXROb2RlSWQoaWQpCiAg
ICAgICAgIC5zZXROb2RlVHlwZShzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPm5vZGVUeXBlKCkpKQog
ICAgICAgICAuc2V0Tm9kZU5hbWUobm9kZU5hbWUpCiAgICAgICAgIC5zZXRMb2NhbE5hbWUobG9j
YWxOYW1lKQotICAgICAgICAuc2V0Tm9kZVZhbHVlKG5vZGVWYWx1ZSk7CisgICAgICAgIC5zZXRO
b2RlVmFsdWUobm9kZVZhbHVlKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKG5vZGUt
PmlzQ29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAgIGludCBub2RlQ291bnQgPSBpbm5lckNoaWxk
Tm9kZUNvdW50KG5vZGUpOwogICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlQ291bnQobm9kZUNv
dW50KTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0gYnVpbGRBcnJheUZvckNvbnRhaW5l
ckNoaWxkcmVuKG5vZGUsIGRlcHRoLCBub2Rlc01hcCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJl
biA9IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXAp
OwogICAgICAgICBpZiAoY2hpbGRyZW4tPmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIHZhbHVl
LT5zZXRDaGlsZHJlbihjaGlsZHJlbi5yZWxlYXNlKCkpOworICAgICAgICAgICAgdmFsdWUtPnNl
dENoaWxkcmVuKFdURjo6bW92ZShjaGlsZHJlbikpOwogICAgIH0KIAogICAgIGlmIChpczxFbGVt
ZW50Pigqbm9kZSkpIHsKQEAgLTEyODIsOSArMTI4Myw5IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JO
b2RlCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQu
c2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gc2hhZG93Um9vdHMgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gc2hhZG93Um9vdHMgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAg
ICAgICAgICAgIHNoYWRvd1Jvb3RzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShyb290LCAw
LCBub2Rlc01hcCkpOwotICAgICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jvb3RzKHNoYWRvd1Jv
b3RzKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290cyhXVEY6Om1vdmUoc2hhZG93
Um9vdHMpKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCkBAIC0x
MzE3LDI2ICsxMzE4LDI2IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0Um9sZShheE9iamVjdC0+Y29tcHV0ZWRSb2xlU3RyaW5nKCkpOwogICAgIH0KIAot
ICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZSh2YWx1ZSk7
CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBl
bGVtZW50KQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYXR0
cmlidXRlc1ZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRl
KCk7CisgICAgYXV0byBhdHRyaWJ1dGVzVmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAvLyBHbyB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFu
ZCBzZXJpYWxpemUgdGhlbS4KICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKLSAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBX
VEY6Om1vdmUoYXR0cmlidXRlc1ZhbHVlKTsKICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0
cmlidXRlIDogZWxlbWVudC0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRk
IGF0dHJpYnV0ZSBwYWlyCiAgICAgICAgIGF0dHJpYnV0ZXNWYWx1ZS0+YWRkSXRlbShhdHRyaWJ1
dGUubmFtZSgpLnRvU3RyaW5nKCkpOwogICAgICAgICBhdHRyaWJ1dGVzVmFsdWUtPmFkZEl0ZW0o
YXR0cmlidXRlLnZhbHVlKCkpOwogICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGF0dHJpYnV0ZXNWYWx1ZSk7CiB9CiAKLVBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGls
ZHJlbihOb2RlKiBjb250YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQor
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4o
Tm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNoaWxkcmVuID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
Pjo6Y3JlYXRlKCk7CiAgICAgaWYgKGRlcHRoID09IDApIHsKICAgICAgICAgLy8gU3BlY2lhbC1j
YXNlIHRoZSBvbmx5IHRleHQgY2hpbGQgLSBwcmV0ZW5kIHRoYXQgY29udGFpbmVyJ3MgY2hpbGRy
ZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZC4KICAgICAgICAgTm9kZSogZmlyc3RDaGlsZCA9IGNvbnRh
aW5lci0+Zmlyc3RDaGlsZCgpOwpAQCAtMTM0NCw3ICsxMzQ1LDcgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJ
bnNwZWN0b3IKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9k
ZShmaXJzdENoaWxkLCAwLCBub2Rlc01hcCkpOwogICAgICAgICAgICAgbV9jaGlsZHJlblJlcXVl
c3RlZC5hZGQoYmluZChjb250YWluZXIsIG5vZGVzTWFwKSk7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGNoaWxkcmVuLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShjaGls
ZHJlbik7CiAgICAgfQogCiAgICAgTm9kZSogY2hpbGQgPSBpbm5lckZpcnN0Q2hpbGQoY29udGFp
bmVyKTsKQEAgLTEzNTUsMTAgKzEzNTYsMTAgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3IKICAg
ICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKGNoaWxkLCBkZXB0aCwg
bm9kZXNNYXApKTsKICAgICAgICAgY2hpbGQgPSBpbm5lck5leHRTaWJsaW5nKGNoaWxkKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGNoaWxkcmVuLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3Zl
KGNoaWxkcmVuKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVu
ZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSwgY29uc3QgU3RyaW5n
KiBvYmplY3RHcm91cElkKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25z
dCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcqIG9iamVj
dEdyb3VwSWQpCiB7CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPSBy
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5saXN0ZW5lcjsKIApAQCAtMTM4NiwyOSArMTM4NywzMSBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZQogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gdmFsdWUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCisgICAgYXV0byB2YWx1
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldFR5cGUoZXZlbnRUeXBlKQogICAgICAgICAuc2V0VXNlQ2FwdHVyZShyZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAuc2V0SXNBdHRyaWJ1dGUoZXZl
bnRMaXN0ZW5lci0+aXNBdHRyaWJ1dGUoKSkKICAgICAgICAgLnNldE5vZGVJZChwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5vZGUpKQotICAgICAgICAuc2V0SGFuZGxlckJvZHkoYm9keSk7CisgICAg
ICAgIC5zZXRIYW5kbGVyQm9keShib2R5KQorICAgICAgICAucmVsZWFzZSgpOwogICAgIGlmIChv
YmplY3RHcm91cElkICYmIGhhbmRsZXIgJiYgc3RhdGUpIHsKICAgICAgICAgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3Jp
cHRGb3Ioc3RhdGUpOwogICAgICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
ICAgICAgICAgICAgIHZhbHVlLT5zZXRIYW5kbGVyKGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUtPnZtKCksIGhhbmRsZXIpLCAqb2JqZWN0R3Jv
dXBJZCkpOwogICAgIH0KICAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQorICAgICAg
ICBhdXRvIGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
OjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElEKQotICAgICAgICAg
ICAgLnNldExpbmVOdW1iZXIobGluZU51bWJlcik7Ci0gICAgICAgIHZhbHVlLT5zZXRMb2NhdGlv
bihsb2NhdGlvbi5yZWxlYXNlKCkpOworICAgICAgICAgICAgLnNldExpbmVOdW1iZXIobGluZU51
bWJlcikKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIHZhbHVlLT5zZXRMb2NhdGlv
bihXVEY6Om1vdmUobG9jYXRpb24pKTsKICAgICAgICAgaWYgKCFzb3VyY2VOYW1lLmlzRW1wdHko
KSkKICAgICAgICAgICAgIHZhbHVlLT5zZXRTb3VyY2VOYW1lKHNvdXJjZU5hbWUpOwogICAgIH0K
LSAgICByZXR1cm4gdmFsdWUucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUodmFsdWUp
OwogfQogICAgIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlD
aGlsZHJlbihQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqZWN0LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIGNoaWxkTm9kZUlkcykKK3ZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+JiYgYXhPYmplY3QsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxpbnQ+PiYmIGNoaWxkTm9kZUlkcykKIHsKICAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9
IGF4T2JqZWN0LT5jaGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTQy
MSwxMSArMTQyNCwxMSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJp
bGl0eUNoaWxkcmVuKFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iagogICAgICAgICBpZiAoTm9k
ZSogY2hpbGROb2RlID0gY2hpbGRPYmplY3QtPm5vZGUoKSkKICAgICAgICAgICAgIGNoaWxkTm9k
ZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNoaWxkTm9kZSkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKGNoaWxkT2Jq
ZWN0LCBjaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGls
ZHJlbihjaGlsZE9iamVjdC5jb3B5UmVmKCksIGNoaWxkTm9kZUlkcy5jb3B5UmVmKCkpOwogICAg
IH0KIH0KICAgICAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNz
aWJpbGl0eVByb3BlcnRpZXMoTm9kZSogbm9kZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKiBub2RlKQogewogICAgIEFTU0VS
VChub2RlKTsKICAgICBpZiAoIW5vZGUpCkBAIC0xNDM2LDcgKzE0MzksNyBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3Bl
Y3RvckRPTUFnZW50OgogCiAgICAgTm9kZSogYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBudWxscHRy
OwogICAgIGJvb2wgYnVzeSA9IGZhbHNlOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOworICAg
IGF1dG8gY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxpbnQ+PiBjaGlsZE5vZGVJZHM7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PGludD4+IGNvbnRyb2xsZWROb2RlSWRzOwogICAgIGJvb2wgZXhpc3RzID0gZmFs
c2U7CkBAIC0xNDQ2LDEyICsxNDQ5LDEyIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6CiAgICAg
Ym9vbCBmb2N1c2VkID0gZmFsc2U7CiAgICAgYm9vbCBpZ25vcmVkID0gdHJ1ZTsKICAgICBib29s
IGlnbm9yZWRCeURlZmF1bHQgPSBmYWxzZTsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkIGludmFsaWQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAg
ICBhdXRvIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICBib29sIGhpZGRlbiA9IGZhbHNlOwogICAg
IFN0cmluZyBsYWJlbDsKICAgICBib29sIGxpdmVSZWdpb25BdG9taWMgPSBmYWxzZTsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gbGl2ZVJlZ2lvblJlbGV2
YW50OwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkxpdmVSZWdpb25TdGF0dXMgbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsK
KyAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFj
Y2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7CiAgICAgTm9kZSog
bW91c2VFdmVudE5vZGUgPSBudWxscHRyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxpbnQ+PiBvd25lZE5vZGVJZHM7CiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IG51bGxw
dHI7CkBAIC0xNDkyLDcgKzE0OTUsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OgogICAgICAg
ICAgICAgICAgICAgICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6VHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihheE9iamVjdCwg
Y2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4o
YXhPYmplY3QsIFdURjo6bW92ZShjaGlsZE5vZGVJZHMpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKGF4T2JqZWN0LT5zdXBwb3J0c0FSSUFDb250cm9scygpKSB7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPEVsZW1lbnQqPiBjb250cm9sbGVkRWxlbWVudHM7CkBAIC0xNjIyLDExICsx
NjI1LDEyIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6Y3JlYXRlKCkKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllcz4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFj
Y2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQogICAgICAgICAuc2V0RXhpc3RzKGV4aXN0
cykKICAgICAgICAgLnNldExhYmVsKGxhYmVsKQogICAgICAgICAuc2V0Um9sZShyb2xlKQotICAg
ICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSkpOworICAgICAgICAu
c2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSkpCisgICAgICAgIC5yZWxlYXNl
KCk7CiAKICAgICBpZiAoZXhpc3RzKSB7CiAgICAgICAgIGlmIChhY3RpdmVEZXNjZW5kYW50Tm9k
ZSkKQEAgLTE2NzksNyArMTY4Myw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6CiAgICAgICAg
ICAgICB2YWx1ZS0+c2V0U2VsZWN0ZWRDaGlsZE5vZGVJZHMoc2VsZWN0ZWRDaGlsZE5vZGVJZHMp
OwogICAgIH0KIAotICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6
bW92ZSh2YWx1ZSk7CiB9CiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hp
bGQoTm9kZSogbm9kZSkKQEAgLTE3NTQsMTAgKzE3NTgsMTAgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmNoaWxkTm9kZVJlbW92ZWQocGFyZW50SWQsIGZyYW1lT3duZXJJZCk7CiAgICAg
dW5iaW5kKGZyYW1lT3duZXIsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5v
ZGUoZnJhbWVPd25lciwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUoZnJh
bWVPd25lciwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAgICAgTm9kZSogcHJldmlvdXNT
aWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoZnJhbWVPd25lcik7CiAgICAgaW50IHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVk
KHBhcmVudElkLCBwcmV2SWQsIHZhbHVlLnJlbGVhc2UoKSk7CisgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmNoaWxkTm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURjo6bW92ZSh2YWx1
ZSkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUm
IG5vZGUpCkBAIC0xNzg0LDggKzE3ODgsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJ
bnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIENoaWxkcmVuIGhhdmUgYmVlbiBy
ZXF1ZXN0ZWQgLT4gcmV0dXJuIHZhbHVlIG9mIGEgbmV3IGNoaWxkLgogICAgICAgICBOb2RlKiBw
cmV2U2libGluZyA9IGlubmVyUHJldmlvdXNTaWJsaW5nKCZub2RlKTsKICAgICAgICAgaW50IHBy
ZXZJZCA9IHByZXZTaWJsaW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2U2libGlu
ZykgOiAwOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2
YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZSgmbm9kZSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1h
cCk7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJl
bnRJZCwgcHJldklkLCB2YWx1ZS5yZWxlYXNlKCkpOworICAgICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZSgmbm9kZSwgMCwg
Jm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5j
aGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEY6Om1vdmUodmFsdWUpKTsKICAg
ICB9CiB9CiAKQEAgLTE4NDksNyArMTg1Myw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRp
ZFJlbW92ZURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuCiAK
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3Qg
VmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PGludD4+IG5vZGVJZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxp
bnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIG5vZGVJZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gZWxl
bWVudHMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBlbGVtZW50cy5hdChpKTsKICAgICAgICAgaW50IGlkID0gYm91bmROb2RlSWQoZWxlbWVudCk7
CkBAIC0xODYxLDcgKzE4NjUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzdHlsZUF0dHJp
YnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbgogICAgICAgICAg
ICAgbV9kb21MaXN0ZW5lci0+ZGlkTW9kaWZ5RE9NQXR0cihlbGVtZW50KTsKICAgICAgICAgbm9k
ZUlkcy0+YWRkSXRlbShpZCk7CiAgICAgfQotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbmxp
bmVTdHlsZUludmFsaWRhdGVkKG5vZGVJZHMucmVsZWFzZSgpKTsKKyAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+aW5saW5lU3R5bGVJbnZhbGlkYXRlZChXVEY6Om1vdmUobm9kZUlkcykpOwogfQog
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVy
RGF0YSYgY2hhcmFjdGVyRGF0YSkKQEAgLTE5ODQsNyArMTk4OCw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnB1c2hOb2RlQnlCYWNrZW5kSWRUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoTm9kZSog
bm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9k
ZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIEZyYW1lKiBm
cmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA1MzA1MDU2Li40
MTJiN2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aApAQCAtMTMyLDIxICsxMzIsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROb2Rl
VmFsdWUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgY29uc3QgV1RGOjpTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVu
dExpc3RlbmVyPj4mIGxpc3RlbmVyc0FycmF5KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM+JiBheFByb3BlcnRpZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtU2Vh
cmNoKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIG5vZGVJZHMsIFN0cmluZyog
c2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1l
ZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBub2RlSWRz
LCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vh
cmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8aW50Pj4mKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY2FyZFNl
YXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBoaWdobGlnaHRDb25m
aWcpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJy
b3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBy
ZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCogbm9k
ZUlkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHB1c2hOb2RlQnlCYWNrZW5kSWRUb0Zyb250ZW5kKEVycm9yU3Ry
aW5nJiwgQmFja2VuZE5vZGVJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlQmFja2VuZE5vZGVJZHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG5v
ZGVHcm91cCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0
cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRRdWFkKEVycm9y
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBxdWFkLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29s
KiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBoaWdobGln
aHROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBv
YmplY3RJZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0Piogb3V0bGluZUNvbG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxp
Z2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0
IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGhp
Z2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheT4mJiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvdXRs
aW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBpbnQqIG5v
ZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IpIG92ZXJyaWRlOwog
CiAgICAgdmlydHVhbCB2b2lkIG1vdmVUbyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGludCB0
YXJnZXROb2RlSWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVuZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKQEAg
LTE4Niw3ICsxODYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RyaW5nIGRvY3VtZW50VVJM
U3RyaW5nKERvY3VtZW50Kik7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSosIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+IHJlc29sdmVOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3Vw
KTsKICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsK
ICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwpAQCAtMjMwLDIxICsyMzAsMjAgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiwgaW50IHR5cGUpOwogICAgIHZvaWQgdXBk
YXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIHJvb3QsIHVpbnQzMl90IHJvb3RNYXNrLCBib29s
IHZhbHVlKTsKLSAgICB2b2lkIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBp
bnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBkZXNjcmlwdGlvbik7Ci0KLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gYnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqLCBpbnQgZGVw
dGgsIE5vZGVUb0lkTWFwKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCopOwot
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlPj4gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNv
bnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOwotICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBidWlsZE9iamVjdEZv
ckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSosIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXBJZCk7
Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzPiBidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqKTsK
LSAgICB2b2lkIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUGFzc1JlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+Jik7
CisKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBidWlsZE9iamVjdEZv
ck5vZGUoTm9kZSosIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqKTsKKyAgICBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVz
KEVsZW1lbnQqKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5v
ZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOworICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9y
RXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cElkKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4gYnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKik7CisgICAg
dm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PiYmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mJik7CiAgICAg
CiAgICAgTm9kZSogbm9kZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBOb2RlKiBu
b2RlRm9yT2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCk7CiAKICAgICB2b2lkIGRpc2Nh
cmRCaW5kaW5ncygpOwogCi0gICAgdm9pZCBpbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVf
cHRyPEZsb2F0UXVhZD4sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4q
IGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5l
Q29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgdm9pZCBpbm5lckhp
Z2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4sIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3Jk
aW5hdGVzKTsKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgSW5z
cGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuY3BwCmluZGV4IDc4MjZhOTMuLmRkOGY1MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTE3MCw5
ICsxNzAsOSBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbgogdm9pZCBJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYg
KGhhc0JyZWFrcG9pbnQoJm5vZGUsIEF0dHJpYnV0ZU1vZGlmaWVkKSkgewotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KCZub2RlLCBBdHRyaWJ1dGVNb2RpZmll
ZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJl
YWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRP
TSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGV2
ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9u
Rm9yRE9NRXZlbnQobm9kZSwgQXR0cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0
KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURjo6bW92ZShldmVudERhdGEp
KTsKICAgICB9CiB9CiAKQEAgLTI3MCw5ICsyNzAsOSBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bgogdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9NTm9kZShOb2Rl
JiBwYXJlbnQpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoJnBhcmVudCwgU3VidHJlZU1vZGlm
aWVkKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KCZw
YXJlbnQsIFN1YnRyZWVNb2RpZmllZCwgdHJ1ZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERp
c3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCwg
dHJ1ZSwgZXZlbnREYXRhLmdldCgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1By
b2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBX
VEY6Om1vdmUoZXZlbnREYXRhKSk7CiAgICAgfQogfQogCkBAIC0yODAsMzkgKzI4MCwzOSBAQCB2
b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUmIG5v
ZGUpCiB7CiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBh
cmVudE5vZGUoJm5vZGUpOwogICAgIGlmIChoYXNCcmVha3BvaW50KCZub2RlLCBOb2RlUmVtb3Zl
ZCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudCgmbm9k
ZSwgTm9kZVJlbW92ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5vZGUsIE5vZGVSZW1vdmVkLCBmYWxzZSwgZXZlbnRE
YXRhLmdldCgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVj
dG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEY6Om1vdmUoZXZl
bnREYXRhKSk7CiAgICAgfSBlbHNlIGlmIChwYXJlbnROb2RlICYmIGhhc0JyZWFrcG9pbnQocGFy
ZW50Tm9kZSwgU3VidHJlZU1vZGlmaWVkKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNj
cmlwdGlvbkZvckRPTUV2ZW50KCZub2RlLCBTdWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBldmVudERh
dGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxl
YXNlKCkpOworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5vZGUs
IFN1YnRyZWVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7CisgICAgICAgIG1fZGVi
dWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRj
aGVyOjpSZWFzb246OkRPTSwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogICAgIH0KIH0KIAogdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBl
bGVtZW50KQogewogICAgIGlmIChoYXNCcmVha3BvaW50KCZlbGVtZW50LCBBdHRyaWJ1dGVNb2Rp
ZmllZCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudCgm
ZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwotICAg
ICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1v
ZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNv
bjo6RE9NLCBXVEY6Om1vdmUoZXZlbnREYXRhKSk7CiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBp
bnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3JPYmplY3QqIGRlc2Ny
aXB0aW9uKQordm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRP
TUV2ZW50KE5vZGUmIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwg
SW5zcGVjdG9yT2JqZWN0JiBkZXNjcmlwdGlvbikKIHsKLSAgICBBU1NFUlQoaGFzQnJlYWtwb2lu
dCh0YXJnZXQsIGJyZWFrcG9pbnRUeXBlKSk7CisgICAgQVNTRVJUKGhhc0JyZWFrcG9pbnQoJnRh
cmdldCwgYnJlYWtwb2ludFR5cGUpKTsKIAotICAgIE5vZGUqIGJyZWFrcG9pbnRPd25lciA9IHRh
cmdldDsKKyAgICBOb2RlKiBicmVha3BvaW50T3duZXIgPSAmdGFyZ2V0OwogICAgIGlmICgoMSA8
PCBicmVha3BvaW50VHlwZSkgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2spIHsK
ICAgICAgICAgLy8gRm9yIGluaGVyaXRhYmxlIGJyZWFrcG9pbnQgdHlwZXMsIHRhcmdldCBub2Rl
IGlzbid0IGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUgbm9kZSB0aGF0IG93bnMgYSBicmVha3BvaW50
LgogICAgICAgICAvLyBUYXJnZXQgbm9kZSBtYXkgYmUgdW5rbm93biB0byBmcm9udGVuZCwgc28g
d2UgbmVlZCB0byBwdXNoIGl0IGZpcnN0LgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB0YXJnZXROb2RlT2JqZWN0ID0gbV9kb21BZ2Vu
dC0+cmVzb2x2ZU5vZGUodGFyZ2V0LCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VP
YmplY3RHcm91cCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5zZXRWYWx1ZSgidGFyZ2V0Tm9kZSIs
IHRhcmdldE5vZGVPYmplY3QpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiB0YXJnZXROb2RlT2JqZWN0ID0gbV9kb21BZ2VudC0+cmVz
b2x2ZU5vZGUoJnRhcmdldCwgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0
R3JvdXApOworICAgICAgICBkZXNjcmlwdGlvbi5zZXRWYWx1ZSgidGFyZ2V0Tm9kZSIsIHRhcmdl
dE5vZGVPYmplY3QpOwogCiAgICAgICAgIC8vIEZpbmQgYnJlYWtwb2ludCBvd25lciBub2RlLgog
ICAgICAgICBpZiAoIWluc2VydGlvbikKLSAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUodGFyZ2V0KTsKKyAgICAgICAgICAgIGJy
ZWFrcG9pbnRPd25lciA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoJnRhcmdl
dCk7CiAgICAgICAgIEFTU0VSVChicmVha3BvaW50T3duZXIpOwogICAgICAgICB3aGlsZSAoISht
X2RvbUJyZWFrcG9pbnRzLmdldChicmVha3BvaW50T3duZXIpICYgKDEgPDwgYnJlYWtwb2ludFR5
cGUpKSkgewogICAgICAgICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IEluc3BlY3RvckRPTUFnZW50
Ojppbm5lclBhcmVudE5vZGUoYnJlYWtwb2ludE93bmVyKTsKQEAgLTMyMiwxMyArMzIyLDEzIEBA
IHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChO
b2RlKiB0YXJnZXQsIGludCBicmVha3BvCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYnJlYWtw
b2ludFR5cGUgPT0gU3VidHJlZU1vZGlmaWVkKQotICAgICAgICAgICAgZGVzY3JpcHRpb24tPnNl
dEJvb2xlYW4oImluc2VydGlvbiIsIGluc2VydGlvbik7CisgICAgICAgICAgICBkZXNjcmlwdGlv
bi5zZXRCb29sZWFuKCJpbnNlcnRpb24iLCBpbnNlcnRpb24pOwogICAgIH0KIAogICAgIGludCBi
cmVha3BvaW50T3duZXJOb2RlSWQgPSBtX2RvbUFnZW50LT5ib3VuZE5vZGVJZChicmVha3BvaW50
T3duZXIpOwogICAgIEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAgIGRlc2NyaXB0
aW9uLT5zZXRJbnRlZ2VyKCJub2RlSWQiLCBicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAgIGRl
c2NyaXB0aW9uLT5zZXRTdHJpbmcoInR5cGUiLCBkb21UeXBlTmFtZShicmVha3BvaW50VHlwZSkp
OworICAgIGRlc2NyaXB0aW9uLnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5v
ZGVJZCk7CisgICAgZGVzY3JpcHRpb24uc2V0U3RyaW5nKCJ0eXBlIiwgZG9tVHlwZU5hbWUoYnJl
YWtwb2ludFR5cGUpKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpoYXNC
cmVha3BvaW50KE5vZGUqIG5vZGUsIGludCB0eXBlKQpAQCAtMzY2LDEyICszNjYsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChi
b29sIGlzRE9NRXZlbnQsIGNvbnMKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImV2ZW50TmFtZSIsIGZ1bGxF
dmVudE5hbWUpOwogICAgIGlmIChzeW5jaHJvbm91cykKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNv
bjo6RXZlbnRMaXN0ZW5lciwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fZGVidWdn
ZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIFdURjo6bW92ZShldmVudERhdGEpKTsKICAgICBlbHNl
Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJ
bnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFdmVudExpc3RlbmVy
LCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVs
ZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIFdURjo6bW92ZShldmVudERhdGEpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRYSFJCcmVha3BvaW50KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiB1cmwpCkBAIC00MTEsMTAgKzQxMSwxMCBAQCB2b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1
cmwpCiAgICAgaWYgKGJyZWFrcG9pbnRVUkwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtwb2ludFVS
TCIsIGJyZWFrcG9pbnRVUkwpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwp
OwotICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJv
bnRlbmREaXNwYXRjaGVyOjpSZWFzb246OlhIUiwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAg
bV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERp
c3BhdGNoZXI6OlJlYXNvbjo6WEhSLCBXVEY6Om1vdmUoZXZlbnREYXRhKSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6Y2xlYXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgKaW5kZXggNTU4NzMzNy4u
YzY5YjNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudC5oCkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIGRpZFBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2
b2lkIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBpbnQgYnJlYWtwb2ludFR5
cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogZGVzY3JpcHRp
b24pOworICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlJiB0YXJnZXQsIGludCBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBkZXNjcmlwdGlvbik7CiAgICAgdm9pZCB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSos
IHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHNldCk7CiAgICAgYm9vbCBoYXNCcmVha3BvaW50KE5v
ZGUqLCBpbnQgdHlwZSk7CiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5k
ZXggZDdjNWVhMy4uODExM2M1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTk0LDM0ICs5NCwzNCBAQCB2b2lk
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgbV9l
bmFibGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRE
T01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykKK3ZvaWQgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+PiYgaXRlbXMpCiB7CiAgICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0cjxTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3Jh
Z2VJZCwgZnJhbWUpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5k
U3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1lKTsKICAg
ICBpZiAoIXN0b3JhZ2VBcmVhKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJObyBTdG9yYWdlQXJlYSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+IHN0b3JhZ2VJdGVtcyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+OjpjcmVhdGUo
KTsKKyAgICBhdXRvIHN0b3JhZ2VJdGVtcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+OjpjcmVhdGUoKTsKIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlQXJlYS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAg
ICBTdHJpbmcga2V5ID0gc3RvcmFnZUFyZWEtPmtleShpKTsKICAgICAgICAgU3RyaW5nIHZhbHVl
ID0gc3RvcmFnZUFyZWEtPml0ZW0oa2V5KTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBlbnRyeS0+YWRkSXRlbShr
ZXkpOwogICAgICAgICBlbnRyeS0+YWRkSXRlbSh2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2VJdGVt
cy0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOworICAgICAgICBzdG9yYWdlSXRlbXMtPmFkZEl0
ZW0oV1RGOjptb3ZlKGVudHJ5KSk7CiAgICAgfQogCi0gICAgaXRlbXMgPSBzdG9yYWdlSXRlbXMu
cmVsZWFzZSgpOworICAgIGl0ZW1zID0gV1RGOjptb3ZlKHN0b3JhZ2VJdGVtcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBS
ZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3Ry
aW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VB
cmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQuY29weVJlZigpLCBm
cmFtZSk7CiAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFT
Q0lJTGl0ZXJhbCgiU3RvcmFnZSBub3QgZm91bmQiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTMz
LDEwICsxMzMsMTAgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3Jh
Z2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICAgICAgZXJyb3JTdHJp
bmcgPSBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oUVVPVEFfRVhDRUVERURfRVJSKS5uYW1lOwog
fQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
c3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkK
IHsKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJl
YSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7CisgICAg
UmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0
cmluZywgc3RvcmFnZUlkLmNvcHlSZWYoKSwgZnJhbWUpOwogICAgIGlmICghc3RvcmFnZUFyZWEp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIlN0b3JhZ2Ugbm90IGZvdW5k
Iik7CiAgICAgICAgIHJldHVybjsKQEAgLTE1NywxMSArMTU3LDEyIEBAIFN0cmluZyBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlKiBzdG9yYWdlKQogICAgIHJldHVy
biBzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGlzTG9jYWxTdG9yYWdlKS0+dG9KU09O
U3RyaW5nKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFn
ZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2UpCitSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wg
aXNMb2NhbFN0b3JhZ2UpCiB7CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0
b3JhZ2U6OlN0b3JhZ2VJZDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKHNl
Y3VyaXR5T3JpZ2luLT50b1Jhd1N0cmluZygpKQotICAgICAgICAuc2V0SXNMb2NhbFN0b3JhZ2Uo
aXNMb2NhbFN0b3JhZ2UpLnJlbGVhc2UoKTsKKyAgICAgICAgLnNldElzTG9jYWxTdG9yYWdlKGlz
TG9jYWxTdG9yYWdlKQorICAgICAgICAucmVsZWFzZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFN0b3Jh
Z2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIFBhZ2Uq
KQpAQCAtMTgxLDcgKzE4Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRE
aXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uCiAgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbVVwZGF0ZWQoaWQsIGtleSwgb2xkVmFs
dWUsIG5ld1ZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3RvcmFnZUlkLCBGcmFtZSomIHRhcmdldEZy
YW1lKQorUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRT
dG9yYWdlQXJlYShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBGcmFtZSomIHRhcmdldEZyYW1lKQogewogICAgIFN0cmlu
ZyBzZWN1cml0eU9yaWdpbjsKICAgICBib29sIGlzTG9jYWxTdG9yYWdlID0gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgK
aW5kZXggNmZkYjE5ZC4uMzYxYjYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaApAQCAtNjMsMTkgKzYzLDE5IEBAIHB1Ymxp
YzoKICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgZnJvbnQtZW5kLgogICAgIHZpcnR1YWwgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRET01TdG9yYWdlSXRl
bXMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0ZW1zKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRE9NU3Rv
cmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+PiYgaXRl
bXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRET01TdG9yYWdlSXRlbShFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdl
SWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJp
bmcmIGtleSkgb3ZlcnJpZGU7CiAKICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQgc2Ny
aXB0LgogICAgIFN0cmluZyBzdG9yYWdlSWQoU3RvcmFnZSopOwotICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBzdG9yYWdlSWQoU2VjdXJp
dHlPcmlnaW4qLCBib29sIGlzTG9jYWxTdG9yYWdlKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4q
LCBib29sIGlzTG9jYWxTdG9yYWdlKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFs
dWUsIFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIFBhZ2UqKTsKIAogcHJpdmF0ZToKLSAg
ICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiwgRnJhbWUqJik7CisgICAg
UmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYsIEZyYW1lKiYpOwogCiAgICAgSW5z
cGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JET01TdG9yYWdlRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlz
cGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmNwcAppbmRleCBkNWEzOTY4Li5iNDc0OTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC01OCwxOSAr
NTgsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi12b2lkIHJlcG9y
dFRyYW5zYWN0aW9uRmFpbGVkKEV4ZWN1dGVTUUxDYWxsYmFjayogcmVxdWVzdENhbGxiYWNrLCBT
UUxFcnJvciogZXJyb3IpCit2b2lkIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKEV4ZWN1dGVTUUxD
YWxsYmFjayYgcmVxdWVzdENhbGxiYWNrLCBTUUxFcnJvciogZXJyb3IpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gZXJyb3JPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I6OmNyZWF0ZSgpCisgICAgYXV0byBlcnJv
ck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldE1lc3NhZ2UoZXJyb3ItPm1lc3NhZ2UoKSkKLSAgICAgICAgLnNldENvZGUo
ZXJyb3ItPmNvZGUoKSk7Ci0gICAgcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhudWxscHRy
LCBudWxscHRyLCBlcnJvck9iamVjdC5yZWxlYXNlKCkpOworICAgICAgICAuc2V0Q29kZShlcnJv
ci0+Y29kZSgpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIHJlcXVlc3RDYWxsYmFjay5zZW5k
U3VjY2VzcyhudWxscHRyLCBudWxscHRyLCBXVEY6Om1vdmUoZXJyb3JPYmplY3QpKTsKIH0KIAog
Y2xhc3MgU3RhdGVtZW50Q2FsbGJhY2sgOiBwdWJsaWMgU1FMU3RhdGVtZW50Q2FsbGJhY2sgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YXRlbWVudENhbGxiYWNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0
aWMgUmVmPFN0YXRlbWVudENhbGxiYWNrPiBjcmVhdGUoUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4m
JiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
YXRlbWVudENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdGF0ZW1lbnRDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgflN0YXRlbWVudENhbGxiYWNrKCkgeyB9CkBAIC03OSw1NyAr
ODAsNjAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93
TGlzdCA9IHJlc3VsdFNldC0+cm93cygpOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGNvbHVtbk5hbWVzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBjb2x1bW5zID0gcm93TGlzdC0+Y29sdW1uTmFtZXMoKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5zLnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgY29sdW1uTmFtZXMtPmFkZEl0ZW0oY29sdW1uc1tpXSk7CiAKLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPj4gdmFsdWVzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byB2YWx1ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT46
OmNyZWF0ZSgpOwogICAgICAgICBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBkYXRhID0gcm93TGlz
dC0+dmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgY29uc3QgU1FMVmFsdWUmIHZhbHVlID0gcm93TGlzdC0+dmFs
dWVzKClbaV07CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGluc3BlY3RvclZh
bHVlOwogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yU3RyaW5n
OjpjcmVhdGUodmFsdWUuc3RyaW5nKCkpKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNRTFZh
bHVlOjpOdW1iZXJWYWx1ZTogdmFsdWVzLT5hZGRJdGVtKEluc3BlY3RvckJhc2ljVmFsdWU6OmNy
ZWF0ZSh2YWx1ZS5udW1iZXIoKSkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6
Ok51bGxWYWx1ZTogdmFsdWVzLT5hZGRJdGVtKEluc3BlY3RvclZhbHVlOjpudWxsKCkpOyBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVlOiBpbnNwZWN0b3JWYWx1
ZSA9IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlLnN0cmluZygpKTsgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdW1iZXJWYWx1ZTogaW5zcGVjdG9yVmFsdWUgPSBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUubnVtYmVyKCkpOyBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgU1FMVmFsdWU6Ok51bGxWYWx1ZTogaW5zcGVjdG9yVmFsdWUgPSBJbnNwZWN0b3JW
YWx1ZTo6bnVsbCgpOyBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgdmFsdWVzLT5hZGRJdGVtKFdURjo6bW92ZShpbnNwZWN0b3JWYWx1ZSkpOwogICAgICAg
ICB9Ci0gICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2Vzcyhjb2x1bW5OYW1lcy5y
ZWxlYXNlKCksIHZhbHVlcy5yZWxlYXNlKCksIG51bGxwdHIpOworICAgICAgICBtX3JlcXVlc3RD
YWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGOjptb3ZlKGNvbHVtbk5hbWVzKSwgV1RGOjptb3ZlKHZh
bHVlcyksIG51bGxwdHIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgU3RhdGVtZW50Q2FsbGJhY2soUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKLSAgICAgICAgOiBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJh
Y2spIHsgfQotICAgIFJlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNr
OworICAgIFN0YXRlbWVudENhbGxiYWNrKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQorICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0
Q2FsbGJhY2spKSB7IH0KKyAgICBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKIH07CiAKIGNsYXNzIFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3Rh
dGVtZW50RXJyb3JDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNr
PiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3RhdGljIFJlZjxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
PiBjcmVhdGUoUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0YXRlbWVudEVycm9yQ2FsbGJhY2socmVx
dWVzdENhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIH5TdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciogZXJyb3IpIG92ZXJyaWRlCiAg
ICAgewotICAgICAgICByZXBvcnRUcmFuc2FjdGlvbkZhaWxlZChtX3JlcXVlc3RDYWxsYmFjay5n
ZXQoKSwgZXJyb3IpOworICAgICAgICByZXBvcnRUcmFuc2FjdGlvbkZhaWxlZChtX3JlcXVlc3RD
YWxsYmFjay5jb3B5UmVmKCksIGVycm9yKTsKICAgICAgICAgcmV0dXJuIHRydWU7ICAKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgU3RhdGVtZW50RXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPEV4ZWN1
dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxi
YWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0gICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgU3RhdGVtZW50RXJyb3JDYWxsYmFjayhSZWY8RXhlY3V0
ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAgOiBtX3JlcXVlc3RDYWxs
YmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9CisgICAgUmVmPEV4ZWN1dGVTUUxD
YWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiBjbGFzcyBUcmFuc2FjdGlvbkNhbGxi
YWNrIDogcHVibGljIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHNx
bFN0YXRlbWVudCwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFj
aykKKyAgICBzdGF0aWMgUmVmPFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHNxbFN0YXRlbWVudCwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJh
Y2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uQ2FsbGJh
Y2soc3FsU3RhdGVtZW50LCByZXF1ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVHJhbnNhY3Rpb25DYWxsYmFjayhzcWxTdGF0ZW1lbnQsIFdURjo6bW92ZShyZXF1
ZXN0Q2FsbGJhY2spKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb25DYWxsYmFj
aygpIHsgfQpAQCAtMTQwLDI0ICsxNDQsMjQgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICAgICAgVmVjdG9yPFNRTFZhbHVlPiBzcWxWYWx1ZXM7Ci0gICAgICAgIFJl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2soU3RhdGVtZW50Q2FsbGJhY2s6OmNy
ZWF0ZShtX3JlcXVlc3RDYWxsYmFjay5nZXQoKSkpOwotICAgICAgICBSZWZQdHI8U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayhTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpj
cmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCkpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmV4
ZWN1dGVTUUwobV9zcWxTdGF0ZW1lbnQsIHNxbFZhbHVlcywgY2FsbGJhY2sucmVsZWFzZSgpLCBl
cnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxT
UUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2soU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZSht
X3JlcXVlc3RDYWxsYmFjay5jb3B5UmVmKCkpKTsKKyAgICAgICAgUmVmPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2soU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6Y3JlYXRl
KG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSkpOworICAgICAgICB0cmFuc2FjdGlvbi0+ZXhl
Y3V0ZVNRTChtX3NxbFN0YXRlbWVudCwgc3FsVmFsdWVzLCBXVEY6Om1vdmUoY2FsbGJhY2spLCBX
VEY6Om1vdmUoZXJyb3JDYWxsYmFjayksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiBwcml2YXRlOgotICAgIFRyYW5zYWN0aW9uQ2FsbGJhY2soY29uc3Qg
U3RyaW5nJiBzcWxTdGF0ZW1lbnQsIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiByZXF1
ZXN0Q2FsbGJhY2spCisgICAgVHJhbnNhY3Rpb25DYWxsYmFjayhjb25zdCBTdHJpbmcmIHNxbFN0
YXRlbWVudCwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogbV9zcWxTdGF0ZW1lbnQoc3FsU3RhdGVtZW50KQotICAgICAgICAsIG1fcmVxdWVzdENh
bGxiYWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9CisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2so
V1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpIHsgfQogICAgIFN0cmluZyBtX3NxbFN0YXRlbWVu
dDsKLSAgICBSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAg
ICBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIGNsYXNz
IFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiByZXF1ZXN0Q2Fs
bGJhY2spCisgICAgc3RhdGljIFJlZjxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGNyZWF0ZShS
ZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKHJlcXVlc3RDYWxs
YmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IH5UcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKSB7IH0KQEAgLTE2OCwxNiArMTcyLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHJpdmF0ZToKLSAgICBUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RD
YWxsYmFjaykKLSAgICAgICAgOiBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spIHsg
fQotICAgIFJlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAg
IFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVl
c3RDYWxsYmFjaykKKyAgICAgICAgOiBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVz
dENhbGxiYWNrKSkgeyB9CisgICAgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9yZXF1ZXN0Q2Fs
bGJhY2s7CiB9OwogCiBjbGFzcyBUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjayA6IHB1YmxpYyBW
b2lkQ2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9u
U3VjY2Vzc0NhbGxiYWNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBSZWY8VHJhbnNhY3Rpb25TdWNj
ZXNzQ2FsbGJhY2s+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjaygpKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IH5UcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjaygpIHsgfQpAQCAtMjcyLDEwICsyNzYsOCBAQCB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0
cmluZyYgZXJyb3IsIGNvbnN0IFN0cgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcHJw
UmVxdWVzdENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FM
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKLSAgICBS
ZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2sgPSBwcnBSZXF1ZXN0Q2Fs
bGJhY2s7Ci0KICAgICBpZiAoIW1fZW5hYmxlZCkgewogICAgICAgICByZXF1ZXN0Q2FsbGJhY2st
PnNlbmRGYWlsdXJlKCJEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5hYmxlZCIpOwogICAgICAgICBy
ZXR1cm47CkBAIC0yODcsMTAgKzI4OSwxMCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6
OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4g
Y2FsbGJhY2soVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKHF1ZXJ5LCByZXF1ZXN0Q2FsbGJh
Y2suZ2V0KCkpKTsKLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJv
ckNhbGxiYWNrKFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKHJlcXVlc3RDYWxsYmFj
ay5nZXQoKSkpOwotICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayhUcmFu
c2FjdGlvblN1Y2Nlc3NDYWxsYmFjazo6Y3JlYXRlKCkpOwotICAgIGRhdGFiYXNlLT50cmFuc2Fj
dGlvbihjYWxsYmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNz
Q2FsbGJhY2sucmVsZWFzZSgpKTsKKyAgICBSZWY8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2Fs
bGJhY2soVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKHF1ZXJ5LCByZXF1ZXN0Q2FsbGJhY2su
Z2V0KCkpKTsKKyAgICBSZWY8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKHJlcXVlc3RDYWxsYmFjay5nZXQo
KSkpOworICAgIFJlZjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayhUcmFuc2FjdGlvblN1
Y2Nlc3NDYWxsYmFjazo6Y3JlYXRlKCkpOworICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihXVEY6
Om1vdmUoY2FsbGJhY2spLCBXVEY6Om1vdmUoZXJyb3JDYWxsYmFjayksIFdURjo6bW92ZShzdWNj
ZXNzQ2FsbGJhY2spKTsKIH0KIAogU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFi
YXNlSWQoRGF0YWJhc2UqIGRhdGFiYXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKaW5kZXggNzdlZmVkZi4uMzhlM2YzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBA
IC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4mIG5hbWVzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7CiAKICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQgc2NyaXB0LgogICAg
IFN0cmluZyBkYXRhYmFzZUlkKERhdGFiYXNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oCmluZGV4
IGQ2Y2I2MjMuLmNkZWMzYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oCkBAIC0zOCwxMSArMzgs
MTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi1p
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFz
ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVu
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPERhdGFiYXNl
PiYmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRPcGVuRGF0YWJhc2VJbXBsKCpp
bnN0cnVtZW50aW5nQWdlbnRzLCBkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKTsKKyAg
ICAgICAgZGlkT3BlbkRhdGFiYXNlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjptb3Zl
KGRhdGFiYXNlKSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKaW5k
ZXggODNiODg0Mi4uOWJhZjVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcApAQCAtNDMsMTIgKzQzLDEyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGludCBuZXh0VW51c2VkSWQgPSAxOwogCi1QYXNz
UmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2U6OmNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBk
b21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorUmVmPElu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0
ZShSZWZQdHI8RGF0YWJhc2U+JiYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UoZGF0YWJhc2UsIGRvbWFpbiwgbmFt
ZSwgdmVyc2lvbikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UoV1RGOjptb3ZlKGRhdGFiYXNlKSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKSk7CiB9
CiAKLUluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uo
UGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK0luc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2U6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UoUmVmUHRyPERhdGFiYXNlPiYmIGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24pCiAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQogICAgICwgbV9pZChT
dHJpbmc6Om51bWJlcihuZXh0VW51c2VkSWQrKykpCiAgICAgLCBtX2RvbWFpbihkb21haW4pCkBA
IC01OSwxMiArNTksMTMgQEAgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmEKIAogdm9pZCBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlOjpiaW5kKEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRj
aGVyKiBkYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlPiBqc29uT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlOjpjcmVhdGUoKQorICAgIGF1dG8ganNvbk9iamVj
dCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZTo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldElkKG1faWQpCiAgICAgICAgIC5zZXREb21haW4obV9kb21haW4pCiAgICAgICAg
IC5zZXROYW1lKG1fbmFtZSkKLSAgICAgICAgLnNldFZlcnNpb24obV92ZXJzaW9uKTsKLSAgICBk
YXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlci0+YWRkRGF0YWJhc2UoanNvbk9iamVjdCk7CisgICAg
ICAgIC5zZXRWZXJzaW9uKG1fdmVyc2lvbikKKyAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBkYXRh
YmFzZUZyb250ZW5kRGlzcGF0Y2hlci0+YWRkRGF0YWJhc2UoV1RGOjptb3ZlKGpzb25PYmplY3Qp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKaW5kZXggOTg4YTI3Ny4uMGI5
OTljMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5oCkBAIC0zNCw3ICszNCw2IEBACiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkgJiYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQ1LDE1ICs0NCwxNSBAQCBjbGFzcyBEYXRhYmFz
ZTsKIAogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlPiBjcmVhdGUoUmVmUHRyPERhdGFiYXNlPiYmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogCiAg
ICAgdm9pZCBiaW5kKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNo
ZXIqKTsKICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgp
OyB9Ci0gICAgdm9pZCBzZXREYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkg
eyBtX2RhdGFiYXNlID0gZGF0YWJhc2U7IH0KKyAgICB2b2lkIHNldERhdGFiYXNlKFJlZlB0cjxE
YXRhYmFzZT4mJiBkYXRhYmFzZSkgeyBtX2RhdGFiYXNlID0gZGF0YWJhc2U7IH0KICAgICBTdHJp
bmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZShQYXNzUmVmUHRyPERhdGFiYXNlPiwgY29uc3QgU3RyaW5nJiBkb21h
aW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlKFJlZlB0cjxEYXRhYmFzZT4mJiwgY29uc3QgU3RyaW5nJiBk
b21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIAogICAg
IFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBTdHJpbmcgbV9pZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaAppbmRleCAxYTc0
ZWRiLi41MGJmZTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5oCkBAIC00NSw5ICs0NSw5IEBAIGNsYXNzIFBhZ2U7CiAKIGNsYXNzIElu
c3BlY3RvckZyb250ZW5kSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckZyb250ZW5k
SG9zdD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZyb250ZW5k
SG9zdD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQsIFBhZ2UqIGZyb250
ZW5kUGFnZSkKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKElu
c3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQsIFBhZ2UqIGZyb250ZW5kUGFnZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KGNsaWVu
dCwgZnJvbnRlbmRQYWdlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3Rv
ckZyb250ZW5kSG9zdChjbGllbnQsIGZyb250ZW5kUGFnZSkpOwogICAgIH0KIAogICAgIFdFQkNP
UkVfRVhQT1JUIH5JbnNwZWN0b3JGcm9udGVuZEhvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IGRhMTZhODQu
LmY3OWMwMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluZGV4ZWREQkFnZW50LmNwcApAQCAtOTIsOSArOTIsOSBAQCBuYW1lc3BhY2UgewogY2xhc3Mg
R2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayk7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiBjcmVhdGUoUGFz
c1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGNv
bnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4pCisgICAgc3RhdGljIFJlZjxHZXREYXRhYmFzZU5h
bWVzQ2FsbGJhY2s+IGNyZWF0ZShSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4pCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayhyZXF1ZXN0
Q2FsbGJhY2ssIHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgc2Vj
dXJpdHlPcmlnaW4pKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5HZXREYXRhYmFzZU5hbWVzQ2Fs
bGJhY2soKSB7IH0KQEAgLTEyNiwxOCArMTI2LDE4IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAg
ICAgICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzTGlzdCA9IHJlcXVlc3RS
ZXN1bHQtPmRvbVN0cmluZ0xpc3QoKTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+IGRhdGFiYXNlTmFtZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+IGRhdGFiYXNlTmFtZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRh
YmFzZU5hbWVzTGlzdC0+bGVuZ3RoKCk7ICsraSkKICAgICAgICAgICAgIGRhdGFiYXNlTmFtZXMt
PmFkZEl0ZW0oZGF0YWJhc2VOYW1lc0xpc3QtPml0ZW0oaSkpOwotICAgICAgICBtX3JlcXVlc3RD
YWxsYmFjay0+c2VuZFN1Y2Nlc3MoZGF0YWJhc2VOYW1lcy5yZWxlYXNlKCkpOworICAgICAgICBt
X3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGOjptb3ZlKGRhdGFiYXNlTmFtZXMpKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKFBhc3NSZWZQ
dHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBT
dHJpbmcmIHNlY3VyaXR5T3JpZ2luKQorICAgIEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayhSZWY8
UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IFN0
cmluZyYgc2VjdXJpdHlPcmlnaW4pCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3Rl
bmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhy
ZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJl
cXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdp
bikgeyB9Ci0gICAgUmVmUHRyPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IG1fcmVxdWVz
dENhbGxiYWNrOworICAgIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiBtX3JlcXVl
c3RDYWxsYmFjazsKICAgICBTdHJpbmcgbV9zZWN1cml0eU9yaWdpbjsKIH07CiAKQEAgLTE0Nyw4
ICsxNDcsOCBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpIHsgfQogICAg
IHZpcnR1YWwgfkV4ZWN1dGFibGVXaXRoRGF0YWJhc2UoKSB7IH07CiAgICAgdm9pZCBzdGFydChJ
REJGYWN0b3J5KiwgU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4pID0gMDsK
LSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayogcmVxdWVzdENhbGxiYWNrKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlKFJlZlB0cjxJREJEYXRhYmFzZT4mJikgPSAwOworICAgIHZp
cnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CiAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfTsKIHByaXZh
dGU6CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OwpAQCAtMTU2LDkgKzE1
Niw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIE9wZW5EYXRhYmFzZUNhbGxiYWNrIDogcHVibGljIEV2
ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9wZW5EYXRhYmFz
ZUNhbGxiYWNrPiBjcmVhdGUoRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSogZXhlY3V0YWJsZVdpdGhE
YXRhYmFzZSkKKyAgICBzdGF0aWMgUmVmPE9wZW5EYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGUoRXhl
Y3V0YWJsZVdpdGhEYXRhYmFzZSogZXhlY3V0YWJsZVdpdGhEYXRhYmFzZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlbkRhdGFiYXNlQ2FsbGJhY2soZXhlY3V0YWJsZVdp
dGhEYXRhYmFzZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuRGF0YWJhc2VD
YWxsYmFjayhleGVjdXRhYmxlV2l0aERhdGFiYXNlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+
T3BlbkRhdGFiYXNlQ2FsbGJhY2soKSB7IH0KQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVu
dCogZXZlbnQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBl
dmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50KSB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRo
RGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLT5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCBldmVu
dCB0eXBlLiIpOworICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0
Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCBldmVudCB0eXBlLiIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE3OSwxNiArMTc5LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxJREJBbnk+IHJl
cXVlc3RSZXN1bHQgPSBpZGJPcGVuREJSZXF1ZXN0LT5yZXN1bHQoZWMpOwogICAgICAgICBpZiAo
ZWMpIHsKLSAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxi
YWNrKCktPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4iKTsK
KyAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCku
c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBnZXQgcmVzdWx0IGluIGNhbGxiYWNrLiIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXF1ZXN0UmVzdWx0LT50eXBl
KCkgIT0gSURCQW55OjpJREJEYXRhYmFzZVR5cGUpIHsKLSAgICAgICAgICAgIG1fZXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCktPnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVk
IHJlc3VsdCB0eXBlLiIpOworICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5y
ZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCByZXN1bHQgdHlwZS4iKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxJREJEYXRh
YmFzZT4gaWRiRGF0YWJhc2UgPSByZXF1ZXN0UmVzdWx0LT5pZGJEYXRhYmFzZSgpOwotICAgICAg
ICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoaWRiRGF0YWJhc2UpOworICAgICAg
ICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoV1RGOjptb3ZlKGlkYkRhdGFiYXNl
KSk7CiAgICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0aXZhdGVOZXdU
cmFuc2FjdGlvbnMoKTsKICAgICAgICAgaWRiRGF0YWJhc2UtPmNsb3NlKCk7CiAgICAgfQpAQCAt
MjAyLDEyNyArMjAyLDEzNiBAQCBwcml2YXRlOgogCiB2b2lkIEV4ZWN1dGFibGVXaXRoRGF0YWJh
c2U6OnN0YXJ0KElEQkZhY3RvcnkqIGlkYkZhY3RvcnksIFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUpCiB7Ci0gICAgUmVmUHRyPE9wZW5EYXRhYmFzZUNhbGxiYWNr
PiBjYWxsYmFjayA9IE9wZW5EYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUodGhpcyk7CisgICAgUmVm
PE9wZW5EYXRhYmFzZUNhbGxiYWNrPiBjYWxsYmFjayA9IE9wZW5EYXRhYmFzZUNhbGxiYWNrOjpj
cmVhdGUodGhpcyk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPElEQk9w
ZW5EQlJlcXVlc3Q+IGlkYk9wZW5EQlJlcXVlc3QgPSBpZGJGYWN0b3J5LT5vcGVuKGNvbnRleHQo
KSwgZGF0YWJhc2VOYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3RDYWxs
YmFjaygpLT5zZW5kRmFpbHVyZSgiQ291bGQgbm90IG9wZW4gZGF0YWJhc2UuIik7CisgICAgICAg
IHJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJDb3VsZCBub3Qgb3BlbiBkYXRhYmFzZS4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZGJPcGVuREJSZXF1ZXN0LT5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGNhbGxiYWNrLCBmYWxzZSk7Cisg
ICAgaWRiT3BlbkRCUmVxdWVzdC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50LCBXVEY6Om1vdmUoY2FsbGJhY2spLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIElEQkRhdGFiYXNlKiBpZGJEYXRhYmFz
ZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kZSA9IElE
QlRyYW5zYWN0aW9uOjptb2RlUmVhZE9ubHkoKSkKK3N0YXRpYyBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgSURCRGF0YWJhc2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2RlID0gSURCVHJhbnNhY3Rpb246Om1v
ZGVSZWFkT25seSgpKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24gPSBpZGJEYXRhYmFzZS0+dHJhbnNhY3Rpb24o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgb2JqZWN0U3RvcmVOYW1lLCBtb2RlLCBlYyk7CiAgICAg
aWYgKGVjKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaWRiVHJhbnNhY3Rp
b247CisgICAgcmV0dXJuIFdURjo6bW92ZShpZGJUcmFuc2FjdGlvbik7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZUZvclRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uKiBpZGJUcmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUp
CitzdGF0aWMgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZUZvclRyYW5zYWN0aW9u
KElEQlRyYW5zYWN0aW9uKiBpZGJUcmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBpZGJPYmplY3RTdG9yZSA9IGlkYlRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU5hbWUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBpZGJPYmplY3RTdG9yZTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGlkYk9iamVj
dFN0b3JlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXg+IGluZGV4Rm9yT2JqZWN0
U3RvcmUoSURCT2JqZWN0U3RvcmUqIGlkYk9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSkKK3N0YXRpYyBSZWZQdHI8SURCSW5kZXg+IGluZGV4Rm9yT2JqZWN0U3RvcmUoSURCT2Jq
ZWN0U3RvcmUqIGlkYk9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8SURCSW5kZXg+IGlkYkluZGV4ID0g
aWRiT2JqZWN0U3RvcmUtPmluZGV4KGluZGV4TmFtZSwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGlkYkluZGV4OworICAgIHJldHVybiBXVEY6
Om1vdmUoaWRiSW5kZXgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxLZXlQYXRoPiBrZXlQYXRo
RnJvbUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYgaWRiS2V5UGF0aCkKK3N0YXRpYyBSZWZQ
dHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmIGlkYktl
eVBhdGgpCiB7CiAgICAgUmVmUHRyPEtleVBhdGg+IGtleVBhdGg7CiAgICAgc3dpdGNoIChpZGJL
ZXlQYXRoLnR5cGUoKSkgewogICAgIGNhc2UgSURCS2V5UGF0aDo6TnVsbFR5cGU6Ci0gICAgICAg
IGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6Ok51bGwp
OworICAgICAgICBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRU
eXBlKEtleVBhdGg6OlR5cGU6Ok51bGwpCisgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIElEQktleVBhdGg6OlN0cmluZ1R5cGU6Ci0gICAgICAgIGtleVBh
dGggPSBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OlN0cmluZyk7Cisg
ICAgICAgIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFR5cGUo
S2V5UGF0aDo6VHlwZTo6U3RyaW5nKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAg
a2V5UGF0aC0+c2V0U3RyaW5nKGlkYktleVBhdGguc3RyaW5nKCkpOworCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSURCS2V5UGF0aDo6QXJyYXlUeXBlOiB7Ci0gICAgICAgIGtleVBhdGggPSBL
ZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OkFycmF5KTsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGFycmF5ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJy
YXkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ0FycmF5ID0gaWRiS2V5UGF0aC5hcnJheSgp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ0FycmF5LnNpemUoKTsgKytp
KQogICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0oc3RyaW5nQXJyYXlbaV0pOwotICAgICAgICBr
ZXlQYXRoLT5zZXRBcnJheShhcnJheSk7CisgICAgICAgIGtleVBhdGggPSBLZXlQYXRoOjpjcmVh
dGUoKQorICAgICAgICAgICAgLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpCisgICAgICAg
ICAgICAucmVsZWFzZSgpOworICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEY6Om1vdmUoYXJy
YXkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHJldHVybiBrZXlQYXRoLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gV1RGOjptb3ZlKGtleVBhdGgpOwogfQogCiBjbGFzcyBEYXRhYmFzZUxvYWRl
ciA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+IHJlcXVlc3RDYWxs
YmFjaykKKyAgICBzdGF0aWMgUmVmPERhdGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVl
c3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VM
b2FkZXIoY29udGV4dCwgcmVxdWVzdENhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERhdGFiYXNlTG9hZGVyKGNvbnRleHQsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2sp
KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+RGF0YWJhc2VMb2FkZXIoKSB7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IHBycERhdGFiYXNlKSBv
dmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKFJlZlB0cjxJREJEYXRhYmFzZT4mJiBk
YXRhYmFzZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRi
RGF0YWJhc2UgPSBwcnBEYXRhYmFzZTsKLSAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS0+
aXNBY3RpdmUoKSkKKyAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS5pc0FjdGl2ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEg
ZGF0YWJhc2VNZXRhZGF0YSA9IGlkYkRhdGFiYXNlLT5tZXRhZGF0YSgpOworICAgICAgICBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhIGRhdGFiYXNlTWV0YWRhdGEgPSBkYXRhYmFzZS0+bWV0YWRh
dGEoKTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT4+IG9iamVjdFN0b3JlcyA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6
T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBvYmplY3RTdG9yZXMgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9i
amVjdFN0b3JlPjo6Y3JlYXRlKCk7CiAKICAgICAgICAgZm9yIChjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhIDogZGF0YWJhc2VNZXRhZGF0YS5vYmplY3RT
dG9yZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+
PiBpbmRleGVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBh
dXRvIGluZGV4ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKIAogICAgICAgICAg
ICAgZm9yIChjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhIDogb2JqZWN0U3Rv
cmVNZXRhZGF0YS5pbmRleGVzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPE9i
amVjdFN0b3JlSW5kZXg+IG9iamVjdFN0b3JlSW5kZXggPSBPYmplY3RTdG9yZUluZGV4OjpjcmVh
dGUoKQorICAgICAgICAgICAgICAgIFJlZjxPYmplY3RTdG9yZUluZGV4PiBvYmplY3RTdG9yZUlu
ZGV4ID0gT2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNl
dE5hbWUoaW5kZXhNZXRhZGF0YS5uYW1lKQogICAgICAgICAgICAgICAgICAgICAuc2V0S2V5UGF0
aChrZXlQYXRoRnJvbUlEQktleVBhdGgoaW5kZXhNZXRhZGF0YS5rZXlQYXRoKSkKICAgICAgICAg
ICAgICAgICAgICAgLnNldFVuaXF1ZShpbmRleE1ldGFkYXRhLnVuaXF1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgLnNldE11bHRpRW50cnkoaW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KTsKLSAgICAg
ICAgICAgICAgICBpbmRleGVzLT5hZGRJdGVtKG9iamVjdFN0b3JlSW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICAuc2V0TXVsdGlFbnRyeShpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpCisgICAg
ICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgaW5kZXhlcy0+YWRk
SXRlbShXVEY6Om1vdmUob2JqZWN0U3RvcmVJbmRleCkpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBSZWZQdHI8T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gT2JqZWN0U3RvcmU6OmNy
ZWF0ZSgpCisgICAgICAgICAgICBSZWY8T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gT2JqZWN0
U3RvcmU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgLnNldE5hbWUob2JqZWN0U3RvcmVNZXRh
ZGF0YS5uYW1lKQogICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURCS2V5
UGF0aChvYmplY3RTdG9yZU1ldGFkYXRhLmtleVBhdGgpKQogICAgICAgICAgICAgICAgIC5zZXRB
dXRvSW5jcmVtZW50KG9iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCkKLSAgICAgICAg
ICAgICAgICAuc2V0SW5kZXhlcyhpbmRleGVzKTsKKyAgICAgICAgICAgICAgICAuc2V0SW5kZXhl
cyhXVEY6Om1vdmUoaW5kZXhlcykpCisgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAg
ICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVtKG9iamVjdFN0b3JlKTsKKyAgICAgICAgICAg
IG9iamVjdFN0b3Jlcy0+YWRkSXRlbShXVEY6Om1vdmUob2JqZWN0U3RvcmUpKTsKICAgICAgICAg
fQogCi0gICAgICAgIFJlZlB0cjxEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM+IHJlc3VsdCA9IERh
dGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRlKCkKKyAgICAgICAgUmVmPERhdGFiYXNlV2l0
aE9iamVjdFN0b3Jlcz4gcmVzdWx0ID0gRGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzOjpjcmVhdGUo
KQogICAgICAgICAgICAgLnNldE5hbWUoZGF0YWJhc2VNZXRhZGF0YS5uYW1lKQogICAgICAgICAg
ICAgLnNldFZlcnNpb24oZGF0YWJhc2VNZXRhZGF0YS52ZXJzaW9uKQotICAgICAgICAgICAgLnNl
dE9iamVjdFN0b3JlcyhvYmplY3RTdG9yZXMpOworICAgICAgICAgICAgLnNldE9iamVjdFN0b3Jl
cyhXVEY6Om1vdmUob2JqZWN0U3RvcmVzKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAKLSAg
ICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKHJlc3VsdCk7CisgICAgICAgIG1f
cmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUocmVzdWx0KSk7CiAgICAgfQog
Ci0gICAgdmlydHVhbCBSZXF1ZXN0Q2FsbGJhY2sqIHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRl
IHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgdmlydHVhbCBSZXF1ZXN0
Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENh
bGxiYWNrLmdldCgpOyB9CiBwcml2YXRlOgotICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+
IHJlcXVlc3RDYWxsYmFjaykKKyAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UoY29udGV4dCkKLSAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spIHsgfQotICAgIFJlZlB0cjxSZXF1
ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgICAgICwgbV9yZXF1
ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpIHsgfQorICAgIFJlZjxSZXF1
ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCi1zdGF0aWMgUGFz
c1JlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yT2JqZWN0
KiBrZXkpCitzdGF0aWMgUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChJ
bnNwZWN0b3JPYmplY3QqIGtleSkKIHsKICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXk7CiAKQEAg
LTM1Miw3ICszNjEsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNw
ZWN0b3JPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBrZXkpCiAgICAgICAgIGlkYktleSA9IElEQktl
eTo6Y3JlYXRlRGF0ZShkYXRlKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gYXJyYXlUeXBlKSB7
CiAgICAgICAgIElEQktleTo6S2V5QXJyYXkga2V5QXJyYXk7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJyYXkgPSBrZXktPmdldEFycmF5KCJhcnJheSIpOworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OworICAgICAgICBpZiAoIWtleS0+Z2V0QXJyYXkoImFy
cmF5IiwgYXJyYXkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBhcnJheS0+Z2V0KGkpOwogICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwpAQCAtMzY3LDE2ICszNzgsMjAgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rv
ck9iamVjdCoga2V5KQogICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOwogfQogCi1zdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoSW5zcGVjdG9y
T2JqZWN0KiBrZXlSYW5nZSkKK3N0YXRpYyBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdl
RnJvbUtleVJhbmdlKEluc3BlY3Rvck9iamVjdCoga2V5UmFuZ2UpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbG93ZXIgPSBrZXlSYW5nZS0+Z2V0T2JqZWN0KCJsb3dlciIpOwotICAg
IFJlZlB0cjxJREJLZXk+IGlkYkxvd2VyID0gbG93ZXIgPyBpZGJLZXlGcm9tSW5zcGVjdG9yT2Jq
ZWN0KGxvd2VyLmdldCgpKSA6IG51bGxwdHI7Ci0gICAgaWYgKGxvd2VyICYmICFpZGJMb3dlcikK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb3dlcjsKKyAgICBpZiAoIWtleVJhbmdlLT5n
ZXRPYmplY3QoImxvd2VyIiwgbG93ZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBS
ZWZQdHI8SURCS2V5PiBpZGJMb3dlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIu
Z2V0KCkpOworICAgIGlmICghaWRiTG93ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdXBwZXIgPSBrZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1
cHBlciIpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyID0gdXBwZXIgPyBpZGJLZXlGcm9t
SW5zcGVjdG9yT2JqZWN0KHVwcGVyLmdldCgpKSA6IG51bGxwdHI7Ci0gICAgaWYgKHVwcGVyICYm
ICFpZGJVcHBlcikKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB1cHBlcjsKKyAgICBpZiAo
IWtleVJhbmdlLT5nZXRPYmplY3QoInVwcGVyIiwgdXBwZXIpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJVcHBlciA9IGlkYktleUZyb21JbnNwZWN0b3JP
YmplY3QodXBwZXIuZ2V0KCkpOworICAgIGlmICghaWRiVXBwZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgYm9vbCBsb3dlck9wZW47CkBAIC0zODksMTcgKzQwNCwxNiBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoSW5zcGVj
dG9yT2JqZWN0KiBrZXlSYW5nZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBJREJLZXlS
YW5nZTo6VXBwZXJCb3VuZFR5cGUgdXBwZXJCb3VuZFR5cGUgPSB1cHBlck9wZW4gPyBJREJLZXlS
YW5nZTo6VXBwZXJCb3VuZE9wZW4gOiBJREJLZXlSYW5nZTo6VXBwZXJCb3VuZENsb3NlZDsKIAot
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRl
KGlkYkxvd2VyLCBpZGJVcHBlciwgbG93ZXJCb3VuZFR5cGUsIHVwcGVyQm91bmRUeXBlKTsKLSAg
ICByZXR1cm4gaWRiS2V5UmFuZ2UucmVsZWFzZSgpOworICAgIHJldHVybiBJREJLZXlSYW5nZTo6
Y3JlYXRlKGlkYkxvd2VyLCBpZGJVcHBlciwgbG93ZXJCb3VuZFR5cGUsIHVwcGVyQm91bmRUeXBl
KTsKIH0KIAogY2xhc3MgRGF0YUxvYWRlcjsKIAogY2xhc3MgT3BlbkN1cnNvckNhbGxiYWNrIDog
cHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9w
ZW5DdXJzb3JDYWxsYmFjaz4gY3JlYXRlKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBQ
YXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaywgaW50IHNraXBD
b3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxPcGVuQ3Vyc29yQ2FsbGJh
Y2s+IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPFJlcXVlc3REYXRh
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdl
U2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlbkN1cnNvckNhbGxi
YWNrKGluamVjdGVkU2NyaXB0LCByZXF1ZXN0Q2FsbGJhY2ssIHNraXBDb3VudCwgcGFnZVNpemUp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3BlbkN1cnNvckNhbGxiYWNrKGluamVj
dGVkU2NyaXB0LCBXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgc2tpcENvdW50LCBwYWdlU2l6
ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfk9wZW5DdXJzb3JDYWxsYmFjaygpIHsgfQpAQCAt
NDU4LDggKzQ3Miw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPERhdGFFbnRyeT4gZGF0YUVu
dHJ5ID0gRGF0YUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldEtleShtX2luamVjdGVk
U2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT5rZXkoKSwgU3RyaW5nKCkpKQogICAgICAgICAg
ICAgLnNldFByaW1hcnlLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGlkYkN1cnNvci0+
cHJpbWFyeUtleSgpLCBTdHJpbmcoKSkpCi0gICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3Rl
ZFNjcmlwdC53cmFwT2JqZWN0KGlkYkN1cnNvci0+dmFsdWUoKSwgU3RyaW5nKCkpKTsKLSAgICAg
ICAgbV9yZXN1bHQtPmFkZEl0ZW0oZGF0YUVudHJ5KTsKKyAgICAgICAgICAgIC5zZXRWYWx1ZSht
X2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT52YWx1ZSgpLCBTdHJpbmcoKSkp
CisgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICBtX3Jlc3VsdC0+YWRkSXRlbShXVEY6
Om1vdmUoZGF0YUVudHJ5KSk7CiAKICAgICB9CiAKQEAgLTQ2Nyw0MSArNDgyLDQwIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIGlmICghbV9yZXF1ZXN0Q2FsbGJhY2stPmlzQWN0aXZlKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2Vz
cyhtX3Jlc3VsdC5yZWxlYXNlKCksIGhhc01vcmUpOworICAgICAgICBtX3JlcXVlc3RDYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoV1RGOjptb3ZlKG1fcmVzdWx0KSwgaGFzTW9yZSk7CiAgICAgfQogCiBw
cml2YXRlOgotICAgIE9wZW5DdXJzb3JDYWxsYmFjayhJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGlu
dCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIE9wZW5DdXJzb3JDYWxsYmFjayhJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYg
cmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKICAgICAg
ICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQog
ICAgICAgICAsIG1faW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHQpCi0gICAgICAgICwgbV9y
ZXF1ZXN0Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKQorICAgICAgICAsIG1fcmVxdWVzdENhbGxi
YWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKQogICAgICAgICAsIG1fc2tpcENvdW50KHNr
aXBDb3VudCkKICAgICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQorICAgICAgICAsIG1fcmVz
dWx0KEFycmF5PERhdGFFbnRyeT46OmNyZWF0ZSgpKQogICAgIHsKLSAgICAgICAgbV9yZXN1bHQg
PSBBcnJheTxEYXRhRW50cnk+OjpjcmVhdGUoKTsKICAgICB9CiAgICAgSW5qZWN0ZWRTY3JpcHQg
bV9pbmplY3RlZFNjcmlwdDsKLSAgICBSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1
ZXN0Q2FsbGJhY2s7CisgICAgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxi
YWNrOwogICAgIGludCBtX3NraXBDb3VudDsKICAgICB1bnNpZ25lZCBtX3BhZ2VTaXplOwotICAg
IFJlZlB0cjxBcnJheTxEYXRhRW50cnk+PiBtX3Jlc3VsdDsKKyAgICBSZWY8QXJyYXk8RGF0YUVu
dHJ5Pj4gbV9yZXN1bHQ7CiB9OwogCiBjbGFzcyBEYXRhTG9hZGVyIDogcHVibGljIEV4ZWN1dGFi
bGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFMb2Fk
ZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFJl
cXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQm
IGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBpbmRleE5hbWUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlLCBpbnQg
c2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAgICBzdGF0aWMgUmVmPERhdGFMb2FkZXI+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3Rl
ZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5k
ZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYgaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQs
IHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
YXRhTG9hZGVyKGNvbnRleHQsIHJlcXVlc3RDYWxsYmFjaywgaW5qZWN0ZWRTY3JpcHQsIG9iamVj
dFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSkp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhTG9hZGVyKGNvbnRleHQsIFdURjo6
bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVOYW1lLCBp
bmRleE5hbWUsIFdURjo6bW92ZShpZGJLZXlSYW5nZSksIHNraXBDb3VudCwgcGFnZVNpemUpKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5EYXRhTG9hZGVyKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBwcnBEYXRhYmFzZSkgb3ZlcnJpZGUK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShSZWZQdHI8SURCRGF0YWJhc2U+JiYgZGF0YWJhc2Up
IG92ZXJyaWRlCiAgICAgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNl
ID0gcHJwRGF0YWJhc2U7Ci0gICAgICAgIGlmICghcmVxdWVzdENhbGxiYWNrKCktPmlzQWN0aXZl
KCkpCisgICAgICAgIGlmICghcmVxdWVzdENhbGxiYWNrKCkuaXNBY3RpdmUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlv
biA9IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoY29udGV4dCgpLCBpZGJEYXRhYmFzZS5nZXQoKSwg
bV9vYmplY3RTdG9yZU5hbWUpOworICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRy
YW5zYWN0aW9uID0gdHJhbnNhY3Rpb25Gb3JEYXRhYmFzZShjb250ZXh0KCksIGRhdGFiYXNlLmdl
dCgpLCBtX29iamVjdFN0b3JlTmFtZSk7CiAgICAgICAgIGlmICghaWRiVHJhbnNhY3Rpb24pIHsK
ICAgICAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kRmFpbHVyZSgiQ291bGQgbm90IGdl
dCB0cmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTEyLDcgKzUyNiw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxPcGVuQ3Vyc29yQ2FsbGJhY2s+IG9wZW5DdXJzb3JDYWxsYmFjayA9IE9wZW5DdXJzb3JDYWxs
YmFjazo6Y3JlYXRlKG1faW5qZWN0ZWRTY3JpcHQsIG1fcmVxdWVzdENhbGxiYWNrLCBtX3NraXBD
b3VudCwgbV9wYWdlU2l6ZSk7CisgICAgICAgIFJlZjxPcGVuQ3Vyc29yQ2FsbGJhY2s+IG9wZW5D
dXJzb3JDYWxsYmFjayA9IE9wZW5DdXJzb3JDYWxsYmFjazo6Y3JlYXRlKG1faW5qZWN0ZWRTY3Jp
cHQsIG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSwgbV9za2lwQ291bnQsIG1fcGFnZVNpemUp
OwogCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBSZWZQdHI8SURCUmVx
dWVzdD4gaWRiUmVxdWVzdDsKQEAgLTUyMywyMyArNTM3LDIzIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlkYlJlcXVlc3Qg
PSBpZGJJbmRleC0+b3BlbkN1cnNvcihjb250ZXh0KCksIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
KG1faWRiS2V5UmFuZ2UpLCBlYyk7CisgICAgICAgICAgICBpZGJSZXF1ZXN0ID0gaWRiSW5kZXgt
Pm9wZW5DdXJzb3IoY29udGV4dCgpLCBtX2lkYktleVJhbmdlLmNvcHlSZWYoKSwgZWMpOwogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGlkYlJlcXVlc3QgPSBpZGJPYmplY3RTdG9yZS0+b3Bl
bkN1cnNvcihjb250ZXh0KCksIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+KG1faWRiS2V5UmFuZ2Up
LCBlYyk7Ci0gICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LnN1Y2Nlc3NFdmVudCwgb3BlbkN1cnNvckNhbGxiYWNrLCBmYWxzZSk7CisgICAgICAgICAgICBp
ZGJSZXF1ZXN0ID0gaWRiT2JqZWN0U3RvcmUtPm9wZW5DdXJzb3IoY29udGV4dCgpLCBtX2lkYktl
eVJhbmdlLmNvcHlSZWYoKSwgZWMpOworICAgICAgICBpZGJSZXF1ZXN0LT5hZGRFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIFdURjo6bW92ZShvcGVuQ3Vyc29yQ2FsbGJh
Y2spLCBmYWxzZSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBSZXF1ZXN0Q2FsbGJhY2sqIHJlcXVl
c3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9
Ci0gICAgRGF0YUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaywg
Y29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAgICB2
aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxi
YWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2Ny
aXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5h
bWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2ln
bmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2Uoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCkKLSAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJh
Y2spCisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFj
aykpCiAgICAgICAgICwgbV9pbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKICAgICAgICAg
LCBtX29iamVjdFN0b3JlTmFtZShvYmplY3RTdG9yZU5hbWUpCiAgICAgICAgICwgbV9pbmRleE5h
bWUoaW5kZXhOYW1lKQotICAgICAgICAsIG1faWRiS2V5UmFuZ2UoaWRiS2V5UmFuZ2UpCisgICAg
ICAgICwgbV9pZGJLZXlSYW5nZShXVEY6Om1vdmUoaWRiS2V5UmFuZ2UpKQogICAgICAgICAsIG1f
c2tpcENvdW50KHNraXBDb3VudCkKICAgICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKSB7IH0K
LSAgICBSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAg
UmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogICAgIEluamVjdGVk
U2NyaXB0IG1faW5qZWN0ZWRTY3JpcHQ7CiAgICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOwog
ICAgIFN0cmluZyBtX2luZGV4TmFtZTsKQEAgLTYwNSw3ICs2MTksNyBAQCBzdGF0aWMgSURCRmFj
dG9yeSogYXNzZXJ0SURCRmFjdG9yeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERvY3VtZW50
KiBkb2N1bWVudAogICAgIHJldHVybiBpZGJGYWN0b3J5OwogfQogCi12b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2VOYW1lcyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFi
YXNlTmFtZXNDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxs
YmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdl
bnQtPmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAg
LTYyMywxMCArNjM3LDEwIEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3RE
YXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZGJSZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5zdWNjZXNzRXZlbnQsIEdldERhdGFiYXNlTmFtZXNDYWxsYmFjazo6Y3JlYXRlKHJlcXVlc3RD
YWxsYmFjaywgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvUmF3U3RyaW5nKCkpLCBmYWxz
ZSk7CisgICAgaWRiUmVxdWVzdC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50LCBHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2s6OmNyZWF0ZShXVEY6Om1vdmUocmVxdWVz
dENhbGxiYWNrKSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvUmF3U3RyaW5nKCkpLCBm
YWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFz
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhYmFzZUNh
bGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojpy
ZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRh
YmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBt
X3BhZ2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJh
bWUpOwpAQCAtNjM3LDExICs2NTEsMTEgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6
cmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3QKICAgICBp
ZiAoIWlkYkZhY3RvcnkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEYXRhYmFzZUxv
YWRlcj4gZGF0YWJhc2VMb2FkZXIgPSBEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlKGRvY3VtZW50LCBy
ZXF1ZXN0Q2FsbGJhY2spOworICAgIFJlZjxEYXRhYmFzZUxvYWRlcj4gZGF0YWJhc2VMb2FkZXIg
PSBEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlKGRvY3VtZW50LCBXVEY6Om1vdmUocmVxdWVzdENhbGxi
YWNrKSk7CiAgICAgZGF0YWJhc2VMb2FkZXItPnN0YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZU5hbWUpOwogfQogCi12b2lkIEluc3BlY3RvckluZGV4
ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBT
dHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lw
Q291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGtleVJh
bmdlLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKK3Zv
aWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0
Q2FsbGJhY2spCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdp
dGhTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTY1NCwyMiArNjY4LDIy
IEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihtYWlu
V29ybGRFeGVjU3RhdGUoZnJhbWUpKTsKIAotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5
UmFuZ2UgPSBrZXlSYW5nZSA/IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKGtleVJhbmdlLT5nZXQo
KSkgOiBudWxscHRyOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBrZXlS
YW5nZSA/IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKGtleVJhbmdlLmdldCgpKSA6IG51bGxwdHI7
CiAgICAgaWYgKGtleVJhbmdlICYmICFpZGJLZXlSYW5nZSkgewogICAgICAgICBlcnJvclN0cmlu
ZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuIG5vdCBwYXJzZSBrZXkgcmFuZ2UuIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YUxvYWRlcj4gZGF0YUxvYWRlciA9IERhdGFM
b2FkZXI6OmNyZWF0ZShkb2N1bWVudCwgcmVxdWVzdENhbGxiYWNrLCBpbmplY3RlZFNjcmlwdCwg
b2JqZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VT
aXplKTsKKyAgICBSZWY8RGF0YUxvYWRlcj4gZGF0YUxvYWRlciA9IERhdGFMb2FkZXI6OmNyZWF0
ZShkb2N1bWVudCwgV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjayksIGluamVjdGVkU2NyaXB0LCBv
YmplY3RTdG9yZU5hbWUsIGluZGV4TmFtZSwgV1RGOjptb3ZlKGlkYktleVJhbmdlKSwgc2tpcENv
dW50LCBwYWdlU2l6ZSk7CiAgICAgZGF0YUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKIGNsYXNzIENsZWFyT2Jq
ZWN0U3RvcmVMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIpOwogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFBhc3NSZWZQdHI8
Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3RhdGljIFJl
ZjxDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI+IGNyZWF0ZShSZWY8Q2xlYXJPYmplY3RTdG9yZUNh
bGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihyZXF1ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKFdURjo6bW92ZShy
ZXF1ZXN0Q2FsbGJhY2spKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q2xlYXJPYmplY3RTdG9y
ZUxpc3RlbmVyKCkgeyB9CkBAIC02OTEsMzYgKzcwNSwzNSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0KIHByaXZhdGU6Ci0gICAgQ2xl
YXJPYmplY3RTdG9yZUxpc3RlbmVyKFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNr
PiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKFJlZjxDbGVh
ck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgICAgICA6IEV2ZW50
TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgICAgICwg
bV9yZXF1ZXN0Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKQorICAgICAgICAsIG1fcmVxdWVzdENh
bGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKQogICAgIHsKICAgICB9CiAKLSAgICBS
ZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBS
ZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIAog
Y2xhc3MgQ2xlYXJPYmplY3RTdG9yZSA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlPiBjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUsIFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJh
Y2spCisgICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxD
bGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGVhck9iamVjdFN0b3JlKGNvbnRleHQsIG9iamVjdFN0
b3JlTmFtZSwgcmVxdWVzdENhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IENsZWFyT2JqZWN0U3RvcmUoY29udGV4dCwgb2JqZWN0U3RvcmVOYW1lLCBXVEY6Om1vdmUocmVx
dWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAotICAgIENsZWFyT2JqZWN0U3RvcmUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFBh
c3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCisgICAg
Q2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0
KQogICAgICAgICAsIG1fb2JqZWN0U3RvcmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKLSAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwgbV9yZXF1ZXN0
Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAgIH0KIAotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IHBycERhdGFiYXNl
KSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKFJlZlB0cjxJREJEYXRhYmFzZT4m
JiBkYXRhYmFzZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZT4g
aWRiRGF0YWJhc2UgPSBwcnBEYXRhYmFzZTsKLSAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2so
KS0+aXNBY3RpdmUoKSkKKyAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS5pc0FjdGl2ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlk
YlRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25Gb3JEYXRhYmFzZShjb250ZXh0KCksIGlkYkRhdGFi
YXNlLmdldCgpLCBtX29iamVjdFN0b3JlTmFtZSwgSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkV3Jp
dGUoKSk7CisgICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24gPSB0
cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgZGF0YWJhc2UuZ2V0KCksIG1fb2JqZWN0
U3RvcmVOYW1lLCBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgpKTsKICAgICAgICAgaWYg
KCFpZGJUcmFuc2FjdGlvbikgewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRG
YWlsdXJlKCJDb3VsZCBub3QgZ2V0IHRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC03MzgsMTYgKzc1MSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxs
YmFjay0+c2VuZEZhaWx1cmUoU3RyaW5nOjpmb3JtYXQoIkNvdWxkIG5vdCBjbGVhciBvYmplY3Qg
c3RvcmUgJyVzJzogJWQiLCBtX29iamVjdFN0b3JlTmFtZS51dGY4KCkuZGF0YSgpLCBlYykpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlkYlRyYW5zYWN0aW9uLT5h
ZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBDbGVhck9iamVjdFN0
b3JlTGlzdGVuZXI6OmNyZWF0ZShtX3JlcXVlc3RDYWxsYmFjayksIGZhbHNlKTsKKyAgICAgICAg
aWRiVHJhbnNhY3Rpb24tPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZl
bnQsIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrLmNv
cHlSZWYoKSksIGZhbHNlKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayog
cmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0
KCk7IH0KKyAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6CiAgICAg
Y29uc3QgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOwotICAgIFJlZlB0cjxDbGVhck9iamVjdFN0
b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxDbGVhck9iamVjdFN0b3Jl
Q2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAotdm9pZCBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6Y2xlYXJPYmplY3RTdG9yZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2Fs
bGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmNs
ZWFyT2JqZWN0U3RvcmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBv
YmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5maW5kRnJhbWVXaXRo
U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGFzc2VydERvY3VtZW50KGVycm9yU3RyaW5nLCBmcmFtZSk7CkBAIC03NTcsNyArNzcwLDcgQEAg
dm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6Y2xlYXJPYmplY3RTdG9yZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFMKICAgICBpZiAoIWlkYkZhY3RvcnkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZlB0cjxDbGVhck9iamVjdFN0b3JlPiBjbGVhck9iamVjdFN0b3JlID0g
Q2xlYXJPYmplY3RTdG9yZTo6Y3JlYXRlKGRvY3VtZW50LCBvYmplY3RTdG9yZU5hbWUsIHJlcXVl
c3RDYWxsYmFjayk7CisgICAgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNsZWFyT2JqZWN0U3RvcmUg
PSBDbGVhck9iamVjdFN0b3JlOjpjcmVhdGUoZG9jdW1lbnQsIG9iamVjdFN0b3JlTmFtZSwgV1RG
Ojptb3ZlKHJlcXVlc3RDYWxsYmFjaykpOwogICAgIGNsZWFyT2JqZWN0U3RvcmUtPnN0YXJ0KGlk
YkZhY3RvcnksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZU5hbWUpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5oCmluZGV4IDhhZjRlMTcuLjNiMGU5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCkBAIC01OCwxMCArNTgsMTAgQEAgcHVi
bGljOgogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCiAgICAgdmlydHVhbCB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFz
ZU5hbWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUGFzc1Jl
ZlB0cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJp
dHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBQYXNzUmVmUHRyPFJlcXVlc3RE
YXRhYmFzZUNhbGxiYWNrPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRh
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJp
bmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3Rv
cmUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGluX3NlY3VyaXR5T3JpZ2luLCBjb25zdCBT
dHJpbmcmIGluX2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RTdG9yZU5hbWUs
IFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHJlcXVlc3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzZWN1cml0eU9yaWdpbiwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+JiYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwg
UmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBrZXlSYW5nZSwgUmVm
PFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0
U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKIAog
cHJpdmF0ZToKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDM1ODllZmYuLjgzOTkwMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
Y3BwCkBAIC02ODksMTAgKzY4OSwxMCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnRJbQogICAgICAg
ICByZXNvdXJjZUFnZW50LT5kb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0Zv
ckNsaWVudChpZGVudGlmaWVyLCBjbGllbnQpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbExvYWRYSFJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRp
bmdBZ2VudHMsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBm
b3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVu
dGlhbHMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFRocmVhZGFibGVMb2FkZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29s
IGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAm
IGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQogewogICAgIGlmIChJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JSZXNvdXJjZUFnZW50KCkpCi0gICAgICAgIHJlc291cmNlQWdlbnQtPndpbGxMb2FkWEhSKGNs
aWVudCwgbWV0aG9kLCB1cmwsIGFzeW5jLCBmb3JtRGF0YSwgaGVhZGVycywgaW5jbHVkZUNyZWRl
bnRpYWxzKTsKKyAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbExvYWRYSFIoY2xpZW50LCBtZXRo
b2QsIHVybCwgYXN5bmMsIFdURjo6bW92ZShmb3JtRGF0YSksIGhlYWRlcnMsIGluY2x1ZGVDcmVk
ZW50aWFscyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsWEhS
TG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50KQpAQCAtOTE2LDcgKzkxNiw3IEBAIHN0YXRpYyBi
b29sIGlzQ29uc29sZUFzc2VydE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VU
eXBlIHR5cGUpCiB9CiAKIC8vIEZJWE1FOiBEcm9wIHRoaXMgb25jZSB3ZSBubyBsb25nZXIgZ2Vu
ZXJhdGUgc3RhY2tzIG91dHNpZGUgb2YgSW5zcGVjdG9yLgotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
c3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
cikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBNZXNzYWdlU291cmNl
IHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCB1bnNpZ25l
ZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNv
bnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAg
ICAgIGNvbnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVs
LCBtZXNzYWdlLCBjYWxsU3RhY2ssIHJlcXVlc3RJZGVudGlmaWVyKTsKQEAgLTkyNyw3ICs5Mjcs
NyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUlt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBN
ZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cywgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBpZiAoV2ViQ29uc29sZUFnZW50KiBjb25zb2xl
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICBj
b25zb2xlQWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVz
c2FnZSwgc3RhdGUsIGFyZ3VtZW50cywgcmVxdWVzdElkZW50aWZpZXIpOwpAQCAtOTQ5LDcgKzk0
OSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0CiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1l
bnRzKQogewogICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+Y291
bnQoc3RhdGUsIGFyZ3VtZW50cyk7CkBAIC05NjMsNyArOTYzLDcgQEAgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHIKICAgICAgICAgY29uc29sZUFnZW50LT5zdGFydFRpbWluZyh0aXRsZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBjb25z
dCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gc3RhY2spCit2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiB0aXRsZSwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBzdGFjaykKIHsKICAgICBpZiAo
V2ViQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndlYkNv
bnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnN0b3BUaW1pbmcodGl0bGUsIHN0
YWNrKTsKQEAgLTk3MSw3ICs5NzEsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RvcENvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydQogICAgICAg
ICB0aW1lbGluZUFnZW50LT50aW1lRW5kKGZyYW1lLCB0aXRsZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUsIFBhc3NSZWZQdHI8U2NyaXB0
QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29u
c29sZVRpbWVTdGFtcEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgRnJhbWUmIGZyYW1lLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsK
ICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIFN0cmluZyBt
ZXNzYWdlOwpAQCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpzdGFydFByb2ZpbGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVuCiAgICAg
ICAgIHRpbWVsaW5lQWdlbnQtPnN0YXJ0RnJvbUNvbnNvbGUoZXhlYywgdGl0bGUpOwogfQogCi1Q
YXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJv
ZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKK1JlZlB0cjxKU0M6OlByb2Zp
bGU+IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZ0ltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRJbnNwZWN0b3JUaW1l
bGluZUFnZW50KCkpCiAgICAgICAgIHJldHVybiB0aW1lbGluZUFnZW50LT5zdG9wRnJvbUNvbnNv
bGUoZXhlYywgdGl0bGUpOwpAQCAtOTk0LDcgKzk5NCw3IEBAIFBhc3NSZWZQdHI8SlNDOjpQcm9m
aWxlPiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmdJbXBsKEluc3RydW1l
bnRpCiB9CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3Zv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2VJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJlZlB0cjxEYXRhYmFzZT4mJiBkYXRh
YmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKQogewogICAgIGlmICghaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JF
bnZpcm9ubWVudCgpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTEwNyw0MCArMTEwNyw0MCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
U2VuZFdlYlNvY2tldEZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZXNzaW9uQ3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQordm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewogICAg
IGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9u
Q3JlYXRlZChzZXNzaW9uKTsKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25DcmVhdGVkKFdU
Rjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZXNzaW9uTG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsKICAgICBp
ZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbkxv
YWRlZChzZXNzaW9uKTsKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25Mb2FkZWQoV1RGOjpt
b3ZlKHNlc3Npb24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Np
b25Nb2RpZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywg
UGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnNlc3Npb25Nb2RpZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsKICAgICBp
ZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbk1v
ZGlmaWVkKHNlc3Npb24pOworICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbk1vZGlmaWVkKFdU
Rjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZWdtZW50Q3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK3ZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNl
Z21lbnQpCiB7CiAgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKLSAgICAgICAgcmVwbGF5
QWdlbnQtPnNlZ21lbnRDcmVhdGVkKHNlZ21lbnQpOworICAgICAgICByZXBsYXlBZ2VudC0+c2Vn
bWVudENyZWF0ZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
c3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21l
bnQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNl
c3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7CiAgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50
KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQo
KSkKLSAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRDb21wbGV0ZWQoc2VnbWVudCk7CisgICAg
ICAgIHJlcGxheUFnZW50LT5zZWdtZW50Q29tcGxldGVkKFdURjo6bW92ZShzZWdtZW50KSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNl
c3Npb25TZWdtZW50PiBzZWdtZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
Z21lbnRMb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMs
IFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewogICAgIGlmIChJbnNw
ZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3Bl
Y3RvclJlcGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5zZWdtZW50TG9hZGVkKHNl
Z21lbnQpOworICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVudExvYWRlZChXVEY6Om1vdmUoc2Vn
bWVudCkpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudFVubG9h
ZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmlu
ZGV4IGQ3Y2FhNTkuLjMyMjE4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTE4Niw3ICsxODYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZGluZyhGcmFtZSosIERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CiAgICAgc3Rh
dGljIHZvaWQgZGlkRmFpbExvYWRpbmcoRnJhbWUqLCBEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgIHN0YXRpYyB2b2lk
IGRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KERvY3VtZW50
JiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kik7Ci0g
ICAgc3RhdGljIHZvaWQgd2lsbExvYWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBib29sLCBQYXNz
UmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIGJvb2wpOworICAgIHN0YXRp
YyB2b2lkIHdpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgYm9vbCwgUmVmUHRyPEZvcm1E
YXRhPiYmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9vbCk7CiAgICAgc3RhdGljIHZvaWQgZGlk
RmFpbFhIUkxvYWRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJD
bGllbnQqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRGaW5pc2hYSFJMb2FkaW5nKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIsIHVuc2lnbmVkIHNl
bmRDb2x1bW5OdW1iZXIpOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVYSFJSZXNwb25zZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTIx
MywxOCArMjEzLDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRXcml0ZUhUTUwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgdW5zaWduZWQgZW5kTGluZSk7CiAK
ICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ugd2Ugbm8gbG9uZ2VyIGdlbmVyYXRlIHN0YWNrcyBv
dXRzaWRlIG9mIEluc3BlY3Rvci4KLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
KFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Ci0gICAgc3RhdGljIHZvaWQgYWRk
TWVzc2FnZVRvQ29uc29sZShQYWdlJiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVu
dGlmaWVyID0gMCk7CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlJiwg
TWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9D
b25zb2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0QXJndW1lbnRzPiYmLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7
CiAgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlJiwgTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIgPSAwKTsKIAogICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRvIFNjcmlwdEFyZ3VtZW50
cyB0byBtYXRjaCBub24td29ya2VyIGNvbnRleHQuCi0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2Fn
ZVRvQ29uc29sZShXb3JrZXJHbG9iYWxTY29wZSosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBl
LCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAw
KTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3Bl
KiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIHVuc2lnbmVk
IGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdl
VG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUs
IE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhl
Y1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsK
IAotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudChQYWdlJiwgSlNDOjpFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7CisgICAgc3RhdGljIHZvaWQg
Y29uc29sZUNvdW50KFBhZ2UmLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4mJik7CiAgICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nKEZy
YW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIHZvaWQgc3RvcENvbnNvbGVU
aW1pbmcoRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0Q2FsbFN0YWNrPik7Ci0gICAgc3RhdGljIHZvaWQgY29uc29sZVRpbWVTdGFtcChGcmFt
ZSYsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMg
dm9pZCBzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJik7CisgICAgc3RhdGljIHZvaWQgY29uc29s
ZVRpbWVTdGFtcChGcmFtZSYsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7
CiAKICAgICBzdGF0aWMgdm9pZCBkaWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRG9jdW1lbnQqLCBp
bnQgY2FsbGJhY2tJZCk7CiAgICAgc3RhdGljIHZvaWQgZGlkQ2FuY2VsQW5pbWF0aW9uRnJhbWUo
RG9jdW1lbnQqLCBpbnQgY2FsbGJhY2tJZCk7CkBAIC0yMzIsMTAgKzIzMiwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGlkRmlyZUFuaW1hdGlvbkZyYW1lKGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCiAgICAgc3RhdGljIHZvaWQgc3RhcnRQcm9maWxpbmco
UGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiBzdG9wUHJvZmlsaW5nKFBhZ2UmLCBKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpQcm9m
aWxlPiBzdG9wUHJvZmlsaW5nKFBhZ2UmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYg
dGl0bGUpOwogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICBzdGF0aWMgdm9pZCBkaWRP
cGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2U+
LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24pOworICAgIHN0YXRpYyB2b2lkIGRpZE9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogI2VuZGlmCiAKICAgICBz
dGF0aWMgdm9pZCBkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5
cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFnZSopOwpAQCAtMjQ2LDEzICsyNDYsMTMgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHdpbGxFdmFsdWF0ZVdvcmtlclNjcmlwdChXb3JrZXJHbG9iYWxT
Y29wZSosIGludCB3b3JrZXJUaHJlYWRTdGFydE1vZGUpOwogCiAjaWYgRU5BQkxFKFdFQl9SRVBM
QVkpCi0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoUGFnZSYsIFBhc3NSZWZQdHI8UmVw
bGF5U2Vzc2lvbj4pOwotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2FkZWQoUGFnZSYsIFBhc3NS
ZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOwotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Nb2RpZmllZChQ
YWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7CisgICAgc3RhdGljIHZvaWQgc2Vzc2lv
bkNyZWF0ZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXNzaW9uTG9hZGVkKFBhZ2UmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJik7CisgICAgc3Rh
dGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkKFBhZ2UmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJik7
CiAKLSAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q3JlYXRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4pOwotICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDb21wbGV0ZWQoUGFn
ZSYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKLSAgICBzdGF0aWMgdm9pZCBz
ZWdtZW50TG9hZGVkKFBhZ2UmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7Cisg
ICAgc3RhdGljIHZvaWQgc2VnbWVudENyZWF0ZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9u
U2VnbWVudD4mJik7CisgICAgc3RhdGljIHZvaWQgc2VnbWVudENvbXBsZXRlZChQYWdlJiwgUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50TG9h
ZGVkKFBhZ2UmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYpOwogICAgIHN0YXRpYyB2
b2lkIHNlZ21lbnRVbmxvYWRlZChQYWdlJik7CiAKICAgICBzdGF0aWMgdm9pZCBjYXB0dXJlU3Rh
cnRlZChQYWdlJik7CkBAIC0zODYsNyArMzg2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICBz
dGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CiAgICAgc3RhdGljIHZvaWQgZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRp
bmdGb3JDbGllbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqKTsKLSAgICBzdGF0aWMgdm9pZCB3aWxsTG9h
ZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBib29sLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29u
c3QgSFRUUEhlYWRlck1hcCYsIGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHdpbGxMb2FkWEhSSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFVSTCYsIGJvb2wsIFJlZlB0cjxGb3JtRGF0YT4mJiwgY29uc3QgSFRUUEhl
YWRlck1hcCYsIGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIGRpZEZhaWxYSFJMb2FkaW5nSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwogICAgIHN0YXRp
YyB2b2lkIGRpZEZpbmlzaFhIUkxvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVS
TCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIsIHVuc2lnbmVkIHNlbmRDb2x1bW5OdW1iZXIpOwog
ICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVYSFJSZXNwb25zZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC00MTIsMTYgKzQxMiwxNiBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFdy
aXRlSFRNTEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIHVuc2lnbmVkIHN0YXJ0TGluZSwgRnJh
bWUqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRXcml0ZUhUTUxJbXBsKGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYsIHVuc2lnbmVkIGVuZExpbmUpOwogCi0gICAgc3RhdGljIHZv
aWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
SlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiwg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgc3RhdGljIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VTb3VyY2UsIE1l
c3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpFeGVj
U3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIpOwogICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNv
bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKIAogICAgIC8vIEZJWE1F
OiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJhdGUgc3RhY2tzIG91dHNpZGUgb2YgSW5z
cGVjdG9yLgotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s+LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCBh
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIpOwogCi0gICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
QXJndW1lbnRzPik7CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpOwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGlj
IHZvaWQgc3RvcENvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYs
IGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s+KTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiwgRnJhbWUmLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7
CisgICAgc3RhdGljIHZvaWQgc3RvcENvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmLCBGcmFtZSYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dENhbGxTdGFjaz4mJik7CisgICAgc3RhdGljIHZvaWQgY29uc29sZVRpbWVTdGFtcEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiYmKTsKIAogICAgIHN0YXRpYyB2b2lkIGRpZFJlcXVlc3RBbmltYXRpb25GcmFtZUltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYsIGludCBjYWxsYmFja0lkLCBGcmFtZSopOwogICAgIHN0YXRp
YyB2b2lkIGRpZENhbmNlbEFuaW1hdGlvbkZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwg
aW50IGNhbGxiYWNrSWQsIEZyYW1lKik7CkBAIC00MjksMTAgKzQyOSwxMCBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIGRpZEZpcmVBbmltYXRpb25GcmFtZUltcGwoY29uc3QgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBzdGFydFByb2ZpbGlu
Z0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
JiB0aXRsZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiBzdG9wUHJvZmls
aW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmIHRpdGxlKTsKKyAgICBzdGF0aWMgUmVmUHRyPEpTQzo6UHJvZmlsZT4gc3RvcFByb2ZpbGlu
Z0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
JiB0aXRsZSk7CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHN0YXRpYyB2b2lkIGRp
ZE9wZW5EYXRhYmFzZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8RGF0YWJh
c2U+LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pOworICAgIHN0YXRpYyB2b2lkIGRpZE9wZW5EYXRhYmFzZUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYsIFJlZlB0cjxEYXRhYmFzZT4mJiwgY29uc3QgU3RyaW5nJiBkb21haW4s
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKICNlbmRpZgogCiAg
ICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFnZSop
OwpAQCAtNDQyLDEzICs0NDIsMTMgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB3b3JrZXJH
bG9iYWxTY29wZVRlcm1pbmF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBXb3JrZXJHbG9i
YWxTY29wZVByb3h5Kik7CiAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBzdGF0aWMgdm9p
ZCBzZXNzaW9uQ3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8UmVw
bGF5U2Vzc2lvbj4pOwotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2FkZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+KTsKLSAgICBzdGF0aWMgdm9p
ZCBzZXNzaW9uTW9kaWZpZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBQYXNzUmVmUHRyPFJl
cGxheVNlc3Npb24+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXNzaW9uTG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNl
c3Npb24+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Nb2RpZmllZEltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKIAotICAgIHN0YXRpYyB2b2lk
IHNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4pOwotICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDb21wbGV0ZWRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7
Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudExvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYs
IFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICBzdGF0aWMgdm9pZCBzZWdt
ZW50Q3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFJlZlB0cjxSZXBsYXlTZXNzaW9u
U2VnbWVudD4mJik7CisgICAgc3RhdGljIHZvaWQgc2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJik7CisgICAgc3Rh
dGljIHZvaWQgc2VnbWVudExvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFJlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4mJik7CiAgICAgc3RhdGljIHZvaWQgc2VnbWVudFVubG9hZGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJik7CiAKICAgICBzdGF0aWMgdm9pZCBjYXB0dXJlU3Rh
cnRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYpOwpAQCAtMTM4NiwxMSArMTM4NiwxMSBAQCBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvY3VtZW50VGhyZWFkYWJsZUxv
YWRlclN0YXJ0ZWRMb2FkaW5nRm9yQwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1E
YXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFs
cykKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xp
ZW50LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFJl
ZlB0cjxGb3JtRGF0YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywg
Ym9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICB3aWxsTG9hZFhIUkltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIGNsaWVudCwgbWV0aG9kLCB1cmwsIGFzeW5jLCBmb3JtRGF0YSwg
aGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKTsKKyAgICAgICAgd2lsbExvYWRYSFJJbXBsKCpp
bnN0cnVtZW50aW5nQWdlbnRzLCBjbGllbnQsIG1ldGhvZCwgdXJsLCBhc3luYywgV1RGOjptb3Zl
KGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTShjbGllbnQpOwpAQCAtMTc5Niw3
MiArMTc5Niw3MiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNl
bmRXZWJTb2NrZXRGcmFtZShEb2N1bWVudCogZG9jdW1lbnQsCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNz
aW9uQ3JlYXRlZChQYWdlJiBwYWdlLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24p
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVkKFBh
Z2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBzZXNzaW9uQ3JlYXRlZEltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIHNlc3Npb24pOworICAgICAgICBzZXNzaW9uQ3JlYXRlZEltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIFdURjo6bW92ZShzZXNzaW9uKSk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbik7CiAjZW5kaWYKIH0K
IAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkKFBh
Z2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK2lubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRlZChQYWdlJiBwYWdlLCBSZWZQ
dHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
UGFnZShwYWdlKSkKLSAgICAgICAgc2Vzc2lvbkxvYWRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIHNlc3Npb24pOworICAgICAgICBzZXNzaW9uTG9hZGVkSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgV1RGOjptb3ZlKHNlc3Npb24pKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2Up
OwogICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmllZChQYWdlJiBwYWdlLCBQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmllZChQYWdlJiBwYWdlLCBSZWZQdHI8UmVwbGF5U2Vz
c2lvbj4mJiBzZXNzaW9uKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkK
LSAgICAgICAgc2Vzc2lvbk1vZGlmaWVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc2Vzc2lv
bik7CisgICAgICAgIHNlc3Npb25Nb2RpZmllZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIFdU
Rjo6bW92ZShzZXNzaW9uKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBV
TlVTRURfUEFSQU0oc2Vzc2lvbik7CiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZChQYWdlJiBwYWdlLCBQYXNzUmVmUHRyPFJl
cGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZChQYWdlJiBwYWdlLCBSZWZQdHI8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+JiYgc2VnbWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSkpCi0gICAgICAgIHNlZ21lbnRDcmVhdGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc2Vn
bWVudCk7CisgICAgICAgIHNlZ21lbnRDcmVhdGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywg
V1RGOjptb3ZlKHNlZ21lbnQpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAg
IFVOVVNFRF9QQVJBTShzZWdtZW50KTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWQoUGFnZSYgcGFnZSwgUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK2lubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZChQYWdlJiBwYWdlLCBSZWZQdHI8UmVwbGF5
U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBh
Z2UocGFnZSkpCi0gICAgICAgIHNlZ21lbnRDb21wbGV0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBzZWdtZW50KTsKKyAgICAgICAgc2VnbWVudENvbXBsZXRlZEltcGwoKmluc3RydW1lbnRp
bmdBZ2VudHMsIFdURjo6bW92ZShzZWdtZW50KSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShw
YWdlKTsKICAgICBVTlVTRURfUEFSQU0oc2VnbWVudCk7CiAjZW5kaWYKIH0KIAotaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkKFBhZ2UmIHBhZ2UsIFBh
c3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQpCitpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWQoUGFnZSYgcGFnZSwgUmVmUHRyPFJl
cGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
ICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JQYWdlKHBhZ2UpKQotICAgICAgICBzZWdtZW50TG9hZGVkSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgc2VnbWVudCk7CisgICAgICAgIHNlZ21lbnRMb2FkZWRJbXBsKCppbnN0cnVtZW50aW5n
QWdlbnRzLCBXVEY6Om1vdmUoc2VnbWVudCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFn
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNlZ21lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKaW5kZXggNmNiMjEyNC4uNDU1
NWRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVy
VHJlZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmlu
ZyYKICAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShlcnJvclN0
cmluZywgcmVuZGVyTGF5ZXIsIGxheWVycyk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVu
ZGVyTGF5ZXIpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJMYXllckJh
Y2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOwpAQCAtMTY2LDEzICsxNjYs
MTQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGQKICAgICAgICAgbm9kZSA9IHJlbmRlcmVyLT5w
YXJlbnQoKS0+ZWxlbWVudCgpOwogCiAgICAgLy8gQmFzaWMgc2V0IG9mIHByb3BlcnRpZXMuCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IGxheWVyT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcjo6Y3JlYXRlKCkKKyAg
ICBhdXRvIGxheWVyT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXll
cjo6Y3JlYXRlKCkKICAgICAgICAgLnNldExheWVySWQoYmluZChyZW5kZXJMYXllcikpCiAgICAg
ICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKGVycm9yU3RyaW5nLCBub2RlKSkKICAgICAgICAgLnNl
dEJvdW5kcyhidWlsZE9iamVjdEZvckludFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCkpKQogICAgICAgICAuc2V0TWVtb3J5KGJhY2tpbmctPmJhY2tpbmdTdG9yZU1lbW9y
eUVzdGltYXRlKCkpCiAgICAgICAgIC5zZXRDb21wb3NpdGVkQm91bmRzKGJ1aWxkT2JqZWN0Rm9y
SW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKSkpKQot
ICAgICAgICAuc2V0UGFpbnRDb3VudChiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnJlcGFpbnRD
b3VudCgpKTsKKyAgICAgICAgLnNldFBhaW50Q291bnQoYmFja2luZy0+Z3JhcGhpY3NMYXllcigp
LT5yZXBhaW50Q291bnQoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmIChub2RlICYm
IG5vZGUtPnNoYWRvd0hvc3QoKSkKICAgICAgICAgbGF5ZXJPYmplY3QtPnNldElzSW5TaGFkb3dU
cmVlKHRydWUpOwpAQCAtMjAxLDcgKzIwMiw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkCiAg
ICAgICAgICAgICBsYXllck9iamVjdC0+c2V0UHNldWRvRWxlbWVudCgiZmlyc3QtbGluZSIpOwog
ICAgIH0KIAotICAgIHJldHVybiBsYXllck9iamVjdDsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGxh
eWVyT2JqZWN0KTsKIH0KIAogaW50IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjppZEZvck5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQpAQCAtMjE4LDE2ICsyMTksMTcg
QEAgaW50IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjppZEZvck5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlSWQ7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCitS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdDo6Y3Jl
YXRlKCkKICAgICAgICAgLnNldFgocmVjdC54KCkpCiAgICAgICAgIC5zZXRZKHJlY3QueSgpKQog
ICAgICAgICAuc2V0V2lkdGgocmVjdC53aWR0aCgpKQotICAgICAgICAuc2V0SGVpZ2h0KHJlY3Qu
aGVpZ2h0KCkpLnJlbGVhc2UoKTsKKyAgICAgICAgLnNldEhlaWdodChyZWN0LmhlaWdodCgpKQor
ICAgICAgICAucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpy
ZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
Q29tcG9zaXRpbmdSZWFzb25zPiYgY29tcG9zaXRpbmdSZWFzb25zKQordm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGxheWVySWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4mIGNvbXBvc2l0aW5nUmVhc29uc1Jl
c3VsdCkKIHsKICAgICBjb25zdCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBtX2lkVG9MYXll
ci5nZXQobGF5ZXJJZCk7CiAKQEAgLTIzNyw3ICsyMzksNyBAQCB2b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JT
dHJpbgogICAgIH0KIAogICAgIENvbXBvc2l0aW5nUmVhc29ucyByZWFzb25zQml0bWFzayA9IHJl
bmRlckxheWVyLT5jb21wb3NpdG9yKCkucmVhc29uc0ZvckNvbXBvc2l0aW5nKCpyZW5kZXJMYXll
cik7Ci0gICAgY29tcG9zaXRpbmdSZWFzb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJU
cmVlOjpDb21wb3NpdGluZ1JlYXNvbnM6OmNyZWF0ZSgpOworICAgIGF1dG8gY29tcG9zaXRpbmdS
ZWFzb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNv
bnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmIChyZWFzb25zQml0bWFzayAmIENvbXBv
c2l0aW5nUmVhc29uM0RUcmFuc2Zvcm0pCiAgICAgICAgIGNvbXBvc2l0aW5nUmVhc29ucy0+c2V0
VHJhbnNmb3JtM0QodHJ1ZSk7CkBAIC0zMTAsNiArMzEyLDggQEAgdm9pZCBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW4KIAogICAgIGlmIChyZWFzb25zQml0bWFzayAmIENvbXBvc2l0aW5nUmVhc29uUm9vdCkK
ICAgICAgICAgY29tcG9zaXRpbmdSZWFzb25zLT5zZXRSb290KHRydWUpOworICAgIAorICAgIGNv
bXBvc2l0aW5nUmVhc29uc1Jlc3VsdCA9IFdURjo6bW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOwog
fQogCiBTdHJpbmcgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5
ZXIqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckxheWVyVHJlZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQuaAppbmRleCA2NjMzOTMyLi4yNzRlMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaApAQCAtNzUsOCArNzUs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVy
YXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJPYmplY3QqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jik7CiAg
ICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5n
JiwgUmVuZGVyTGF5ZXIqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jik7CiAKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIo
RXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBidWlsZE9iamVjdEZvckludFJlY3QoY29uc3Qg
SW50UmVjdCYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
PiBidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5nJiwgUmVuZGVyTGF5ZXIqKTsKKyAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBidWlsZE9iamVjdEZv
ckludFJlY3QoY29uc3QgSW50UmVjdCYpOwogCiAgICAgaW50IGlkRm9yTm9kZShFcnJvclN0cmlu
ZyYsIE5vZGUqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuY3BwCmluZGV4IGM4NDc0NWMuLjI5NGMwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTMzMSw1MCArMzMxLDUwIEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKICAgICBmb3JjZVBhaW50KCk7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JQb2ludChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBvYmpl
Y3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoIngiKSwgcG9pbnQueCgpKTsKICAgICBvYmplY3Qt
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoInkiKSwgcG9pbnQueSgpKTsKLSAgICByZXR1cm4gb2Jq
ZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKG9iamVjdCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBvYmplY3Qt
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoIngiKSwgcmVjdC54KCkpOwogICAgIG9iamVjdC0+c2V0
RG91YmxlKEFTQ0lJTGl0ZXJhbCgieSIpLCByZWN0LnkoKSk7CiAgICAgb2JqZWN0LT5zZXREb3Vi
bGUoQVNDSUlMaXRlcmFsKCJ3aWR0aCIpLCByZWN0LndpZHRoKCkpOwogICAgIG9iamVjdC0+c2V0
RG91YmxlKEFTQ0lJTGl0ZXJhbCgiaGVpZ2h0IiksIHJlY3QuaGVpZ2h0KCkpOwotICAgIHJldHVy
biBvYmplY3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUob2JqZWN0KTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JRdWFkKGNvbnN0
IEZsb2F0UXVhZCYgcXVhZCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlG
b3JRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JB
cnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgYXJyYXktPnB1c2hP
YmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAxKCkpKTsKICAgICBhcnJheS0+cHVzaE9i
amVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDIoKSkpOwogICAgIGFycmF5LT5wdXNoT2Jq
ZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMygpKSk7CiAgICAgYXJyYXktPnB1c2hPYmpl
Y3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnA0KCkpKTsKLSAgICByZXR1cm4gYXJyYXkucmVs
ZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYXJyYXkpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KGNvbnN0IEhpZ2hs
aWdodCYgaGlnaGxpZ2h0KQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9ySGlnaGxpZ2h0KGNvbnN0IEhpZ2hsaWdodCYgaGlnaGxpZ2h0KQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoaWdobGlnaHQucXVhZHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIGFycmF5LT5wdXNoQXJyYXkoYnVpbGRBcnJheUZvclF1YWQoaGlnaGxp
Z2h0LnF1YWRzW2ldKSk7Ci0gICAgb2JqZWN0LT5zZXRBcnJheSgicXVhZHMiLCBhcnJheS5yZWxl
YXNlKCkpOworICAgIG9iamVjdC0+c2V0QXJyYXkoInF1YWRzIiwgV1RGOjptb3ZlKGFycmF5KSk7
CiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNvbnRlbnRDb2xvciIsIGhpZ2hsaWdodC5jb250ZW50
Q29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygiY29udGVudE91dGxp
bmVDb2xvciIsIGhpZ2hsaWdodC5jb250ZW50T3V0bGluZUNvbG9yLnNlcmlhbGl6ZWQoKSk7CiAg
ICAgb2JqZWN0LT5zZXRTdHJpbmcoInBhZGRpbmdDb2xvciIsIGhpZ2hsaWdodC5wYWRkaW5nQ29s
b3Iuc2VyaWFsaXplZCgpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygiYm9yZGVyQ29sb3IiLCBo
aWdobGlnaHQuYm9yZGVyQ29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBvYmplY3QtPnNldFN0cmlu
ZygibWFyZ2luQ29sb3IiLCBoaWdobGlnaHQubWFyZ2luQ29sb3Iuc2VyaWFsaXplZCgpKTsKLSAg
ICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKG9iamVjdCk7
CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JS
ZWdpb25IaWdobGlnaHQoRnJhbWVWaWV3KiBtYWluVmlldywgUmVuZGVyUmVnaW9uKiByZWdpb24p
CitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWdpb25IaWdo
bGlnaHQoRnJhbWVWaWV3KiBtYWluVmlldywgUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAg
RnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IHJlZ2lvbi0+ZnJhbWUoKS52aWV3KCk7CiAgICAg
aWYgKCFjb250YWluaW5nVmlldykKQEAgLTQwNiwyMCArNDA2LDIwIEBAIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWdpb25IaWdobGlnaHQoRnJhbWVW
aWV3KiBtYWluCiAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmll
dywgaW5jb21pbmdSZWN0UXVhZCk7CiAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBj
b250YWluaW5nVmlldywgb3V0Z29pbmdSZWN0UXVhZCk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZWdpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAKICAgICByZWdpb25PYmplY3QtPnNldEFycmF5KCJib3JkZXJRdWFkIiwgYnVpbGRBcnJh
eUZvclF1YWQoYm9yZGVyUmVjdFF1YWQpKTsKICAgICByZWdpb25PYmplY3QtPnNldEFycmF5KCJp
bmNvbWluZ1F1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChpbmNvbWluZ1JlY3RRdWFkKSk7CiAgICAg
cmVnaW9uT2JqZWN0LT5zZXRBcnJheSgib3V0Z29pbmdRdWFkIiwgYnVpbGRBcnJheUZvclF1YWQo
b3V0Z29pbmdSZWN0UXVhZCkpOwogCi0gICAgcmV0dXJuIHJlZ2lvbk9iamVjdC5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShyZWdpb25PYmplY3QpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KFJl
bmRlclJlZ2lvbiogcmVnaW9uLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQorc3RhdGlj
IFJlZjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KFJl
bmRlclJlZ2lvbiogcmVnaW9uLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogewogICAg
IEZyYW1lVmlldyogbWFpbkZyYW1lVmlldyA9IHJlZ2lvbi0+ZG9jdW1lbnQoKS5wYWdlKCktPm1h
aW5GcmFtZSgpLnZpZXcoKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBhcnJheSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKIAogICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxpc3Qm
IHJlZ2lvbkxpc3QgPSBmbG93VGhyZWFkLT5yZW5kZXJSZWdpb25MaXN0KCk7CiAgICAgZm9yIChh
dXRvJiBpdGVyUmVnaW9uIDogcmVnaW9uTGlzdCkgewpAQCAtNDM1LDE4ICs0MzUsMTggQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uc0hp
Z2hsaWdodChSZW5kZXJSZWdpb24KICAgICAgICAgYXJyYXktPnB1c2hPYmplY3QocmVnaW9uSGln
aGxpZ2h0T2JqZWN0LnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGFycmF5LnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGFycmF5KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJ3
aWR0aCIsIHNpemUud2lkdGgoKSk7CiAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJoZWlnaHQiLCBz
aXplLmhlaWdodCgpKTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChSZW5kZXJSZWdpb24qIHJlZ2lv
bikKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckNTU1JlZ2lv
bkNvbnRlbnRDbGlwKFJlbmRlclJlZ2lvbiogcmVnaW9uKQogewogICAgIEZyYW1lKiBjb250YWlu
aW5nRnJhbWUgPSByZWdpb24tPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWNvbnRhaW5p
bmdGcmFtZSkKQEAgLTQ2Niw5ICs0NjYsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAoUmVuZGVyUmVnaQogICAg
IEZsb2F0UXVhZCBjbGlwUXVhZCA9IHJlZ2lvbi0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJl
Y3QoZmxpcHBlZFJlZ2lvblJlY3QpKTsKICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcs
IGNvbnRhaW5pbmdWaWV3LCBjbGlwUXVhZCk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZWdpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlZ2lvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgcmVnaW9uT2JqZWN0LT5zZXRBcnJheSgicXVhZCIsIGJ1aWxkQXJyYXlGb3JRdWFkKGNsaXBR
dWFkKSk7Ci0gICAgcmV0dXJuIHJlZ2lvbk9iamVjdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdU
Rjo6bW92ZShyZWdpb25PYmplY3QpOwogfQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldFNo
b3dpbmdQYWludFJlY3RzKGJvb2wgc2hvd2luZ1BhaW50UmVjdHMpCkBAIC01MjYsMTEgKzUyNiwx
MSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZVBhaW50UmVjdHNUaW1lckZpcmVkKCkK
IAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGFpbnRSZWN0cygpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBmcmFnbWVudHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICBSZWY8SW5zcGVjdG9yQXJyYXk+IGZyYWdtZW50c0FycmF5ID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IG1fcGFpbnRSZWN0cykK
ICAgICAgICAgZnJhZ21lbnRzQXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JSZWN0KHBh
aXIuc2Vjb25kKSk7CiAKLSAgICBldmFsdWF0ZUluT3ZlcmxheShBU0NJSUxpdGVyYWwoInVwZGF0
ZVBhaW50UmVjdHMiKSwgZnJhZ21lbnRzQXJyYXkucmVsZWFzZSgpKTsKKyAgICBldmFsdWF0ZUlu
T3ZlcmxheShBU0NJSUxpdGVyYWwoInVwZGF0ZVBhaW50UmVjdHMiKSwgV1RGOjptb3ZlKGZyYWdt
ZW50c0FycmF5KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0d1dHRlcigpCkBA
IC01MzgsOSArNTM4LDkgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3V0dGVyKCkKICAg
ICBldmFsdWF0ZUluT3ZlcmxheShBU0NJSUxpdGVyYWwoImRyYXdHdXR0ZXIiKSk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvclJlbmRlcmVyRnJh
Z21lbnRzKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgY29u
ZmlnKQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JSZW5kZXJl
ckZyYWdtZW50cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaWdobGlnaHRDb25maWcm
IGNvbmZpZykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGZyYWdtZW50c0FycmF5ID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gZnJhZ21l
bnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAKICAgICBSZW5kZXJGbG93VGhy
ZWFkKiBjb250YWluaW5nRmxvd1RocmVhZCA9IHJlbmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaWYgKCFjb250YWluaW5nRmxvd1RocmVhZCkgewpAQCAtNTYyLDE4ICs1
NjIsMTggQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9y
UmVuZGVyZXJGcmFnbWVudHMoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgICAgIC8vIENvbXB1
dGUgdGhlIGhpZ2hsaWdodCBvZiB0aGUgZnJhZ21lbnQgaW5zaWRlIHRoZSBjdXJyZW50IHJlZ2lv
bi4KICAgICAgICAgICAgICAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwogICAgICAgICAgICAgICAg
IGJ1aWxkUmVuZGVyZXJIaWdobGlnaHQocmVuZGVyZXIsIHJlZ2lvbiwgY29uZmlnLCAmaGlnaGxp
Z2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVtOjpWaWV3KTsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFnbWVudE9iamVjdCA9IGJ1aWxkT2Jq
ZWN0Rm9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gZnJhZ21lbnRPYmplY3QgPSBidWlsZE9iamVjdEZvckhpZ2hsaWdodChoaWdobGln
aHQpOwogCiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY2xpcHBpbmcgYXJlYSBvZiB0
aGUgcmVnaW9uLgogICAgICAgICAgICAgICAgIGZyYWdtZW50T2JqZWN0LT5zZXRPYmplY3QoInJl
Z2lvbiIsIGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAocmVnaW9uKSk7Ci0gICAg
ICAgICAgICAgICAgZnJhZ21lbnRzQXJyYXktPnB1c2hPYmplY3QoZnJhZ21lbnRPYmplY3QucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudHNBcnJheS0+cHVzaE9iamVjdChXVEY6
Om1vdmUoZnJhZ21lbnRPYmplY3QpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChy
ZWdpb24gPT0gZW5kUmVnaW9uKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgcmV0dXJuIGZyYWdtZW50c0FycmF5LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGOjptb3ZlKGZyYWdtZW50c0FycmF5KTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQpA
QCAtNjMzLDEzICs2MzMsMTMgQEAgc3RhdGljIHZvaWQgYXBwZW5kUGF0aFNlZ21lbnQodm9pZCog
aW5mbywgY29uc3QgUGF0aEVsZW1lbnQqIHBhdGhFbGVtZW50KQogICAgIH0KIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNoYXBlT3V0c2lkZShG
cmFtZSogY29udGFpbmluZ0ZyYW1lLCBSZW5kZXJCb3gqIHJlbmRlcmVyKQorc3RhdGljIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2hhcGVPdXRzaWRlKEZyYW1lKiBjb250
YWluaW5nRnJhbWUsIFJlbmRlckJveCogcmVuZGVyZXIpCiB7CiAgICAgY29uc3QgU2hhcGVPdXRz
aWRlSW5mbyogc2hhcGVPdXRzaWRlSW5mbyA9IHJlbmRlcmVyLT5zaGFwZU91dHNpZGVJbmZvKCk7
CiAgICAgaWYgKCFzaGFwZU91dHNpZGVJbmZvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBzaGFwZU9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgTGF5b3V0UmVjdCBzaGFwZUJvdW5kcyA9IHNoYXBl
T3V0c2lkZUluZm8tPmNvbXB1dGVkU2hhcGVQaHlzaWNhbEJvdW5kaW5nQm94KCk7CiAgICAgRmxv
YXRRdWFkIHNoYXBlUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChzaGFwZUJvdW5kcykpOwogICAgIGNvbnRlbnRzUXVhZFRvUGFnZShjb250YWluaW5nRnJhbWUt
PnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLCBjb250YWluaW5nRnJhbWUtPnZpZXcoKSwgc2hh
cGVRdWFkKTsKQEAgLTY0OSwzOSArNjQ5LDM5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUoRnJhbWUqIGNvbnRhaW5pbmdGCiAg
ICAgc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0ZWRTaGFwZSgpLmJ1aWxkRGlzcGxheVBhdGhzKHBh
dGhzKTsKIAogICAgIGlmIChwYXRocy5zaGFwZS5sZW5ndGgoKSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHNoYXBlUGF0aCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAg
ICAgICAgUmVmPEluc3BlY3RvckFycmF5PiBzaGFwZVBhdGggPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgIFBhdGhBcHBseUluZm8gaW5mbzsKICAgICAgICAgaW5mby5yb290Vmll
dyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CiAgICAgICAg
IGluZm8udmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+dmlldygpOwotICAgICAgICBpbmZvLmFycmF5
ID0gc2hhcGVQYXRoLmdldCgpOworICAgICAgICBpbmZvLmFycmF5ID0gJnNoYXBlUGF0aC5nZXQo
KTsKICAgICAgICAgaW5mby5yZW5kZXJlciA9IHJlbmRlcmVyOwogICAgICAgICBpbmZvLnNoYXBl
T3V0c2lkZUluZm8gPSBzaGFwZU91dHNpZGVJbmZvOwogCiAgICAgICAgIHBhdGhzLnNoYXBlLmFw
cGx5KCZpbmZvLCAmYXBwZW5kUGF0aFNlZ21lbnQpOwogCi0gICAgICAgIHNoYXBlT2JqZWN0LT5z
ZXRBcnJheShBU0NJSUxpdGVyYWwoInNoYXBlIiksIHNoYXBlUGF0aC5yZWxlYXNlKCkpOworICAg
ICAgICBzaGFwZU9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJzaGFwZSIpLCBzaGFwZVBh
dGguY29weVJlZigpKTsKIAogICAgICAgICBpZiAocGF0aHMubWFyZ2luU2hhcGUubGVuZ3RoKCkp
IHsKICAgICAgICAgICAgIHNoYXBlUGF0aCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIGluZm8uYXJyYXkgPSBzaGFwZVBhdGguZ2V0KCk7CisgICAgICAgICAgICBpbmZv
LmFycmF5ID0gJnNoYXBlUGF0aC5nZXQoKTsKIAogICAgICAgICAgICAgcGF0aHMubWFyZ2luU2hh
cGUuYXBwbHkoJmluZm8sICZhcHBlbmRQYXRoU2VnbWVudCk7CiAKLSAgICAgICAgICAgIHNoYXBl
T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoIm1hcmdpblNoYXBlIiksIHNoYXBlUGF0aC5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgc2hhcGVPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgibWFyZ2luU2hhcGUiKSwgc2hhcGVQYXRoLmNvcHlSZWYoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICByZXR1cm4gc2hhcGVPYmplY3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1v
dmUoc2hhcGVPYmplY3QpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQorc3RhdGljIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkgfHwg
IW5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZWxlbWVudEluZm8gPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKTsKICAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LmRvY3VtZW50KCkuaXNY
SFRNTERvY3VtZW50KCk7CkBAIC03NDYsMTAgKzc0NiwxMCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoInJvbGUiLCBheE9iamVjdC0+Y29tcHV0
ZWRSb2xlU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHJldHVybiBlbGVtZW50SW5mby5yZWxlYXNl
KCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShlbGVtZW50SW5mbyk7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hsaWdo
dGVkTm9kZSgpIGNvbnN0CitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPdmVybGF5
OjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hp
Z2hsaWdodE5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzYzLDcgKzc2Myw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVj
dEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvCiAgICAgaWYgKCFoaWdobGlnaHRGcmFnbWVudHMpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGln
aGxpZ2h0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiBoaWdobGlnaHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
CiAgICAgLy8gVGhlIG1haW4gdmlldydzIHNjcm9sbCBvZmZzZXQgaXMgc2hhcmVkIGFjcm9zcyBh
bGwgcXVhZHMuCiAgICAgRnJhbWVWaWV3KiBtYWluVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52
aWV3KCk7CkBAIC03NzcsNyArNzc3LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IElu
c3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY28KICAgICAg
ICAgICAgIGhpZ2hsaWdodE9iamVjdC0+c2V0T2JqZWN0KCJlbGVtZW50SW5mbyIsIGVsZW1lbnRJ
bmZvLnJlbGVhc2UoKSk7CiAgICAgfQogICAgICAgICAKLSAgICByZXR1cm4gaGlnaGxpZ2h0T2Jq
ZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGhpZ2hsaWdodE9iamVjdCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd05vZGVIaWdobGlnaHQoKQpAQCAtODU5LDMz
ICs4NTksMzMgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojpmb3JjZVBhaW50KCkKIAogdm9pZCBJ
bnNwZWN0b3JPdmVybGF5OjpyZXNldChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0
IEludFNpemUmIGZyYW1lVmlld0Z1bGxTaXplKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc2V0RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzZXREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBy
ZXNldERhdGEtPnNldERvdWJsZSgiZGV2aWNlU2NhbGVGYWN0b3IiLCBtX3BhZ2UuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CiAgICAgcmVzZXREYXRhLT5zZXRPYmplY3QoInZpZXdwb3J0U2l6ZSIsIGJ1
aWxkT2JqZWN0Rm9yU2l6ZSh2aWV3cG9ydFNpemUpKTsKICAgICByZXNldERhdGEtPnNldE9iamVj
dCgiZnJhbWVWaWV3RnVsbFNpemUiLCBidWlsZE9iamVjdEZvclNpemUoZnJhbWVWaWV3RnVsbFNp
emUpKTsKLSAgICBldmFsdWF0ZUluT3ZlcmxheSgicmVzZXQiLCByZXNldERhdGEucmVsZWFzZSgp
KTsKKyAgICBldmFsdWF0ZUluT3ZlcmxheSgicmVzZXQiLCBXVEY6Om1vdmUocmVzZXREYXRhKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3Ry
aW5nJiBtZXRob2QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gY29tbWFuZCA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBjb21tYW5kLT5wdXNoU3RyaW5nKG1ldGhv
ZCk7CiAgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXZhbHVhdGUoU2Ny
aXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05TdHJp
bmcoKSwgJyknKSkpOwogfQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVy
bGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewotICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29tbWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICBSZWY8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgY29tbWFuZC0+cHVzaFN0cmluZyhtZXRob2QpOwogICAgIGNvbW1hbmQtPnB1
c2hTdHJpbmcoYXJndW1lbnQpOwogICAgIG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlw
dCgpLmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUobWFrZVN0cmluZygiZGlzcGF0Y2goIiwgY29t
bWFuZC0+dG9KU09OU3RyaW5nKCksICcpJykpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gYXJndW1lbnQpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5P
dmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgYXJn
dW1lbnQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gY29tbWFuZCA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBjb21tYW5kLT5wdXNoU3RyaW5nKG1ldGhvZCk7Ci0g
ICAgY29tbWFuZC0+cHVzaFZhbHVlKGFyZ3VtZW50KTsKKyAgICBjb21tYW5kLT5wdXNoVmFsdWUo
V1RGOjptb3ZlKGFyZ3VtZW50KSk7CiAgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2Ny
aXB0KCkuZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBj
b21tYW5kLT50b0pTT05TdHJpbmcoKSwgJyknKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRleCA0ZWZiNDU4Li5lNWNmZWVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKQEAgLTEyOSw3ICsxMjks
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCBpbmRpY2F0aW5nKTsK
IAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OwogCiAgICAg
dm9pZCBmcmVlUGFnZSgpOwogcHJpdmF0ZToKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXpl
JiBmcmFtZVZpZXdGdWxsU2l6ZSk7CiAgICAgdm9pZCBldmFsdWF0ZUluT3ZlcmxheShjb25zdCBT
dHJpbmcmIG1ldGhvZCk7CiAgICAgdm9pZCBldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcm
IG1ldGhvZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7Ci0gICAgdm9pZCBldmFsdWF0ZUluT3Zl
cmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiBhcmd1bWVudCk7CisgICAgdm9pZCBldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgYXJndW1lbnQp
OwogCiAgICAgUGFnZSYgbV9wYWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4
IDdlMmNiZGIuLmI5MjMzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgc3RhdGljIGJvb2wgaGFzVGV4
dENvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogICAgIHJldHVybiB0eXBl
ID09IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZSB8fCB0eXBlID09IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFn
ZUFnZW50OjpTY3JpcHRSZXNvdXJjZSB8fCB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6WEhS
UmVzb3VyY2U7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNy
ZWF0ZVhIUlRleHREZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYg
dGV4dEVuY29kaW5nTmFtZSkKK3N0YXRpYyBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3Jl
YXRlWEhSVGV4dERlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0
ZXh0RW5jb2RpbmdOYW1lKQogewogICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNv
ZGVyOwogICAgIGlmICghdGV4dEVuY29kaW5nTmFtZS5pc0VtcHR5KCkpCkBAIC0xMzAsNyArMTMw
LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlWEhSVGV4
dERlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHkKICAgICAgICAgZGVjb2RlciA9IFRleHRSZXNv
dXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9odG1sIiwgIlVURi04Iik7CiAgICAgZWxzZQogICAg
ICAgICBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwg
IlVURi04Iik7Ci0gICAgcmV0dXJuIGRlY29kZXI7CisgICAgcmV0dXJuIFdURjo6bW92ZShkZWNv
ZGVyKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVu
dChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyogcmVzdWx0LCBib29sKiBi
YXNlNjRFbmNvZGVkKQpAQCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKQogICAgIGZyYW1lLmxv
YWRlcigpLmNoYW5nZUxvY2F0aW9uKGZyYW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCks
IGZyYW1lLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCksICIiLCBMb2NrSGlzdG9yeTo6Tm8s
IExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBD
b29raWUmIGNvb2tpZSkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29v
a2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKIHsKICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0TmFtZShjb29raWUubmFtZSkKQEAgLTQzNSwxNCArNDM1LDE0IEBAIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JD
b29raWUoY29uc3QKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29v
a2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xp
c3QpCitzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENv
b2tpZT4mIGNvb2tpZXNMaXN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiBjb29raWVzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6
Y3JlYXRlKCk7CisgICAgYXV0byBjb29raWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CiAKLSAgICBmb3Ig
KGF1dG8mIGNvb2tpZSA6IGNvb2tpZXNMaXN0KQorICAgIGZvciAoY29uc3QgYXV0byYgY29va2ll
IDogY29va2llc0xpc3QpCiAgICAgICAgIGNvb2tpZXMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JD
b29raWUoY29va2llKSk7CiAKLSAgICByZXR1cm4gY29va2llczsKKyAgICByZXR1cm4gV1RGOjpt
b3ZlKGNvb2tpZXMpOwogfQogCiBzdGF0aWMgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gY2FjaGVk
UmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQpAQCAtNTk4LDcgKzU5OCw3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjCiAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6
OnNlYXJjaEluVGV4dEJ5TGluZXMoY29udGVudCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVn
ZXgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCitzdGF0aWMgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFy
Y2hSZXN1bHQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1h
dGNoZXNDb3VudCkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2Vh
cmNoUmVzdWx0OjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHVybCkKQEAgLTg5OCwxNCArODk4
LDE1IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzY3JpcHRzRW5hYmxlZChib29sIGlzRW5h
YmxlZCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0c0VuYWJsZWQoaXNFbmFibGVk
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5z
cGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1JlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWls
ZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0SWQoZnJhbWVJZChm
cmFtZSkpCiAgICAgICAgIC5zZXRMb2FkZXJJZChsb2FkZXJJZChmcmFtZS0+bG9hZGVyKCkuZG9j
dW1lbnRMb2FkZXIoKSkpCiAgICAgICAgIC5zZXRVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
LnN0cmluZygpKQogICAgICAgICAuc2V0TWltZVR5cGUoZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSkKLSAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2lu
KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0cmluZygpKTsKKyAg
ICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT50b1Jhd1N0cmluZygpKQorICAgICAgICAucmVsZWFzZSgpOwogICAgIGlmIChmcmFtZS0+
dHJlZSgpLnBhcmVudCgpKQogICAgICAgICBmcmFtZU9iamVjdC0+c2V0UGFyZW50SWQoZnJhbWVJ
ZChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKSk7CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQo
KSkgewpAQCAtOTE1LDIyICs5MTYsMjQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckYKICAgICAg
ICAgZnJhbWVPYmplY3QtPnNldE5hbWUobmFtZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1l
T2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUoZnJhbWVPYmplY3QpOwogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKK1JlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxk
T2JqZWN0Rm9yRnJhbWUoZnJhbWUpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPj4gc3VicmVzb3Vy
Y2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCi0gICAgICAgICAuc2V0RnJhbWUo
ZnJhbWVPYmplY3QpCi0gICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcyk7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxk
T2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCisgICAgICAgICAuc2V0RnJhbWUoV1RGOjpt
b3ZlKGZyYW1lT2JqZWN0KSkKKyAgICAgICAgIC5zZXRSZXNvdXJjZXMoc3VicmVzb3VyY2VzLmNv
cHlSZWYoKSkKKyAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBmb3IgKGF1dG8qIGNhY2hlZFJl
c291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPiByZXNvdXJjZU9iamVj
dCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCisg
ICAgICAgIGF1dG8gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpG
cmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFVybChjYWNoZWRSZXNvdXJj
ZS0+dXJsKCkpCiAgICAgICAgICAgICAuc2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVKc29uKCpj
YWNoZWRSZXNvdXJjZSkpCi0gICAgICAgICAgICAuc2V0TWltZVR5cGUoY2FjaGVkUmVzb3VyY2Ut
PnJlc3BvbnNlKCkubWltZVR5cGUoKSk7CisgICAgICAgICAgICAuc2V0TWltZVR5cGUoY2FjaGVk
UmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7
CiAgICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkKICAgICAgICAgICAg
IHJlc291cmNlT2JqZWN0LT5zZXRDYW5jZWxlZCh0cnVlKTsKICAgICAgICAgZWxzZSBpZiAoY2Fj
aGVkUmVzb3VyY2UtPnN0YXR1cygpID09IENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpCkBAIC05
MzgsNyArOTQxLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFt
ZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWkKICAgICAgICAgU3RyaW5nIHNv
dXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291
cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICAgICAgaWYgKCFzb3VyY2VNYXBwaW5nVVJMLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRTb3VyY2VNYXBVUkwoc291cmNl
TWFwcGluZ1VSTCk7Ci0gICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShyZXNvdXJjZU9iamVj
dCk7CisgICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShXVEY6Om1vdmUocmVzb3VyY2VPYmpl
Y3QpKTsKICAgICB9CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4
IDUzNDNhZjguLmJmMjY0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmgKQEAgLTE2Niw4ICsxNjYsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBi
b29sIG1haW5SZXNvdXJjZUNvbnRlbnQoRnJhbWUqLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0
cmluZyogcmVzdWx0KTsKICAgICBzdGF0aWMgYm9vbCBkYXRhQ29udGVudChjb25zdCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wg
d2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpOwogCi0gICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gYnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSop
OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKik7CisgICAgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7Cisg
ICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBidWls
ZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSopOwogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBJbnNw
ZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclBhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKaW5k
ZXggNzc5YmU2Mi4uOGZjNDQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlcGxheUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCkBAIC01NCw0MCArNTQsMzYgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiBidWlsZEluc3Bl
Y3Rvck9iamVjdEZvclBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlvbikKK3N0
YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4gYnVp
bGRJbnNwZWN0b3JPYmplY3RGb3JQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRp
b24pCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9z
aXRpb24+IHBvc2l0aW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBs
YXlQb3NpdGlvbjo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlZ21lbnRPZmZzZXQo
cG9zaXRpb24uc2VnbWVudE9mZnNldCkKLSAgICAgICAgLnNldElucHV0T2Zmc2V0KHBvc2l0aW9u
LmlucHV0T2Zmc2V0KTsKLQotICAgIHJldHVybiBwb3NpdGlvbk9iamVjdC5yZWxlYXNlKCk7Cisg
ICAgICAgIC5zZXRJbnB1dE9mZnNldChwb3NpdGlvbi5pbnB1dE9mZnNldCkKKyAgICAgICAgLnJl
bGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25zdCBOb25k
ZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90IG9mZnNldCkKK3N0YXRpYyBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JP
YmplY3RGb3JJbnB1dChjb25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6
ZV90IG9mZnNldCkKIHsKICAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZElucHV0ID0gRW5jb2RpbmdU
cmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46OmVuY29kZVZhbHVlKGlucHV0KTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gaW5wdXRP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0OjpjcmVhdGUo
KQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0Ojpj
cmVhdGUoKQogICAgICAgICAuc2V0VHlwZShpbnB1dC50eXBlKCkpCiAgICAgICAgIC5zZXRPZmZz
ZXQob2Zmc2V0KQotICAgICAgICAuc2V0RGF0YShlbmNvZGVkSW5wdXQuYXNPYmplY3QoKSk7Ci0K
LSAgICByZXR1cm4gaW5wdXRPYmplY3QucmVsZWFzZSgpOworICAgICAgICAuc2V0RGF0YShlbmNv
ZGVkSW5wdXQuYXNPYmplY3QoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBidWls
ZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24oUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBwcnBT
ZXNzaW9uKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNl
c3Npb24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihSZWZQdHI8UmVwbGF5U2Vzc2lv
bj4mJiBzZXNzaW9uKQogewotICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gcHJw
U2Vzc2lvbjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U2VnbWVudElk
ZW50aWZpZXI+PiBzZWdtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFNlZ21lbnRJ
ZGVudGlmaWVyPjo6Y3JlYXRlKCk7CisgICAgYXV0byBzZWdtZW50cyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFNlZ21lbnRJZGVudGlmaWVyPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1
dG8gaXQgPSBzZXNzaW9uLT5iZWdpbigpOyBpdCAhPSBzZXNzaW9uLT5lbmQoKTsgKytpdCkKICAg
ICAgICAgc2VnbWVudHMtPmFkZEl0ZW0oKCppdCktPmlkZW50aWZpZXIoKSk7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBzZXNzaW9uT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uOjpjcmVhdGUo
KQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb246
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChzZXNzaW9uLT5pZGVudGlmaWVyKCkpCiAgICAgICAg
IC5zZXRUaW1lc3RhbXAoc2Vzc2lvbi0+dGltZXN0YW1wKCkpCi0gICAgICAgIC5zZXRTZWdtZW50
cyhzZWdtZW50cy5yZWxlYXNlKCkpOwotCi0gICAgcmV0dXJuIHNlc3Npb25PYmplY3QucmVsZWFz
ZSgpOworICAgICAgICAuc2V0U2VnbWVudHMoV1RGOjptb3ZlKHNlZ21lbnRzKSkKKyAgICAgICAg
LnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vz
c2lvblN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdlYkNvcmU6OlNl
c3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCkBAIC0xMTEsNyArMTA3LDcgQEAgc3RhdGljIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9yU2VnbWVudFMKIAogY2xhc3MgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yIHsKIHB1Ymxp
YzoKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5cGU7CisgICAg
dHlwZWRlZiBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5cGU7CiAKICAgICBTZXJpYWxpemVJ
bnB1dFRvSlNPTkZ1bmN0b3IoKQogICAgICAgICA6IG1faW5wdXRzKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXQ+OjpjcmVh
dGUoKSkgeyB9CkBAIC0xMzAsMzAgKzEyNiwyOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxh
eUlucHV0Pj4gbV9pbnB1dHM7CiB9OwogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNl
Z21lbnQoUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gcHJwU2VnbWVudCkKK3N0YXRp
YyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4gYnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBz
ZWdtZW50KQogewotICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IHBy
cFNlZ21lbnQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXRRdWV1ZT4+IHF1ZXVlc09iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVw
bGF5SW5wdXRRdWV1ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcXVldWVzT2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJ
bnB1dFF1ZXVlPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PHNpemVfdD4oSW5wdXRRdWV1ZTo6Q291bnQpOyBpKyspIHsKICAgICAgICAgU2VyaWFs
aXplSW5wdXRUb0pTT05GdW5jdG9yIGNvbGxlY3RvcjsKICAgICAgICAgSW5wdXRRdWV1ZSBxdWV1
ZSA9IHN0YXRpY19jYXN0PElucHV0UXVldWU+KGkpOwotICAgICAgICBSZWZQdHI8RnVuY3Rvcklu
cHV0Q3Vyc29yPiBmdW5jdG9yQ3Vyc29yID0gRnVuY3RvcklucHV0Q3Vyc29yOjpjcmVhdGUoc2Vn
bWVudCk7CisgICAgICAgIFJlZlB0cjxGdW5jdG9ySW5wdXRDdXJzb3I+IGZ1bmN0b3JDdXJzb3Ig
PSBGdW5jdG9ySW5wdXRDdXJzb3I6OmNyZWF0ZShzZWdtZW50LmNvcHlSZWYoKSk7CiAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpS
ZXBsYXk6OlJlcGxheUlucHV0Pj4gcXVldWVJbnB1dHMgPSBmdW5jdG9yQ3Vyc29yLT5mb3JFYWNo
SW5wdXRJblF1ZXVlKHF1ZXVlLCBjb2xsZWN0b3IpOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU+IHF1ZXVlT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVhdGUoKQorICAg
ICAgICBhdXRvIHF1ZXVlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBs
YXlJbnB1dFF1ZXVlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFR5cGUoRW5jb2RpbmdUcmFp
dHM8SW5wdXRRdWV1ZT46OmVuY29kZVZhbHVlKHF1ZXVlKS5jb252ZXJ0VG88U3RyaW5nPigpKQot
ICAgICAgICAgICAgLnNldElucHV0cyhxdWV1ZUlucHV0cyk7Ci0KLSAgICAgICAgcXVldWVzT2Jq
ZWN0LT5hZGRJdGVtKHF1ZXVlT2JqZWN0LnJlbGVhc2UoKSk7CisgICAgICAgICAgICAuc2V0SW5w
dXRzKHF1ZXVlSW5wdXRzKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgcXVldWVz
T2JqZWN0LT5hZGRJdGVtKFdURjo6bW92ZShxdWV1ZU9iamVjdCkpOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiBzZWdtZW50
T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudDo6Y3Jl
YXRlKCkKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2Vn
bWVudDo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSkKICAg
ICAgICAgLnNldFRpbWVzdGFtcChzZWdtZW50LT50aW1lc3RhbXAoKSkKLSAgICAgICAgLnNldFF1
ZXVlcyhxdWV1ZXNPYmplY3QucmVsZWFzZSgpKTsKLQotICAgIHJldHVybiBzZWdtZW50T2JqZWN0
LnJlbGVhc2UoKTsKKyAgICAgICAgLnNldFF1ZXVlcyhXVEY6Om1vdmUocXVldWVzT2JqZWN0KSkK
KyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Okluc3BlY3Rv
clJlcGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQpAQCAtMzM3LDcgKzMzMSw3IEBAIHZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc3RvcENhcHR1cmluZygpOwogfQogCi12
b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHBvc2l0aW9uT2JqZWN0
LCBib29sIGZhc3RSZXBsYXkpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bv
c2l0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwb3NpdGlvbk9iamVjdCwgYm9vbCBmYXN0UmVwbGF5KQogewogICAgIFJlcGxheVBv
c2l0aW9uIHBvc2l0aW9uOwogICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldEludGVnZXIoQVND
SUlMaXRlcmFsKCJzZWdtZW50T2Zmc2V0IiksIHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKSB7CkBA
IC01MDcsNyArNTAxLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRh
dGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rvck9iamVjdEZv
clNlc3Npb24oc2Vzc2lvbik7CisgICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yU2Vzc2lvbihXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQogCiB2b2lkIEluc3BlY3Rv
clJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+JiBzZXJp
YWxpemVkT2JqZWN0KQpAQCAtNTE4LDcgKzUxMiw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdl
bnQ6OmdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQ
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KHNlZ21lbnQpOworICAgIHNlcmlhbGl6ZWRPYmplY3Qg
PSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVwbGF5QWdlbnQuaAppbmRleCAxNzNhZWE3Li45NDI5NTExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaApAQCAtOTUsNyAr
OTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0Q2FwdHVyaW5nKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BDYXB0dXJpbmcoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUb1Bvc2l0aW9uKEVycm9y
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYsIGJvb2wg
c2hvdWxkRmFzdEZvcndhcmQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUb1Bv
c2l0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYmLCBib29sIHNob3VsZEZhc3RGb3J3YXJkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRGYXN0Rm9yd2Fy
ZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUGxheWJhY2soRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGxheWJhY2soRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcAppbmRleCBlMjY0NTYwLi41YzJkYjk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xOTAs
MTYgKzE5MCwxNiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZQogICAgIGRpc2FibGUodW51c2Vk
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
ckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyBSZWY8SW5zcGVj
dG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVh
ZGVycykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJz
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmlu
ZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBoZWFkZXJzT2JqZWN0Owor
ICAgIHJldHVybiBXVEY6Om1vdmUoaGVhZGVyc09iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWlsZE9i
amVjdEZvclRpbWluZyhjb25zdCBSZXNvdXJjZUxvYWRUaW1pbmcmIHRpbWluZywgRG9jdW1lbnRM
b2FkZXIqIGxvYWRlcikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IFJlc291cmNlTG9hZFRp
bWluZyYgdGltaW5nLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKICAgICAg
ICAgLnNldE5hdmlnYXRpb25TdGFydChsb2FkZXItPnRpbWluZygpLT5uYXZpZ2F0aW9uU3RhcnQo
KSkKQEAgLTIxMyw1NiArMjEzLDU4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWlsZE9iamVjdEZvclRpCiAgICAgICAg
IC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpSZXF1ZXN0PiByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0
VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2QocmVxdWVzdC5o
dHRwTWV0aG9kKCkpCi0gICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhy
ZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpOworICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9i
amVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQorICAgICAgICAucmVs
ZWFzZSgpOwogICAgIGlmIChyZXF1ZXN0Lmh0dHBCb2R5KCkgJiYgIXJlcXVlc3QuaHR0cEJvZHko
KS0+aXNFbXB0eSgpKQogICAgICAgICByZXF1ZXN0T2JqZWN0LT5zZXRQb3N0RGF0YShyZXF1ZXN0
Lmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVxdWVzdE9iamVj
dDsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlcXVlc3RPYmplY3QpOwogfQogCi1zdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gYnVpbGRPYmpl
Y3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBE
b2N1bWVudExvYWRlciogbG9hZGVyKQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewog
ICAgIGlmIChyZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBkb3VibGUgc3RhdHVzID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZHMoKSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycyA9
IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNwb25z
ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpjcmVhdGUo
KQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXNwb25zZS51cmwoKS5zdHJp
bmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhzdGF0dXMpCiAgICAgICAgIC5zZXRTdGF0dXNUZXh0
KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCi0gICAgICAgIC5zZXRIZWFkZXJzKGhlYWRlcnMp
CisgICAgICAgIC5zZXRIZWFkZXJzKFdURjo6bW92ZShoZWFkZXJzKSkKICAgICAgICAgLnNldE1p
bWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCiAgICAgICAgIC5zZXRDb25uZWN0aW9uUmV1c2Vk
KHJlc3BvbnNlLmNvbm5lY3Rpb25SZXVzZWQoKSkKLSAgICAgICAgLnNldENvbm5lY3Rpb25JZChy
ZXNwb25zZS5jb25uZWN0aW9uSUQoKSk7CisgICAgICAgIC5zZXRDb25uZWN0aW9uSWQocmVzcG9u
c2UuY29ubmVjdGlvbklEKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICByZXNwb25zZU9i
amVjdC0+c2V0RnJvbURpc2tDYWNoZShyZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNvdXJjZVJlc3Bv
bnNlOjpTb3VyY2U6OkRpc2tDYWNoZSB8fCByZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNvdXJjZVJl
c3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZUFmdGVyVmFsaWRhdGlvbik7CiAgICAgcmVzcG9uc2VP
YmplY3QtPnNldFRpbWluZyhidWlsZE9iamVjdEZvclRpbWluZyhyZXNwb25zZS5yZXNvdXJjZUxv
YWRUaW1pbmcoKSwgbG9hZGVyKSk7CiAKLSAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Q7CisgICAg
cmV0dXJuIFdURjo6bW92ZShyZXNwb25zZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiBidWlsZE9iamVj
dEZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6Q2FjaGVkUmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZFJlc291cmNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4gcmVzb3Vy
Y2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6
Y3JlYXRlKCkKKyAgICBhdXRvIHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwoY2FjaGVk
UmVzb3VyY2UtPnVybCgpKQogICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3JQYWdlQWdlbnQ6OmNh
Y2hlZFJlc291cmNlVHlwZUpzb24oKmNhY2hlZFJlc291cmNlKSkKLSAgICAgICAgLnNldEJvZHlT
aXplKGNhY2hlZFJlc291cmNlLT5lbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAgLnNldEJvZHlTaXpl
KGNhY2hlZFJlc291cmNlLT5lbmNvZGVkU2l6ZSgpKQorICAgICAgICAucmVsZWFzZSgpOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJj
ZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNl
LT5yZXNwb25zZSgpLCBsb2FkZXIpOwotICAgIGlmIChyZXNvdXJjZVJlc3BvbnNlKQotICAgICAg
ICByZXNvdXJjZU9iamVjdC0+c2V0UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZSk7CisgICAgYXV0
byByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hl
ZFJlc291cmNlLT5yZXNwb25zZSgpLCBsb2FkZXIpOworICAgIHJlc291cmNlT2JqZWN0LT5zZXRS
ZXNwb25zZShXVEY6Om1vdmUocmVzb3VyY2VSZXNwb25zZSkpOwogCiAgICAgU3RyaW5nIHNvdXJj
ZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNl
KGNhY2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpKQog
ICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0U291cmNlTWFwVVJMKHNvdXJjZU1hcHBpbmdVUkwp
OwogCi0gICAgcmV0dXJuIHJlc291cmNlT2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUocmVz
b3VyY2VPYmplY3QpOwogfQogCiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp+SW5zcGVjdG9yUmVz
b3VyY2VBZ2VudCgpCkBAIC00ODQsOSArNDg2LDkgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50Ojpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudCh1bnMK
ICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFhIUlJlcGxheURhdGEocmVxdWVzdElkLCB4aHJSZXBs
YXlEYXRhKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUihU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25z
dCBVUkwmIHVybCwgYm9vbCBhc3luYywgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsIGNv
bnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQordm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBh
c3luYywgUmVmUHRyPEZvcm1EYXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKIHsKLSAgICBSZWZQdHI8WEhSUmVwbGF5
RGF0YT4geGhyUmVwbGF5RGF0YSA9IFhIUlJlcGxheURhdGE6OmNyZWF0ZShtZXRob2QsIHVybCwg
YXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOworICAgIFJlZlB0
cjxYSFJSZXBsYXlEYXRhPiB4aHJSZXBsYXlEYXRhID0gWEhSUmVwbGF5RGF0YTo6Y3JlYXRlKG1l
dGhvZCwgdXJsLCBhc3luYywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNy
ZWRlbnRpYWxzKTsKIAogICAgIG1fcGVuZGluZ1hIUlJlcGxheURhdGEuc2V0KGNsaWVudCwgV1RG
Ojptb3ZlKHhoclJlcGxheURhdGEpKTsKIH0KQEAgLTU1MiwyMiArNTU0LDI0IEBAIHZvaWQgSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oRG9jdW1l
bnQmIGRvY3VtZW50KQogICAgICAgICBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvciA9IGJ1
aWxkSW5pdGlhdG9yT2JqZWN0KCZkb2N1bWVudCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpi
dWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQpCitSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpi
dWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgUmVmUHRyPFNj
cmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSA9IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhKU01haW5U
aHJlYWRFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxT
dGFja1NpemVUb0NhcHR1cmUpOwogICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNrVHJhY2UtPnNp
emUoKSA+IDApIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpOworICAgICAgICBhdXRv
IGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRv
cjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQorICAgICAgICAgICAgLnJlbGVhc2UoKTsK
ICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UtPmJ1aWxk
SW5zcGVjdG9yQXJyYXkoKSk7Ci0gICAgICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Q7CisgICAg
ICAgIHJldHVybiBXVEY6Om1vdmUoaW5pdGlhdG9yT2JqZWN0KTsKICAgICB9CiAKICAgICBpZiAo
ZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpKSB7Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGluaXRp
YXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3Jl
YXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkluaXRpYXRvcjo6VHlwZTo6UGFyc2VyKTsKKyAgICAgICAgYXV0byBpbml0aWF0b3JPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCisgICAg
ICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6
OlR5cGU6OlBhcnNlcikKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGluaXRpYXRv
ck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CiAgICAgICAgIGluaXRp
YXRvck9iamVjdC0+c2V0TGluZU51bWJlcihkb2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZS5vbmVCYXNlZEludCgpKTsKLSAgICAgICAgcmV0
dXJuIGluaXRpYXRvck9iamVjdDsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShpbml0aWF0b3JP
YmplY3QpOwogICAgIH0KIAogICAgIGlmIChtX2lzUmVjYWxjdWxhdGluZ1N0eWxlICYmIG1fc3R5
bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQpAQCAtNTg3LDE4ICs1OTEsMjAgQEAgdm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdAogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kV2Vi
U29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4gcmVxdWVzdE9iamVjdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCi0gICAgICAgIC5z
ZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KSkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFr
ZVJlcXVlc3QoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVz
dGFtcCgpLCByZXF1ZXN0T2JqZWN0KTsKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUoKQorICAgICAg
ICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmll
bGRzKCkpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53
ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1
ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBXVEY6Om1vdmUocmVxdWVzdE9iamVjdCkp
OwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJl
c3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVz
cG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkK
LSAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKSkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRIYW5k
c2hha2VSZXNwb25zZVJlY2VpdmVkKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50
aWZpZXIpLCB0aW1lc3RhbXAoKSwgcmVzcG9uc2VPYmplY3QpOworICAgICAgICAuc2V0SGVhZGVy
cyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpKSkKKyAg
ICAgICAgLnJlbGVhc2UoKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0SGFu
ZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVu
dGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShyZXNwb25zZU9iamVjdCkpOwogfQogCiB2
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZENsb3NlV2ViU29ja2V0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcikKQEAgLTYwOCwyMCArNjE0LDIyIEBAIHZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogCiB2
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGZy
YW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6
OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZyYW1l
Lm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAgICAuc2V0UGF5
bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKTsKLSAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVSZWNlaXZlZChJZGVudGlmaWVy
c0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIGZyYW1lT2JqZWN0
KTsKKyAgICAgICAgLnNldFBheWxvYWREYXRhKFN0cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+d2ViU29ja2V0RnJhbWVSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJ
ZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShmcmFtZU9iamVjdCkpOwogfQog
CiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFNlbmRXZWJTb2NrZXRGcmFtZSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGZy
YW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6
OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZyYW1l
Lm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAgICAuc2V0UGF5
bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKTsKLSAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVTZW50KElkZW50aWZpZXJzRmFj
dG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgZnJhbWVPYmplY3QpOwor
ICAgICAgICAuc2V0UGF5bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxv
YWRMZW5ndGgpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT53ZWJTb2NrZXRGcmFtZVNlbnQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRp
ZmllciksIHRpbWVzdGFtcCgpLCBXVEY6Om1vdmUoZnJhbWVPYmplY3QpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvcih1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQpAQCAtNjUy
LDkgKzY2MCw5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0
cmluZyYpCiAgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoZWFkZXJzKQordm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBoZWFkZXJzKQogewotICAgIG1fZXh0cmFSZXF1ZXN0SGVhZGVy
cyA9IGhlYWRlcnM7CisgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzID0gaGVhZGVycy5jb3B5UmVm
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Z2V0UmVzcG9uc2VCb2R5KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyog
Y29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKQEAgLTc0MSw3ICs3NDksNyBAQCB2b2lkIElu
c3BlY3RvclJlc291cmNlQWdlbnQ6OnNldENhY2hlRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGNhY2hlRGlzYWJsZWQpCiAgICAgICAgIG1lbW9yeUNhY2hlKCkuZXZpY3RSZXNvdXJjZXMoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpsb2FkUmVzb3VyY2UoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLCBQYXNzUmVmUHRyPExvYWRSZXNvdXJjZUNhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3Zv
aWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywg
UmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFt
ZSA9IG1fcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAg
aWYgKCFmcmFtZSkKQEAgLTc1Myw4ICs3NjEsNiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPExvYWRSZXNvdXJjZUNhbGxiYWNr
PiBjYWxsYmFjayA9IHBycENhbGxiYWNrOwotCiAgICAgVVJMIHVybCA9IGRvY3VtZW50LT5jb21w
bGV0ZVVSTCh1cmxTdHJpbmcpOwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7CiAg
ICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKEFTQ0lJTGl0ZXJhbCgiR0VUIikpOwpAQCAtNzY2LDcg
Kzc3Miw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgb3B0aW9ucy5jcm9zc09yaWdp
blJlcXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CiAKICAgICAvLyBJbnNw
ZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IGRlbGV0ZXMgaXRzZWxmIHdoZW4gdGhlIGxvYWQg
Y29tcGxldGVzLgotICAgIEluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQqIGluc3BlY3Rv
clRocmVhZGFibGVMb2FkZXJDbGllbnQgPSBuZXcgSW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNs
aWVudChjYWxsYmFjayk7CisgICAgSW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCogaW5z
cGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCA9IG5ldyBJbnNwZWN0b3JUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KFdURjo6bW92ZShjYWxsYmFjaykpOwogCiAgICAgUmVmUHRyPERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUo
KmRvY3VtZW50LCAqaW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgcmVxdWVzdCwgb3B0
aW9ucyk7CiAgICAgaWYgKCFsb2FkZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCmluZGV4IDljMzEzM2IuLjcwMGNmMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaApA
QCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGYWlsTG9hZGluZyh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyJiwgY29uc3QgUmVzb3VyY2VFcnJvciYp
OwogICAgIHZvaWQgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVy
JiwgQ2FjaGVkUmVzb3VyY2UmKTsKICAgICB2b2lkIGRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0
YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCopOwotICAgIHZvaWQgd2lsbExvYWRYSFIoVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBQYXNz
UmVmUHRyPEZvcm1EYXRhPiBib2R5LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29s
IGluY2x1ZGVDcmVuZGVudGlhbHMpOworICAgIHZvaWQgd2lsbExvYWRYSFIoVGhyZWFkYWJsZUxv
YWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFzeW5j
LCBSZWZQdHI8Rm9ybURhdGE+JiYgYm9keSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywg
Ym9vbCBpbmNsdWRlQ3JlbmRlbnRpYWxzKTsKICAgICB2b2lkIGRpZEZhaWxYSFJMb2FkaW5nKFRo
cmVhZGFibGVMb2FkZXJDbGllbnQqKTsKICAgICB2b2lkIGRpZEZpbmlzaFhIUkxvYWRpbmcoVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VTdHJpbmcpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVhIUlJlc3BvbnNlKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC0xMTgsMTIgKzExOCwxMiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50Jik7CiAKLSAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gYnVpbGRJ
bml0aWF0b3JPYmplY3QoRG9jdW1lbnQqKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCopOwog
CiAgICAgLy8gQ2FsbGVkIGZyb20gZnJvbnRlbmQuCiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJy
b3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcm
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5WEhSKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjYW5DbGVhckJyb3dz
ZXJDYWNoZShFcnJvclN0cmluZyYsIGJvb2wqKSBvdmVycmlkZTsKQEAgLTEzMSw3ICsxMzEsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNhbkNsZWFyQnJvd3NlckNvb2tpZXMoRXJyb3JT
dHJpbmcmLCBib29sKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNv
b2tpZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FjaGVE
aXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgY2FjaGVEaXNhYmxlZCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8TG9hZFJlc291cmNlQ2FsbGJhY2s+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPExvYWRSZXNvdXJj
ZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGVuYWJsZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmlu
ZGV4IDcwZjA4ZDIuLmE0M2EzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIFJ1
bGVTb3VyY2VEYXRhTGlzdCogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0
YS5nZXQoKTsgfQogICAgIHZvaWQgc2V0U291cmNlRGF0YShzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNv
dXJjZURhdGFMaXN0Pik7CiAgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VEYXRhICE9IG51bGxwdHI7IH0KLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1
bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkKSBjb25zdDsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQp
IGNvbnN0OwogCiBwcml2YXRlOgogCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBQYXJzZWRTdHls
ZVNoZWV0OjpzZXRTb3VyY2VEYXRhKHN0ZDo6dW5pcXVlX3B0cjxSdWxlU291cmNlRGF0YUxpc3Q+
IHNvdXJjZUQKICAgICBmbGF0dGVuU291cmNlRGF0YShzb3VyY2VEYXRhLmdldCgpLCBtX3NvdXJj
ZURhdGEuZ2V0KCkpOwogfQogCi1QYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRh
PiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dAorUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0Ojpy
dWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlmICghaGFzU291
cmNlRGF0YSgpIHx8IGluZGV4ID49IG1fc291cmNlRGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTE0NCw3ICsxNDQsNyBAQCBlbnVtIE1lZGlhTGlzdFNvdXJjZSB7CiAg
ICAgTWVkaWFMaXN0U291cmNlSW1wb3J0UnVsZQogfTsKIAotc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVj
dChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIFZlY3RvcjxzaXplX3Q+KiBsaW5lRW5kaW5ncykK
K3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVp
bGRTb3VyY2VSYW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIFZlY3RvcjxzaXpl
X3Q+KiBsaW5lRW5kaW5ncykKIHsKICAgICBpZiAoIWxpbmVFbmRpbmdzKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KAog
ICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU01lZGlhPiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1lZGlhTGlzdCog
bWVkaWEsIE1lZGlhTGlzdFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhPiBi
dWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1lZGlhTGlzdCogbWVkaWEsIE1lZGlhTGlzdFNvdXJjZSBt
ZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewogICAgIC8vIE1ha2Ug
Y2VydGFpbiBjb21waWxlcnMgaGFwcHkgYnkgaW5pdGlhbGl6aW5nIHxzb3VyY2V8IHVwLWZyb250
LgogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE6OlNvdXJjZSBzb3VyY2Ug
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OklubGluZVNoZWV0
OwpAQCAtMTc4LDE4ICsxNzgsMTkgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChjb25zdCBNZWQKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
TWVkaWE+IG1lZGlhT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYTo6
Y3JlYXRlKCkKKyAgICBhdXRvIG1lZGlhT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NNZWRpYTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlhVGV4dCgp
KQotICAgICAgICAuc2V0U291cmNlKHNvdXJjZSk7CisgICAgICAgIC5zZXRTb3VyY2Uoc291cmNl
KQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKSB7
CiAgICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTb3VyY2VVUkwoc291cmNlVVJMKTsKICAgICAgICAg
bWVkaWFPYmplY3QtPnNldFNvdXJjZUxpbmUobWVkaWEtPnF1ZXJpZXMoKS0+bGFzdExpbmUoKSk7
CiAgICAgfQotICAgIHJldHVybiBtZWRpYU9iamVjdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdU
Rjo6bW92ZShtZWRpYU9iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCitzdGF0aWMgUmVmUHRy
PENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCiB7
CiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwMiwx
MCArMjAzLDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0
KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgbGlzdFJ1bGVzLmFwcGVuZChpdGVtKTsKICAgICB9Ci0gICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUobGlzdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCitzdGF0aWMgUmVmUHRy
PENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKCFy
dWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIyMiw3ICsyMjMsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxlKQogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NT
UnVsZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4qIG1l
ZGlhQXJyYXkpCitzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVsZSwg
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4mIG1lZGlhQXJyYXkpCiB7
CiAgICAgTWVkaWFMaXN0KiBtZWRpYUxpc3Q7CiAgICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHJ1
bGU7CkBAIC0yNTAsNyArMjUxLDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENT
U1J1bGUqIHJ1bGUsIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MKICAgICAgICAg
ICAgIHNvdXJjZVVSTCA9ICIiOwogCiAgICAgICAgIGlmIChtZWRpYUxpc3QgJiYgbWVkaWFMaXN0
LT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1lZGlhQXJyYXktPmFkZEl0ZW0oYnVpbGRNZWRpYU9i
amVjdChtZWRpYUxpc3QsIGlzTWVkaWFSdWxlID8gTWVkaWFMaXN0U291cmNlTWVkaWFSdWxlIDog
TWVkaWFMaXN0U291cmNlSW1wb3J0UnVsZSwgc291cmNlVVJMKSk7CisgICAgICAgICAgICBtZWRp
YUFycmF5LmFkZEl0ZW0oYnVpbGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIGlzTWVkaWFSdWxlID8g
TWVkaWFMaXN0U291cmNlTWVkaWFSdWxlIDogTWVkaWFMaXN0U291cmNlSW1wb3J0UnVsZSwgc291
cmNlVVJMKSk7CiAKICAgICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKSkKICAgICAg
ICAgICAgIHBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCk7CkBAIC0yNjYsNyAr
MjY3LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUqIHJ1bGUsIEFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MKICAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuYmFzZVVSTCgpOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSAiIjsK
LSAgICAgICAgICAgICAgICAgICAgbWVkaWFBcnJheS0+YWRkSXRlbShidWlsZE1lZGlhT2JqZWN0
KG1lZGlhTGlzdCwgc3R5bGVTaGVldC0+b3duZXJOb2RlKCkgPyBNZWRpYUxpc3RTb3VyY2VMaW5r
ZWRTaGVldCA6IE1lZGlhTGlzdFNvdXJjZUlubGluZVNoZWV0LCBzb3VyY2VVUkwpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbWVkaWFBcnJheS5hZGRJdGVtKGJ1aWxkTWVkaWFPYmplY3QobWVkaWFM
aXN0LCBzdHlsZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxpbmtlZFNoZWV0
IDogTWVkaWFMaXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBwYXJlbnRSdWxlID0gc3R5bGVTaGVldC0+b3duZXJSdWxl
KCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFJ1bGUpCkBAIC0yODIsMTIgKzI4MywxMiBA
QCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlcj4gY3JlYXRlQ1NTUGFyc2VyKERvY3Vt
ZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXI+KGRv
Y3VtZW50ID8gQ1NTUGFyc2VyQ29udGV4dCgqZG9jdW1lbnQpIDogc3RyaWN0Q1NTUGFyc2VyQ29u
dGV4dCgpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGU6
OmNyZWF0ZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFzc1JlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVl
dCkKK1JlZjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShjb25zdCBJbnNw
ZWN0b3JDU1NJZCYgc3R5bGVJZCwgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+JiYgc3R5bGUs
IEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZShzdHlsZUlkLCBzdHlsZSwgcGFyZW50U3R5bGVTaGVl
dCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclN0eWxlKHN0eWxlSWQsIFdU
Rjo6bW92ZShzdHlsZSksIHBhcmVudFN0eWxlU2hlZXQpKTsKIH0KIAotSW5zcGVjdG9yU3R5bGU6
Okluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRy
PENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRT
dHlsZVNoZWV0KQorSW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3Rv
ckNTU0lkJiBzdHlsZUlkLCBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4mJiBzdHlsZSwgSW5z
cGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCkKICAgICA6IG1fc3R5bGVJZChzdHls
ZUlkKQogICAgICwgbV9zdHlsZShzdHlsZSkKICAgICAsIG1fcGFyZW50U3R5bGVTaGVldChwYXJl
bnRTdHlsZVNoZWV0KQpAQCAtMzAwLDkgKzMwMSw5IEBAIEluc3BlY3RvclN0eWxlOjp+SW5zcGVj
dG9yU3R5bGUoKQogewogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3QKK1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJlc3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0gc3R5bGVX
aXRoUHJvcGVydGllcygpOwogICAgIGlmICghbV9zdHlsZUlkLmlzRW1wdHkoKSkKICAgICAgICAg
cmVzdWx0LT5zZXRTdHlsZUlkKG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZUlkPigpKTsKIApAQCAtMzEzLDI0ICszMTQsMjUgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHls
ZTo6YnVpbGRPYmplY3RGb3JTdHkKICAgICBpZiAoc291cmNlRGF0YSkKICAgICAgICAgcmVzdWx0
LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFu
Z2UsIG1fcGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKS5nZXQoKSkpOwogCi0gICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQog
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxk
QXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+
IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CiAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IHByb3BlcnRp
ZXM7CiAgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKIAogICAgIGZvciAo
VmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVyYXRvciBpdCA9IHByb3BlcnRpZXMu
YmVnaW4oKSwgaXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBpdCAhPSBpdEVuZDsgKytpdCkgewog
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBpdC0+
c291cmNlRGF0YTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
Q29tcHV0ZWRTdHlsZVByb3BlcnR5PiBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIGVudHJ5ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShwcm9wZXJ0eUVudHJ5Lm5hbWUpCi0gICAgICAgICAg
ICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSk7Ci0gICAgICAgIHJlc3VsdC0+YWRkSXRl
bShlbnRyeS5yZWxlYXNlKCkpOworICAgICAgICAgICAgLnNldFZhbHVlKHByb3BlcnR5RW50cnku
dmFsdWUpCisgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICByZXN1bHQtPmFkZEl0ZW0o
V1RGOjptb3ZlKGVudHJ5KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBkb2Vz
IHRoZSBmb2xsb3dpbmcgcHJlcHJvY2Vzc2luZyBvZiB8cHJvcGVydHlUZXh0fCB3aXRoIHxvdmVy
d3JpdGV8ID09IGZhbHNlIGFuZCB8aW5kZXh8IHBhc3QgdGhlIGxhc3QgYWN0aXZlIHByb3BlcnR5
OgpAQCAtNTAzLDEzICs1MDUsMTMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVBbGxQ
cm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWwKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0
eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0CitSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0
aFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5
PiBwcm9wZXJ0aWVzOwogICAgIHBvcHVsYXRlQWxsUHJvcGVydGllcygmcHJvcGVydGllcyk7CiAK
LSAgICBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+
IHByb3BlcnRpZXNPYmplY3QgPSBBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5Pjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6U2hvcnRoYW5kRW50cnk+PiBzaG9ydGhhbmRFbnRyaWVzID0gQXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgpOworICAgIGF1dG8gcHJv
cGVydGllc09iamVjdCA9IEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVy
dHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj4g
cHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhhc2hTZXQ8U3RyaW5n
PiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3RyaW5nIHByZXZpb3VzUHJpb3JpdHk7CkBAIC01MzIs
OSArNTM0LDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpCiAKICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRO
YW1lKG5hbWUubG93ZXIoKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZh
bHVlKTsKKyAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKQorICAgICAg
ICAgICAgLnJlbGVhc2UoKTsKIAotICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5hZGRJdGVtKHBy
b3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllc09iamVjdC0+YWRkSXRlbShwcm9wZXJ0eS5jb3B5
UmVmKCkpOwogCiAgICAgICAgIC8vIERlZmF1bHQgInBhcnNlZE9rIiA9PSB0cnVlLgogICAgICAg
ICBpZiAoIXByb3BlcnR5RW50cnkucGFyc2VkT2spCkBAIC02MDAsMTAgKzYwMywxMSBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxl
OjpzdHlsZVdpdGhQcm9wZXJ0aQogICAgICAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU2hvcnRoYW5kcy5jb250YWlu
cyhzaG9ydGhhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFNob3J0aGFuZHMu
YWRkKHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT4gZW50cnkgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk6
OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoc2hvcnRoYW5k
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9ydGhhbmRWYWx1ZShz
aG9ydGhhbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZEVudHJpZXMtPmFk
ZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0
VmFsdWUoc2hvcnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAucmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kRW50cmll
cy0+YWRkSXRlbShXVEY6Om1vdmUoZW50cnkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTYxNSwxMiArNjE5LDEyIEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6
OnN0eWxlV2l0aFByb3BlcnRpCiAgICAgfQogCiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRDc3NQcm9wZXJ0aWVzKHBy
b3BlcnRpZXNPYmplY3QucmVsZWFzZSgpKQotICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhz
aG9ydGhhbmRFbnRyaWVzLnJlbGVhc2UoKSkKKyAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoV1RG
Ojptb3ZlKHByb3BlcnRpZXNPYmplY3QpKQorICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhX
VEY6Om1vdmUoc2hvcnRoYW5kRW50cmllcykpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLVBh
c3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlOjpleHRyYWN0U291cmNl
RGF0YSgpIGNvbnN0CitSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlOjpl
eHRyYWN0U291cmNlRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhcmVudFN0eWxlU2hlZXQg
fHwgIW1fcGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtNzQ5LDkgKzc1Myw5IEBAIE5ld0xpbmVBbmRXaGl0ZXNwYWNl
JiBJbnNwZWN0b3JTdHlsZTo6bmV3TGluZUFuZFdoaXRlc3BhY2VEZWxpbWl0ZXJzKCkgY29uc3QK
ICAgICByZXR1cm4gbV9mb3JtYXQ7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVl
dD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFn
ZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3Rl
bmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVTaGVldChwYWdl
QWdlbnQsIGlkLCBwYWdlU3R5bGVTaGVldCwgb3JpZ2luLCBkb2N1bWVudFVSTCwgbGlzdGVuZXIp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2Vu
dCwgaWQsIFdURjo6bW92ZShwYWdlU3R5bGVTaGVldCksIG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxp
c3RlbmVyKSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNzYyLDEwICs3NjYsMTAgQEAgU3RyaW5nIElu
c3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxl
U2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hl
ZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNv
bnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0eWxl
U2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQs
IGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAgOiBtX3BhZ2VB
Z2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQotICAgICwgbV9wYWdlU3R5bGVTaGVldChw
YWdlU3R5bGVTaGVldCkKKyAgICAsIG1fcGFnZVN0eWxlU2hlZXQoV1RGOjptb3ZlKHBhZ2VTdHls
ZVNoZWV0KSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAsIG1fZG9jdW1lbnRVUkwoZG9j
dW1lbnRVUkwpCiAgICAgLCBtX2lzUmV2YWxpZGF0aW5nKGZhbHNlKQpAQCAtOTUzLDcgKzk1Nyw3
IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUZvcklkKGNvbnN0IElu
c3BlY3RvckNTU0lkJiBpZCkgY29uc3QKIAogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHls
ZVNoZWV0KCkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hl
ZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCkBAIC05NjEsMTkgKzk2NSwyMCBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aQogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9
IGFzQ1NTUnVsZUxpc3Qoc3R5bGVTaGVldCk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKLSAgICAgICAgLnNldFJ1bGVzKGJ1aWxkQXJyYXlG
b3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpOworICAgICAgICAuc2V0UnVsZXMoYnVpbGRB
cnJheUZvclJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgpKSkKKyAgICAgICAgLnJlbGVhc2UoKTsK
IAogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0
KCZzdHlsZVNoZWV0VGV4dCk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdC0+c2V0
VGV4dChzdHlsZVNoZWV0VGV4dCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpi
dWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKQEAgLTk5MSwzMCArOTk2
LDMxIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0
SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpiCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+
IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxwZXIoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQs
IGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvcikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjb25z
dCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBpbnNwZWN0
b3JTZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0
ZSgpCi0gICAgICAgIC5zZXRUZXh0KHNlbGVjdG9yVGV4dCk7CisgICAgYXV0byBpbnNwZWN0b3JT
ZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgp
CisgICAgICAgIC5zZXRUZXh0KHNlbGVjdG9yVGV4dCkKKyAgICAgICAgLnJlbGVhc2UoKTsKIAog
ICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkgPSBzZWxlY3Rvci5zdGF0aWNT
cGVjaWZpY2l0eShvayk7CiAKICAgICBpZiAob2spIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PGludD4+IHR1cGxlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gdHVwbGUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICAgICAgdHVwbGUtPmFkZEl0ZW0oc3RhdGlj
X2Nhc3Q8aW50Pigoc3BlY2lmaWNpdHkgJiBDU1NTZWxlY3Rvcjo6aWRNYXNrKSA+PiAxNikpOwog
ICAgICAgICB0dXBsZS0+YWRkSXRlbShzdGF0aWNfY2FzdDxpbnQ+KChzcGVjaWZpY2l0eSAmIENT
U1NlbGVjdG9yOjpjbGFzc01hc2spID4+IDgpKTsKICAgICAgICAgdHVwbGUtPmFkZEl0ZW0oc3Rh
dGljX2Nhc3Q8aW50PihzcGVjaWZpY2l0eSAmIENTU1NlbGVjdG9yOjplbGVtZW50TWFzaykpOwot
ICAgICAgICBpbnNwZWN0b3JTZWxlY3Rvci0+c2V0U3BlY2lmaWNpdHkodHVwbGUucmVsZWFzZSgp
KTsKKyAgICAgICAgaW5zcGVjdG9yU2VsZWN0b3ItPnNldFNwZWNpZmljaXR5KFdURjo6bW92ZSh0
dXBsZSkpOwogICAgIH0KIAotICAgIHJldHVybiBpbnNwZWN0b3JTZWxlY3Rvci5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShpbnNwZWN0b3JTZWxlY3Rvcik7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENTU1J1bGVTb3Vy
Y2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCitzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNG
cm9tU291cmNlKGNvbnN0IENTU1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJp
bmcmIHNoZWV0VGV4dCwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCiB7CiAg
ICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEpTQzo6WWFycjo6UmVndWxhckV4cHJl
c3Npb24sIGNvbW1lbnQsICgiL1xcKlteXSo/XFwqLyIsIFRleHRDYXNlU2Vuc2l0aXZlLCBKU0M6
OllhcnI6Ok11bHRpbGluZUVuYWJsZWQpKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gcmVzdWx0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTZWxlY3Rvcj46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0
ZSgpOwogICAgIGNvbnN0IFNlbGVjdG9yUmFuZ2VMaXN0JiByYW5nZXMgPSBzb3VyY2VEYXRhLT5z
ZWxlY3RvclJhbmdlczsKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rv
ckxpc3QuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJhbmdlcy5zaXpl
KCk7IGkgPCBzaXplOyArK2kpIHsKQEAgLTEwMjcsMTUgKzEwMzMsMTUgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTZWxlY3QKIAogICAgICAgICBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
ZWxlY3Rvcik7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVy
biBXVEY6Om1vdmUocmVzdWx0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK1JlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZv
clNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICByZXR1cm4gYnVp
bGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0b3JUZXh0KCksICpzZWxl
Y3Rvcik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rv
ckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JMaXN0KENT
U1N0eWxlUnVsZSogcnVsZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9y
TGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NT
U3R5bGVSdWxlKiBydWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNl
RGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMDUzLDI2ICsxMDU5
LDI3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqCiAgICAgICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3Rv
ciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAgICAgICAgICAgICBzZWxlY3Rv
cnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxlY3RvcikpOwogICAgIH0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+IHJlc3VsdCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQorICAgIGF1
dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRTZWxlY3RvcnMoc2VsZWN0b3JzLnJlbGVhc2UoKSkKICAgICAgICAg
LnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwogICAgIGlmIChzb3Vy
Y2VEYXRhKQogICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qo
c291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygpLmdldCgpKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVj
dG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNo
ZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlbGVjdG9yTGlzdChidWlsZE9i
amVjdEZvclNlbGVjdG9yTGlzdChydWxlKSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUocnVsZS0+
c3R5bGVSdWxlKCkuc291cmNlTGluZSgpKQogICAgICAgICAuc2V0T3JpZ2luKG1fb3JpZ2luKQot
ICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5bGUoKSkpOwor
ICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5bGUoKSkpCisg
ICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAvLyAic291cmNlVVJMIiBpcyBwcmVzZW50IG9ubHkg
Zm9yIHJlZ3VsYXIgcnVsZXMsIG90aGVyd2lzZSAib3JpZ2luIiBzaG91bGQgYmUgdXNlZCBpbiB0
aGUgZnJvbnRlbmQuCiAgICAgaWYgKG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcikKQEAgLTEwODQsMTYgKzEwOTEsMTYgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm8KICAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlkLmFz
UHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSk7CiAg
ICAgfQogCi0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVk
aWE+PiBtZWRpYUFycmF5ID0gQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRp
YT46OmNyZWF0ZSgpOworICAgIGF1dG8gbWVkaWFBcnJheSA9IEFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTTWVkaWE+OjpjcmVhdGUoKTsKIAogICAgIGZpbGxNZWRpYUxpc3RDaGFp
bihydWxlLCBtZWRpYUFycmF5LmdldCgpKTsKICAgICBpZiAobWVkaWFBcnJheS0+bGVuZ3RoKCkp
Ci0gICAgICAgIHJlc3VsdC0+c2V0TWVkaWEobWVkaWFBcnJheS5yZWxlYXNlKCkpOworICAgICAg
ICByZXN1bHQtPnNldE1lZGlhKFdURjo6bW92ZShtZWRpYUFycmF5KSk7CiAKLSAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLVBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkK
K1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQog
ewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5z
dXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMTE5LDcgKzExMjYsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkT2JqZWN0RgogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCiBib29sIEluc3BlY3RvclN0
eWxlU2hlZXQ6OnNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIGNvbnN0IFN0
cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTExNjQs
NyArMTE3MSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkoY29u
c3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCB1bnNpZ25lZCBwcm9wCiAgICAgYm9vbCBzdWNjZXNzID0g
aW5zcGVjdG9yU3R5bGUtPnRvZ2dsZVByb3BlcnR5KHByb3BlcnR5SW5kZXgsIGRpc2FibGUsIGVj
KTsKICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICBpZiAoZGlzYWJsZSkKLSAgICAgICAgICAg
IHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUpOworICAgICAgICAgICAgcmVt
ZW1iZXJJbnNwZWN0b3JTdHlsZShpbnNwZWN0b3JTdHlsZS5jb3B5UmVmKCkpOwogICAgICAgICBl
bHNlIGlmICghaW5zcGVjdG9yU3R5bGUtPmhhc0Rpc2FibGVkUHJvcGVydGllcygpKQogICAgICAg
ICAgICAgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUtPmNzc1N0eWxlKCkpOwog
ICAgICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKQEAgLTExOTUsNyArMTIwMiw3IEBAIHZv
aWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCkKICAgICAgICAg
bV9saXN0ZW5lci0+c3R5bGVTaGVldENoYW5nZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQoY29u
c3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQorUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkK
IHsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQoaWQpOwogICAg
IGlmICghc3R5bGUpCkBAIC0xMjA3LDcgKzEyMTQsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclN0
eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3Bl
YwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0
eWxlKQordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJl
ZlB0cjxJbnNwZWN0b3JTdHlsZT4mJiBpbnNwZWN0b3JTdHlsZSkKIHsKICAgICBtX2luc3BlY3Rv
clN0eWxlcy5zZXQoaW5zcGVjdG9yU3R5bGUtPmNzc1N0eWxlKCksIGluc3BlY3RvclN0eWxlKTsK
IH0KQEAgLTE0MTcsMjMgKzE0MjQsMjMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojppbmxp
bmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9y
UnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZT4+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFydWxlTGlzdCkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKIAogICAg
IFJlZlB0cjxDU1NSdWxlTGlzdD4gcmVmUnVsZUxpc3QgPSBydWxlTGlzdDsKICAgICBDU1NTdHls
ZVJ1bGVWZWN0b3IgcnVsZXM7Ci0gICAgY29sbGVjdEZsYXRSdWxlcyhyZWZSdWxlTGlzdCwgJnJ1
bGVzKTsKKyAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURjo6bW92ZShyZWZSdWxlTGlzdCksICZydWxl
cyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKQogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxlKHJ1
bGVzLmF0KGkpLmdldCgpKSk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
Y29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCwgQ1NTU3R5
bGVSdWxlVmVjdG9yKiByZXN1bHQpCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxlY3RG
bGF0UnVsZXMoUmVmUHRyPENTU1J1bGVMaXN0PiYmIHJ1bGVMaXN0LCBDU1NTdHlsZVJ1bGVWZWN0
b3IqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAgICAgICByZXR1cm47CkBAIC0x
NDQ2LDE5ICsxNDUzLDE5IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRS
dWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCwgQ1NTCiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjaGlsZFJ1bGVMaXN0ID0gYXNDU1NS
dWxlTGlzdChydWxlKTsKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVMaXN0KQotICAgICAgICAg
ICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoY2hpbGRSdWxlTGlzdCwgcmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURjo6bW92ZShjaGlsZFJ1bGVMaXN0KSwgcmVzdWx0
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3Jl
YXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQ
dHI8RWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwg
ZWxlbWVudCwgb3JpZ2luLCBsaXN0ZW5lcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShwYWdlQWdlbnQsIGlkLCBXVEY6Om1vdmUo
ZWxlbWVudCksIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9y
UGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVu
dD4gZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9y
aWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYmIGVsZW1lbnQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3Rl
bmVyKiBsaXN0ZW5lcikKICAgICA6IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwg
bnVsbHB0ciwgb3JpZ2luLCAiIiwgbGlzdGVuZXIpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVudCkK
KyAgICAsIG1fZWxlbWVudChXVEY6Om1vdmUoZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VE
YXRhKG51bGxwdHIpCiAgICAgLCBtX2lzU3R5bGVUZXh0VmFsaWQoZmFsc2UpCiB7CkBAIC0xNTMx
LDEwICsxNTM4LDEwIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpl
bnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRy
PEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3Bl
Y3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQorUmVmUHRyPEluc3BlY3Rv
clN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3BlY3RvclN0eWxl
Rm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoaWQs
ICFpZC5vcmRpbmFsKCkpOwotICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlOworICAgIHJldHVy
biBtX2luc3BlY3RvclN0eWxlLmNvcHlSZWYoKTsKIH0KIAogQ1NTU3R5bGVEZWNsYXJhdGlvbiog
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbmxpbmVTdHlsZSgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCBm
ZGJmNzhkLi45Yjk3NGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVNoZWV0LmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTY0LDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IGV4cGxpY2l0IEluc3BlY3RvckNTU0lkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+Z2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJZCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG9y
ZGluYWxWYWx1ZSA9IHZhbHVlLT5nZXQoIm9yZGluYWwiKTsKLSAgICAgICAgaWYgKCFvcmRpbmFs
VmFsdWUgfHwgIW9yZGluYWxWYWx1ZS0+YXNJbnRlZ2VyKG1fb3JkaW5hbCkpCisgICAgICAgIGlu
dCBvcmRpbmFsVmFsdWU7CisgICAgICAgIGlmICghdmFsdWUtPmdldEludGVnZXIoIm9yZGluYWwi
LCBvcmRpbmFsVmFsdWUpKQogICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSAiIjsKICAgICB9
CiAKQEAgLTg3LDE1ICs4NiwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJRCB0eXBlIGlzIGVpdGhl
ciBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQgb3IgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NSdWxlSWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSUQ+Ci0gICAgUGFz
c1JlZlB0cjxJRD4gYXNQcm90b2NvbFZhbHVlKCkgY29uc3QKKyAgICBSZWZQdHI8SUQ+IGFzUHJv
dG9jb2xWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgUmVmUHRyPElEPiByZXN1bHQgPSBJRDo6
Y3JlYXRlKCkKKyAgICAgICAgcmV0dXJuIElEOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFN0
eWxlU2hlZXRJZChtX3N0eWxlU2hlZXRJZCkKLSAgICAgICAgICAgIC5zZXRPcmRpbmFsKG1fb3Jk
aW5hbCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgICAgICAgICAgLnNl
dE9yZGluYWwobV9vcmRpbmFsKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CiAKIHBy
aXZhdGU6CkBAIC0xMzYsMTIgKzEzNSwxMiBAQCBzdHJ1Y3QgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eSB7CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SW5z
cGVjdG9yU3R5bGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gY3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENT
U1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHls
ZVNoZWV0KTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlPiBjcmVhdGUoY29uc3QgSW5z
cGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiYmIHN0eWxl
LCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKICAgICB+SW5zcGVjdG9y
U3R5bGUoKTsKIAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiBidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgp
IGNvbnN0OworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBi
dWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pj4gYnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdDsKICAgICBib29sIGhhc0Rpc2Fi
bGVkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuICFtX2Rpc2FibGVkUHJvcGVydGllcy5pc0Vt
cHR5KCk7IH0KICAgICBib29sIHNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleCwgYm9vbCBkaXNh
YmxlLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNTAsMTUgKzE0OSwxNSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToK
LSAgICBJbnNwZWN0b3JTdHlsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFzc1Jl
ZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFy
ZW50U3R5bGVTaGVldCk7CisgICAgSW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQm
IHN0eWxlSWQsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiYmIHN0eWxlLCBJbnNwZWN0b3JT
dHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhl
c2UgYWxpYXNlcyBhbmQgdXBkYXRlIGFsbCB0aGUgY3VycmVudCBjYWxsIHNpdGVzIHRvIHVzZSB0
aGUgbmV3IHB1YmxpYyBtZXRob2RzLgogICAgIGJvb2wgc3R5bGVUZXh0KFN0cmluZyogcmVzdWx0
KSBjb25zdCB7IHJldHVybiBnZXRUZXh0KHJlc3VsdCk7IH0KICAgICBib29sIGFwcGx5U3R5bGVU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkgeyBFeGNlcHRpb25Db2RlIGVjID0gMDsgcmV0dXJuIHNl
dFRleHQodGV4dCwgZWMpOyB9CiAKICAgICBib29sIHBvcHVsYXRlQWxsUHJvcGVydGllcyhWZWN0
b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBzdHlsZVdpdGhQcm9wZXJ0aWVz
KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gZXh0cmFjdFNvdXJj
ZURhdGEoKSBjb25zdDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gc3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0OworICAgIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gZXh0cmFjdFNvdXJjZURhdGEoKSBjb25zdDsKICAgICBTdHJpbmcgc2hvcnRoYW5kVmFs
dWUoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CiAgICAgU3RyaW5nIHNo
b3J0aGFuZFByaW9yaXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0Owog
ICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0
aGFuZFByb3BlcnR5KSBjb25zdDsKQEAgLTE4Miw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgfTsK
IAogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPEluc3Bl
Y3RvclN0eWxlPj4gSW5zcGVjdG9yU3R5bGVNYXA7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmlu
ZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVu
dFVSTCwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5
bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogICAg
IHN0YXRpYyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVl
dCk7CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0xOTcsMTAgKzE5
NiwxMCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGRlbGV0ZVJ1bGUoY29uc3QgSW5z
cGVjdG9yQ1NTSWQmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlRm9y
SWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVT
aGVldCgpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVs
ZShDU1NTdHlsZVJ1bGUqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBi
dWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZv
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qKTsKICAgICBib29sIHNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYsIGNvbnN0
IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9v
bCBzZXRQcm9wZXJ0eVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0
eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9sZFBy
b3BlcnR5VGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgdG9nZ2xlUHJvcGVydHkoY29u
c3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUs
IEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTIxMyw3ICsyMTIsNyBAQCBwdWJsaWM6CiAgICAgSW5zcGVj
dG9yQ1NTSWQgc3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1
cm4gcnVsZU9yU3R5bGVJZChzdHlsZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvclN0
eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0
cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciop
OworICAgIEluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3Ry
aW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVu
dFVSTCwgTGlzdGVuZXIqKTsKIAogICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luICE9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNl
ckFnZW50ICYmIG1fb3JpZ2luICE9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbjo6VXNlcjsgfQogICAgIEluc3BlY3RvckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwpAQCAtMjIxLDggKzIyMCw4IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFG
b3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJ
ZCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpOworICAgIHZpcnR1YWwgUmVmUHRyPEluc3BlY3Rv
clN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJik7CisgICAg
dmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxl
PiYmIGluc3BlY3RvclN0eWxlKTsKICAgICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOwogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBi
eSBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGUuCkBAIC0yMzMsNyArMjMyLDcgQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVSdWxlPj4gQ1NTU3R5bGVSdWxl
VmVjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JTdHlsZTsKIAotICAgIHN0YXRpYyB2
b2lkIGNvbGxlY3RGbGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4sIENTU1N0eWxlUnVs
ZVZlY3RvciogcmVzdWx0KTsKKyAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0
cjxDU1NSdWxlTGlzdD4mJiwgQ1NTU3R5bGVSdWxlVmVjdG9yKiByZXN1bHQpOwogICAgIGJvb2wg
Y2hlY2tQYWdlU3R5bGVTaGVldChFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgYm9vbCBlbnN1
cmVUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVTb3VyY2VEYXRhKCk7CkBAIC0yNDMsOSAr
MjQyLDkgQEAgcHJpdmF0ZToKICAgICBib29sIG9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5n
KiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgcmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcq
IHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBpbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJl
c3VsdCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBidWlsZEFycmF5Rm9yUnVsZUxpc3Qo
Q1NTUnVsZUxpc3QqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsK
LSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBi
dWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqKTsKKyAgICBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4g
YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0Kik7CisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rv
ckxpc3Q+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JMaXN0KENTU1N0eWxlUnVsZSopOwogCiAgICAg
SW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBTdHJpbmcgbV9pZDsKQEAgLTI2
MSwyMSArMjYwLDIxIEBAIHByaXZhdGU6CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JTdHlsZVNoZWV0IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+
IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRy
PEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExp
c3RlbmVyKik7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8
RWxlbWVudD4mJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBM
aXN0ZW5lciopOwogCiAgICAgdm9pZCBkaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiAgICAg
dmlydHVhbCBib29sIGdldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JD
U1NJZCYgaWQpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNFRChpZCwgIWlkLm9yZGluYWwo
KSk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5n
JiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOworICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8RWxl
bWVudD4mJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0
ZW5lciopOwogCiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNl
RGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NF
UlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNv
dXJjZURhdGE7IH0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFs
IGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3Rv
ckNTU0lkJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVjdG9yU3R5
bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCBSZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NT
SWQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShS
ZWZQdHI8SW5zcGVjdG9yU3R5bGU+JiYpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBm
b3JnZXRJbnNwZWN0b3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgb3ZlcnJpZGUgeyB9CiAK
ICAgICAvLyBBbHNvIGFjY2Vzc2VkIGJ5IGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JTdHlsZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNw
cAppbmRleCBiZDMyNzhlLi45YWI4ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC0xOTcsOSArMTk3LDkgQEAgdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcKIAogICAgIC8vIFVzZSBhbiBpbmRlcGVuZGVudCBzdG9wd2F0
Y2ggZm9yIGNvbnNvbGUtaW5pdGlhdGVkIHByb2ZpbGluZywgc2luY2UgdGhlIHVzZXIgd2lsbCBl
eHBlY3QgaXQKICAgICAvLyB0byBiZSByZWxhdGl2ZSB0byB3aGVuIHRoZWlyIGNvbW1hbmQgd2Fz
IGlzc3VlZC4KLSAgICBSZWZQdHI8U3RvcHdhdGNoPiBwcm9maWxlclN0b3B3YXRjaCA9IFN0b3B3
YXRjaDo6Y3JlYXRlKCk7CisgICAgUmVmPFN0b3B3YXRjaD4gcHJvZmlsZXJTdG9wd2F0Y2ggPSBT
dG9wd2F0Y2g6OmNyZWF0ZSgpOwogICAgIHByb2ZpbGVyU3RvcHdhdGNoLT5zdGFydCgpOwotICAg
IHN0YXJ0UHJvZmlsaW5nKGV4ZWMsIHRpdGxlLCBwcm9maWxlclN0b3B3YXRjaC5yZWxlYXNlKCkp
OworICAgIHN0YXJ0UHJvZmlsaW5nKGV4ZWMsIHRpdGxlLCBXVEY6Om1vdmUocHJvZmlsZXJTdG9w
d2F0Y2gpKTsKIAogICAgIG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5hcHBlbmQoY3Jl
YXRlUmVjb3JkRW50cnkoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVDb25zb2xlUHJvZmls
ZURhdGEodGl0bGUpLCBUaW1lbGluZVJlY29yZFR5cGU6OkNvbnNvbGVQcm9maWxlLCB0cnVlLCBm
cmFtZUZyb21FeGVjU3RhdGUoZXhlYykpKTsKIH0KQEAgLTIxNyw3ICsyMTcsNyBAQCBQYXNzUmVm
UHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcEZyb21Db25zb2xl
KEpTQzo6RXhlY1N0YXRlKgogICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpIHx8IHJlY29yZFRp
dGxlID09IHRpdGxlKSB7CiAgICAgICAgICAgICBSZWZQdHI8SlNDOjpQcm9maWxlPiBwcm9maWxl
ID0gc3RvcFByb2ZpbGluZyhleGVjLCB0aXRsZSk7CiAgICAgICAgICAgICBpZiAocHJvZmlsZSkK
LSAgICAgICAgICAgICAgICBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUocmVj
b3JkLmRhdGEuZ2V0KCksIHByb2ZpbGUpOworICAgICAgICAgICAgICAgIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6YXBwZW5kUHJvZmlsZShyZWNvcmQuZGF0YS5nZXQoKSwgcHJvZmlsZS5jb3B5UmVm
KCkpOwogCiAgICAgICAgICAgICBkaWRDb21wbGV0ZVJlY29yZEVudHJ5KHJlY29yZCk7CiAKQEAg
LTIyNiw3ICsyMjYsNyBAQCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKgogICAgICAgICAgICAgaWYg
KCFtX2VuYWJsZWRGcm9tRnJvbnRlbmQgJiYgbV9wZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRz
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpbnRlcm5hbFN0b3AoKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIHByb2ZpbGUucmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92
ZShwcm9maWxlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjQ3LDE3ICs2NDcsMTcgQEAgc3Rh
dGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChU
aW1lbGluZVJlY29yZFR5cGUgdHkKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZTo6VGltZVN0YW1wOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBy
cFJlY29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZWNv
cmQsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogewotICAgIHBycFJlY29yZC0+c2V0U3RyaW5n
KCJ0eXBlIiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUodG9Qcm90
b2NvbCh0eXBlKSkpOworICAgIHJlY29yZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkpOwogCi0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNv
cmQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50Pjo6cnVudGltZUNhc3QocHJwUmVjb3JkKTsKKyAgICBhdXRvIHJlY29yZE9iamVjdCA9
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZl
bnQ+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUocmVjb3JkKSk7CiAKICAgICBpZiAobV9yZWNvcmRT
dGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHNlbmRFdmVudChyZWNvcmQucmVsZWFzZSgpKTsKKyAg
ICAgICAgc2VuZEV2ZW50KFdURjo6bW92ZShyZWNvcmRPYmplY3QpKTsKICAgICBlbHNlIHsKICAg
ICAgICAgY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcGFyZW50ID0gbV9yZWNvcmRTdGFjay5s
YXN0KCk7Ci0gICAgICAgIHBhcmVudC5jaGlsZHJlbi0+cHVzaE9iamVjdChyZWNvcmQucmVsZWFz
ZSgpKTsKKyAgICAgICAgcGFyZW50LmNoaWxkcmVuLT5wdXNoT2JqZWN0KFdURjo6bW92ZShyZWNv
cmQpKTsKICAgICB9CiB9CiAKQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OmRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRy
eSYgZQogICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBl
bnRyeS5kYXRhKTsKICAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY2hp
bGRyZW4iKSwgZW50cnkuY2hpbGRyZW4pOwogICAgIGVudHJ5LnJlY29yZC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgiZW5kVGltZSIpLCB0aW1lc3RhbXAoKSk7Ci0gICAgYWRkUmVjb3JkVG9UaW1l
bGluZShlbnRyeS5yZWNvcmQsIGVudHJ5LnR5cGUpOworICAgIGFkZFJlY29yZFRvVGltZWxpbmUo
ZW50cnkucmVjb3JkLmNvcHlSZWYoKSwgZW50cnkudHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlw
ZSB0eXBlKQpAQCAtNzA1LDM0ICs3MDUsMzQgQEAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5z
cGVjdG9yVGltZWxpbmVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW4KIHsK
IH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNh
cHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVS
ZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1f
bWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsKLSAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIGRh
dGEpOwotICAgIHNldEZyYW1lSWRlbnRpZmllcihyZWNvcmQuZ2V0KCksIGZyYW1lKTsKLSAgICBh
ZGRSZWNvcmRUb1RpbWVsaW5lKHJlY29yZC5yZWxlYXNlKCksIHR5cGUpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJp
Y1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVw
dGggOiAwKTsKKyAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIFdURjo6bW92ZShkYXRhKSk7
CisgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsKKyAgICBhZGRS
ZWNvcmRUb1RpbWVsaW5lKFdURjo6bW92ZShyZWNvcmQpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGV2ZW50KQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBldmVudCkKIHsKICAgICBpZiAoIW1fZnJvbnRlbmREaXNwYXRjaGVy
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNr
LiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkg
bm93LgotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVF
dmVudD4gcmVjb3JkQ2hlY2tlZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChldmVudCk7Ci0gICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQocmVjb3JkQ2hlY2tlZC5yZWxlYXNlKCkpOwor
ICAgIGF1dG8gcmVjb3JkQ2hlY2tlZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUoZXZlbnQp
KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChXVEY6Om1vdmUocmVj
b3JkQ2hlY2tlZCkpOwogfQogCi1JbnNwZWN0b3JUaW1lbGluZUFnZW50OjpUaW1lbGluZVJlY29y
ZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVudHJ5KFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBj
YXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCitJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpU
aW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVu
dHJ5KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2Vu
ZXJpY1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNr
RGVwdGggOiAwKTsKLSAgICBzZXRGcmFtZUlkZW50aWZpZXIocmVjb3JkLmdldCgpLCBmcmFtZSk7
Ci0gICAgcmV0dXJuIFRpbWVsaW5lUmVjb3JkRW50cnkocmVjb3JkLnJlbGVhc2UoKSwgZGF0YSwg
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGlt
ZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7Cisg
ICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsKKyAgICByZXR1cm4g
VGltZWxpbmVSZWNvcmRFbnRyeShXVEY6Om1vdmUocmVjb3JkKSwgV1RGOjptb3ZlKGRhdGEpLCBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCksIHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
YXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFt
ZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3Jk
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewotICAgIHB1c2hDdXJyZW50
UmVjb3JkKGNyZWF0ZVJlY29yZEVudHJ5KGRhdGEsIHR5cGUsIGNhcHR1cmVDYWxsU3RhY2ssIGZy
YW1lKSk7CisgICAgcHVzaEN1cnJlbnRSZWNvcmQoY3JlYXRlUmVjb3JkRW50cnkoV1RGOjptb3Zl
KGRhdGEpLCB0eXBlLCBjYXB0dXJlQ2FsbFN0YWNrLCBmcmFtZSkpOwogfQogCiB2b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmNsZWFyUmVjb3JkU3RhY2soKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKaW5kZXggMzUyYTFmNS4uM2U4
ZTExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVs
aW5lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5oCkBAIC0yMjQsMTkgKzIyNCwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgaW50ZXJu
YWxTdG9wKCk7CiAgICAgZG91YmxlIHRpbWVzdGFtcCgpOwogCi0gICAgdm9pZCBzZW5kRXZlbnQo
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4pOwotICAgIHZvaWQgYXBwZW5k
UmVjb3JkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVs
aW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwotICAgIHZvaWQg
cHVzaEN1cnJlbnRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4s
IFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAg
IHZvaWQgc2VuZEV2ZW50KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJik7Cisg
ICAgdm9pZCBhcHBlbmRSZWNvcmQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYm
IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSop
OworICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJh
bWUqKTsKICAgICB2b2lkIHB1c2hDdXJyZW50UmVjb3JkKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50
cnkmIHJlY29yZCkgeyBtX3JlY29yZFN0YWNrLmFwcGVuZChyZWNvcmQpOyB9CiAKLSAgICBUaW1l
bGluZVJlY29yZEVudHJ5IGNyZWF0ZVJlY29yZEVudHJ5KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2Fs
bFN0YWNrLCBGcmFtZSopOworICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50
cnkoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwogCiAgICAgdm9pZCBzZXRG
cmFtZUlkZW50aWZpZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIHJlY29yZCwgRnJhbWUq
KTsKIAogICAgIHZvaWQgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShjb25zdCBUaW1lbGluZVJlY29y
ZEVudHJ5Jik7CiAgICAgdm9pZCBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNv
cmRUeXBlKTsKIAotICAgIHZvaWQgYWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKKyAgICB2b2lkIGFk
ZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmLCBU
aW1lbGluZVJlY29yZFR5cGUpOwogICAgIHZvaWQgY2xlYXJSZWNvcmRTdGFjaygpOwogCiAgICAg
dm9pZCBsb2NhbFRvUGFnZVF1YWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgTGF5b3V0UmVj
dCYsIEZsb2F0UXVhZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggNTJhOGMwNy4uY2E2OWViNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCkBAIC0xNzQsNyAr
MTc0LDcgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlzY29ubmVjdEZyb21Xb3JrZXIo
RXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQKICAgICAgICAgZXJyb3IgPSBBU0NJSUxp
dGVyYWwoIldvcmtlciBpcyBnb25lIik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OnNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3Jr
ZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFdv
cmtlckZyb250ZW5kQ2hhbm5lbCogY2hhbm5lbCA9IG1faWRUb0NoYW5uZWwuZ2V0KHdvcmtlcklk
KTsKICAgICBpZiAoY2hhbm5lbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50LmgKaW5kZXggMzliZTZkMC4uNjg2OWQ1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKQEAgLTY4LDcgKzY4LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5JbnNwZWN0V29ya2VycyhFcnJvclN0cmlu
ZyYsIGJvb2wqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdFRvV29ya2VyKEVy
cm9yU3RyaW5nJiwgaW50IHdvcmtlcklkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlz
Y29ubmVjdEZyb21Xb3JrZXIoRXJyb3JTdHJpbmcmLCBpbnQgd29ya2VySWQpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgaW50IHdv
cmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBtZXNzYWdl
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0
cmluZyYsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvY29ubmVj
dFRvV29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wgdmFsdWUpIG92ZXJyaWRlOwogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNE
YXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5j
cHAKaW5kZXggZGVkNjU0Yi4uZTRhMjY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCkBAIC01MSwxNyArNTEsMTcgQEAgdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogCi1QYXNzUmVmUHRy
PFhIUlJlcGxheURhdGE+IFhIUlJlcGxheURhdGE6OmNyZWF0ZShjb25zdCBTdHJpbmcgJm1ldGhv
ZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1E
YXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFs
cykKK1JlZjxYSFJSZXBsYXlEYXRhPiBYSFJSZXBsYXlEYXRhOjpjcmVhdGUoY29uc3QgU3RyaW5n
ICZtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYg
Zm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRl
bnRpYWxzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgWEhSUmVwbGF5RGF0YShtZXRob2Qs
IHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBYSFJSZXBsYXlEYXRhKG1ldGhvZCwgdXJsLCBhc3luYywg
V1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKSk7CiB9CiAK
IAotWEhSUmVwbGF5RGF0YTo6WEhSUmVwbGF5RGF0YShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29u
c3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKK1hI
UlJlcGxheURhdGE6OlhIUlJlcGxheURhdGEoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVS
TCYgdXJsLCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQogICAgIDogbV9t
ZXRob2QobWV0aG9kKQogICAgICwgbV91cmwodXJsKQogICAgICwgbV9hc3luYyhhc3luYykKLSAg
ICAsIG1fZm9ybURhdGEoZm9ybURhdGEpCisgICAgLCBtX2Zvcm1EYXRhKFdURjo6bW92ZShmb3Jt
RGF0YSkpCiAgICAgLCBtX2hlYWRlcnMoaGVhZGVycykKICAgICAsIG1faW5jbHVkZUNyZWRlbnRp
YWxzKGluY2x1ZGVDcmVkZW50aWFscykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKaW5kZXggYzIzNjk1ZC4uNTM5Mzg4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKQEAgLTUxLDcg
KzUxLDcgQEAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIAogY2xhc3MgWEhSUmVwbGF5RGF0
YSA6IHB1YmxpYyBSZWZDb3VudGVkPFhIUlJlcGxheURhdGE+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxYSFJSZXBsYXlEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nICZtZXRob2Qs
IGNvbnN0IFVSTCYsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscyk7CisgICAgc3RhdGlj
IFJlZjxYSFJSZXBsYXlEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVS
TCYsIGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiwgY29uc3QgSFRUUEhlYWRlck1hcCYg
aGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpOwogCiAgICAgY29uc3QgU3RyaW5nJiBt
ZXRob2QoKSBjb25zdCB7IHJldHVybiBtX21ldGhvZDsgfQogICAgIGNvbnN0IFVSTCYgdXJsKCkg
Y29uc3QgeyByZXR1cm4gbV91cmw7IH0KQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIGNv
bnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnM7IH0K
ICAgICBib29sIGluY2x1ZGVDcmVkZW50aWFscygpIGNvbnN0IHsgcmV0dXJuIG1faW5jbHVkZUNy
ZWRlbnRpYWxzOyB9CiBwcml2YXRlOgotICAgIFhIUlJlcGxheURhdGEoY29uc3QgU3RyaW5nICZt
ZXRob2QsIGNvbnN0IFVSTCYsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscyk7CisgICAg
WEhSUmVwbGF5RGF0YShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29uc3QgVVJMJiwgYm9vbCBhc3lu
YywgUmVmUHRyPEZvcm1EYXRhPiYmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29s
IGluY2x1ZGVDcmVkZW50aWFscyk7CiAKICAgICBTdHJpbmcgbV9tZXRob2Q7CiAgICAgVVJMIG1f
dXJsOwpAQCAtMTA3LDExICsxMDcsMTEgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgdGV4dEVu
Y29kaW5nTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dEVuY29kaW5nTmFtZTsgfQogICAgICAg
ICB2b2lkIHNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1l
KSB7IG1fdGV4dEVuY29kaW5nTmFtZSA9IHRleHRFbmNvZGluZ05hbWU7IH0KIAotICAgICAgICBQ
YXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIoKSBjb25zdCB7IHJldHVybiBt
X2RlY29kZXI7IH0KLSAgICAgICAgdm9pZCBzZXREZWNvZGVyKFBhc3NSZWZQdHI8VGV4dFJlc291
cmNlRGVjb2Rlcj4gZGVjb2RlcikgeyBtX2RlY29kZXIgPSBkZWNvZGVyOyB9CisgICAgICAgIFJl
ZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWNv
ZGVyLmNvcHlSZWYoKTsgfQorICAgICAgICB2b2lkIHNldERlY29kZXIoUmVmUHRyPFRleHRSZXNv
dXJjZURlY29kZXI+JiYgZGVjb2RlcikgeyBtX2RlY29kZXIgPSBXVEY6Om1vdmUoZGVjb2Rlcik7
IH0KIAotICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXI7IH0KLSAgICAgICAgdm9pZCBzZXRCdWZmZXIoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQorICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5jb3B5UmVmKCk7
IH0KKyAgICAgICAgdm9pZCBzZXRCdWZmZXIoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIp
IHsgbV9idWZmZXIgPSBXVEY6Om1vdmUoYnVmZmVyKTsgfQogCiAgICAgICAgIENhY2hlZFJlc291
cmNlKiBjYWNoZWRSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUmVzb3VyY2U7IH0K
ICAgICAgICAgdm9pZCBzZXRDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVz
b3VyY2UpIHsgbV9jYWNoZWRSZXNvdXJjZSA9IGNhY2hlZFJlc291cmNlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDgx
OWJmZGIuLjdlMjQwNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmNwcApAQCAtNTIsOSArNTIsOSBAQCB1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQoZG91Ymxl
IHN0YXJ0VGltZSwgaW50IG1heENhbGxTdGFja0RlcHRoKQorUmVmPEluc3BlY3Rvck9iamVjdD4g
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKGRvdWJsZSBzdGFydFRp
bWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlY29yZCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVjb3JkLT5z
ZXREb3VibGUoInN0YXJ0VGltZSIsIHN0YXJ0VGltZSk7CiAKICAgICBpZiAobWF4Q2FsbFN0YWNr
RGVwdGgpIHsKQEAgLTYyLDE4NSArNjIsMTg1IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0CiAg
ICAgICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNrVHJhY2UtPnNpemUoKSkKICAgICAgICAgICAg
IHJlY29yZC0+c2V0VmFsdWUoInN0YWNrVHJhY2UiLCBzdGFja1RyYWNlLT5idWlsZEluc3BlY3Rv
ckFycmF5KCkpOwogICAgIH0KLSAgICByZXR1cm4gcmVjb3JkLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKHJlY29yZCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91YmxlIHN0YXJ0
VGltZSwgY29uc3QgU3RyaW5nJiB0aHJlYWROYW1lKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVCYWNrZ3JvdW5kUmVjb3JkKGRvdWJsZSBzdGFydFRp
bWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkTmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHJlY29yZCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVjb3Jk
LT5zZXREb3VibGUoInN0YXJ0VGltZSIsIHN0YXJ0VGltZSk7CiAgICAgcmVjb3JkLT5zZXRTdHJp
bmcoInRocmVhZCIsIHRocmVhZE5hbWUpOwotICAgIHJldHVybiByZWNvcmQucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUocmVjb3JkKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6
ZV90IHVzZWRIZWFwU2l6ZURlbHRhKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhlYXBTaXplRGVs
dGEpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidXNlZEhlYXBTaXplRGVsdGEi
LCB1c2VkSGVhcFNpemVEZWx0YSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJl
dHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3QgU3RyaW5n
JiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNj
cmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmlu
Zygic2NyaXB0TmFtZSIsIHNjcmlwdE5hbWUpOwogICAgIGRhdGEtPnNldEludGVnZXIoInNjcmlw
dExpbmUiLCBzY3JpcHRMaW5lKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0
dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29uc29sZVByb2ZpbGVEYXRhKGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIGRhdGEtPnNldFN0cmluZygidGl0bGUiLCB0aXRsZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVs
ZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0
YShjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBhY3Rpb24sIHVuc2lnbmVkIHNhbXBsZUlk
KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9i
ZVNhbXBsZURhdGEoY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25l
ZCBzYW1wbGVJZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJh
bCgicHJvYmVJZCIpLCBhY3Rpb24uaWRlbnRpZmllcik7CiAgICAgZGF0YS0+c2V0SW50ZWdlcihB
U0NJSUxpdGVyYWwoInNhbXBsZUlkIiksIHNhbXBsZUlkKTsKLSAgICByZXR1cm4gZGF0YS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZlbnREaXNwYXRjaERh
dGEoY29uc3QgRXZlbnQmIGV2ZW50KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVFdmVudERpc3BhdGNoRGF0YShjb25zdCBFdmVudCYgZXZlbnQpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgZXZlbnQudHlwZSgpLnN0cmlu
ZygpKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShk
YXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGltZXJJZCkKK1JlZjxJbnNwZWN0b3JP
YmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQg
dGltZXJJZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0aW1lcklkIiwgdGlt
ZXJJZCk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUo
ZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBi
b29sIHNpbmdsZVNob3QpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29s
IHNpbmdsZVNob3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidGltZXJJZCIs
IHRpbWVySWQpOwogICAgIGRhdGEtPnNldEludGVnZXIoInRpbWVvdXQiLCB0aW1lb3V0KTsKICAg
ICBkYXRhLT5zZXRCb29sZWFuKCJzaW5nbGVTaG90Iiwgc2luZ2xlU2hvdCk7Ci0gICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUlJl
YWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0ZSkKK1Jl
ZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSUmVhZHlT
dGF0ZUNoYW5nZURhdGEoY29uc3QgU3RyaW5nJiB1cmwsIGludCByZWFkeVN0YXRlKQogewotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgICBkYXRhLT5zZXRJbnRl
Z2VyKCJyZWFkeVN0YXRlIiwgcmVhZHlTdGF0ZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgp
OworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUkxvYWREYXRhKGNvbnN0IFN0
cmluZyYgdXJsKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRh
LT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAg
IHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShjb25zdCBT
dHJpbmcmIHVybCwgZG91YmxlIGxpbmVOdW1iZXIpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcm
IHVybCwgZG91YmxlIGxpbmVOdW1iZXIpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5n
KCJ1cmwiLCB1cmwpOwogICAgIGRhdGEtPnNldEludGVnZXIoImxpbmVOdW1iZXIiLCBsaW5lTnVt
YmVyKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShk
YXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitSZWY8SW5z
cGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygi
bWVzc2FnZSIsIG1lc3NhZ2UpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29u
c3QgU3RyaW5nJiB1cmwpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHVybCkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0gICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291
cmNlU2VuZFJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZVJlc291cmNlU2VuZFJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0
YS0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldFN0cmlu
ZygidXJsIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJy
ZXF1ZXN0TWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOwotICAgIHJldHVybiBkYXRhLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2Vp
dmVSZXNwb25zZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IGRhdGEtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgICBkYXRhLT5zZXRJ
bnRlZ2VyKCJzdGF0dXNDb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAgICAgZGF0
YS0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHJlc3BvbnNlLm1pbWVUeXBlKCkpOwotICAgIHJldHVy
biBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNv
dXJjZUZpbmlzaERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGJvb2wgZGlkRmFpbCwgZG91
YmxlIGZpbmlzaFRpbWUpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9v
bCBkaWRGYWlsLCBkb3VibGUgZmluaXNoVGltZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRT
dHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigiZGlk
RmFpbCIsIGRpZEZhaWwpOwogICAgIGlmIChmaW5pc2hUaW1lKQogICAgICAgICBkYXRhLT5zZXRE
b3VibGUoIm5ldHdvcmtUaW1lIiwgZmluaXNoVGltZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFz
ZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlY2VpdmVSZXNvdXJjZURh
dGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGludCBsZW5ndGgpCitSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlY2VpdmVSZXNvdXJjZURhdGEoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGludCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+
c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldEludGVnZXIo
ImVuY29kZWREYXRhTGVuZ3RoIiwgbGVuZ3RoKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBk
aXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KQor
UmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVMYXlvdXRE
YXRhKHVuc2lnbmVkIGRpcnR5T2JqZWN0cywgdW5zaWduZWQgdG90YWxPYmplY3RzLCBib29sIHBh
cnRpYWxMYXlvdXQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigiZGlydHlPYmpl
Y3RzIiwgZGlydHlPYmplY3RzKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0b3RhbE9iamVjdHMi
LCB0b3RhbE9iamVjdHMpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oInBhcnRpYWxMYXlvdXQiLCBw
YXJ0aWFsTGF5b3V0KTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdU
Rjo6bW92ZShkYXRhKTsKIH0KLSAgICAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZURlY29kZUltYWdlRGF0YShjb25zdCBTdHJpbmcmIGlt
YWdlVHlwZSkKKworUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJpbWFnZVR5cGUiLCBpbWFnZVR5cGUpOwotICAgIHJldHVy
biBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNp
emVJbWFnZURhdGEoYm9vbCBzaG91bGRDYWNoZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigiY2FjaGVkIiwgc2hvdWxkQ2FjaGUp
OwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEp
OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKQorUmVmPEluc3BlY3Rvck9iamVjdD4g
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oImlzTWFpbkZyYW1lIiwgaXNNYWluRnJh
bWUpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRh
dGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVQYXJzZUhUTUxEYXRhKHVuc2lnbmVkIHN0YXJ0TGluZSkKK1JlZjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YSh1bnNp
Z25lZCBzdGFydExpbmUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigic3RhcnRM
aW5lIiwgc3RhcnRMaW5lKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJu
IFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRhKGludCBjYWxsYmFja0lk
KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVBbmlt
YXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNrSWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0
SW50ZWdlcigiaWQiLCBjYWxsYmFja0lkKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGNyZWF0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQpAQCAtMjU0LDE0ICsy
NTQsMTQgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZVF1YWQoY29u
c3QgRmxvYXRRdWFkJiBxdWFkKQogICAgIGFycmF5LT5wdXNoRG91YmxlKHF1YWQucDMoKS55KCkp
OwogICAgIGFycmF5LT5wdXNoRG91YmxlKHF1YWQucDQoKS54KCkpOwogICAgIGFycmF5LT5wdXNo
RG91YmxlKHF1YWQucDQoKS55KCkpOwotICAgIHJldHVybiBhcnJheS5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIFdURjo6bW92ZShhcnJheSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQm
IHF1YWQpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+
c2V0QXJyYXkoImNsaXAiLCBjcmVhdGVRdWFkKHF1YWQpKTsKLSAgICByZXR1cm4gZGF0YS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAogdm9pZCBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yT2JqZWN0KiBkYXRhLCBjb25z
dCBGbG9hdFF1YWQmIHF1YWQpCkBAIC0yNjksMjMgKzI2OSwyNCBAQCB2b2lkIFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChJbnNwZWN0b3JPYmplY3QqIGRhdGEsIGNvbnN0
IEZsb2F0UQogICAgIGRhdGEtPnNldEFycmF5KCJyb290IiwgY3JlYXRlUXVhZChxdWFkKSk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVD
YWxsPiBidWlsZEluc3BlY3Rvck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGVOb2RlOjpDYWxsJiBj
YWxsKQorc3RhdGljIFJlZjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD4g
YnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9kZTo6Q2FsbCYgY2FsbCkK
IHsKLSAgICBSZWZQdHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+IHJl
c3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsOjpjcmVhdGUoKQor
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbDo6Y3JlYXRl
KCkKICAgICAgICAgLnNldFN0YXJ0VGltZShjYWxsLnN0YXJ0VGltZSgpKQotICAgICAgICAuc2V0
VG90YWxUaW1lKGNhbGwuZWxhcHNlZFRpbWUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CisgICAgICAgIC5zZXRUb3RhbFRpbWUoY2FsbC5lbGFwc2VkVGltZSgpKQorICAgICAgICAu
cmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQ
VVByb2ZpbGVOb2RlPiBidWlsZEluc3BlY3Rvck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGVOb2Rl
KiBub2RlKQorc3RhdGljIFJlZjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBi
dWlsZEluc3BlY3Rvck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGVOb2RlKiBub2RlKQogewotICAg
IFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9k
ZUNhbGw+PiBjYWxscyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVBy
b2ZpbGVOb2RlQ2FsbD46OmNyZWF0ZSgpOworICAgIGF1dG8gY2FsbHMgPSBQcm90b2NvbDo6QXJy
YXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKGNvbnN0IEpTQzo6UHJvZmlsZU5vZGU6OkNhbGwmIGNhbGwgOiBub2RlLT5jYWxscygp
KQogICAgICAgICBjYWxscy0+YWRkSXRlbShidWlsZEluc3BlY3Rvck9iamVjdChjYWxsKSk7CiAK
LSAgICBSZWZQdHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4gcmVzdWx0ID0g
UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJl
c3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU6OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXRJZChub2RlLT5pZCgpKQotICAgICAgICAuc2V0Q2FsbHMoY2FsbHMucmVsZWFzZSgp
KTsKKyAgICAgICAgLnNldENhbGxzKFdURjo6bW92ZShjYWxscykpCisgICAgICAgIC5yZWxlYXNl
KCk7CiAKICAgICBpZiAoIW5vZGUtPmZ1bmN0aW9uTmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAg
cmVzdWx0LT5zZXRGdW5jdGlvbk5hbWUobm9kZS0+ZnVuY3Rpb25OYW1lKCkpOwpAQCAtMjk3LDI4
ICsyOTgsMjcgQEAgc3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9m
aWxlTm9kZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QKICAgICB9CiAKICAgICBpZiAoIW5v
ZGUtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQcm90b2NvbDo6QXJy
YXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4+IGNoaWxkcmVuID0gUHJvdG9j
b2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBjaGlsZHJlbiA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxp
bmU6OkNQVVByb2ZpbGVOb2RlPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoUmVmUHRyPEpTQzo6
UHJvZmlsZU5vZGU+IHByb2ZpbGVOb2RlIDogbm9kZS0+Y2hpbGRyZW4oKSkKICAgICAgICAgICAg
IGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkSW5zcGVjdG9yT2JqZWN0KHByb2ZpbGVOb2RlLmdldCgp
KSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworICAgICAgICByZXN1
bHQtPnNldENoaWxkcmVuKFdURjo6bW92ZShjaGlsZHJlbikpOwogICAgIH0KIAotICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlPiBidWlsZFBy
b2ZpbGVJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlKiBwcm9maWxlKQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU+IGJ1aWxkUHJvZmlsZUluc3BlY3Rv
ck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGUqIHByb2ZpbGUpCiB7Ci0gICAgUmVmUHRyPFByb3Rv
Y29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPj4gcm9vdE5vZGVz
ID0gUHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIHJvb3ROb2RlcyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6
VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChSZWZQdHI8SlND
OjpQcm9maWxlTm9kZT4gcHJvZmlsZU5vZGUgOiBwcm9maWxlLT5yb290Tm9kZSgpLT5jaGlsZHJl
bigpKQogICAgICAgICByb290Tm9kZXMtPmFkZEl0ZW0oYnVpbGRJbnNwZWN0b3JPYmplY3QocHJv
ZmlsZU5vZGUuZ2V0KCkpKTsKIAotICAgIFJlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVBy
b2ZpbGU+IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZTo6Y3JlYXRlKCkK
LSAgICAgICAgLnNldFJvb3ROb2Rlcyhyb290Tm9kZXMpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZTo6Y3Jl
YXRlKCkKKyAgICAgICAgLnNldFJvb3ROb2RlcyhXVEY6Om1vdmUocm9vdE5vZGVzKSkKKyAgICAg
ICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFBy
b2ZpbGUoSW5zcGVjdG9yT2JqZWN0KiBkYXRhLCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gcHJv
ZmlsZSkKK3ZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRQcm9maWxlKEluc3BlY3Rv
ck9iamVjdCogZGF0YSwgUmVmUHRyPEpTQzo6UHJvZmlsZT4mJiBwcm9maWxlKQogewogICAgIGRh
dGEtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicHJvZmlsZSIpLCBidWlsZFByb2ZpbGVJbnNwZWN0
b3JPYmplY3QocHJvZmlsZS5nZXQoKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oCmluZGV4IGJiNWI5ZTguLjBlZjU2OTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAg
LTU1LDc0ICs1NSw3NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBUaW1lbGlu
ZVJlY29yZEZhY3RvcnkgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0
YXJ0VGltZSwgaW50IG1heENhbGxTdGFja0RlcHRoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91
YmxlIHN0YXJ0VGltZSwgY29uc3QgU3RyaW5nJiB0aHJlYWQpOworICAgICAgICBzdGF0aWMgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljUmVjb3JkKGRvdWJsZSBz
dGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91YmxlIHN0
YXJ0VGltZSwgY29uc3QgU3RyaW5nJiB0aHJlYWQpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBz
aXplX3QgdXNlZEhlYXBTaXplRGVsdGEpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhlYXBT
aXplRGVsdGEpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFt
ZSwgaW50IHNjcmlwdExpbmUpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlQ29uc29sZVByb2ZpbGVEYXRhKGNvbnN0IFN0cmluZyYg
dGl0bGUpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlw
dExpbmUpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVDb25zb2xlUHJvZmlsZURhdGEoY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2Jl
U2FtcGxlRGF0YShjb25zdCBJbnNwZWN0b3I6OlNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mLCB1bnNp
Z25lZCBzYW1wbGVJZCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZVByb2JlU2FtcGxlRGF0YShjb25zdCBJbnNwZWN0b3I6OlNjcmlwdEJyZWFr
cG9pbnRBY3Rpb24mLCB1bnNpZ25lZCBzYW1wbGVJZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRh
KGNvbnN0IEV2ZW50Jik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50Jik7CiAKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUdlbmVy
aWNUaW1lckRhdGEoaW50IHRpbWVySWQpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljVGltZXJEYXRhKGludCB0aW1lcklkKTsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlVGltZXJJbnN0YWxsRGF0YShpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xl
U2hvdCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmds
ZVNob3QpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwg
aW50IHJlYWR5U3RhdGUpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwg
aW50IHJlYWR5U3RhdGUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCk7Cisg
ICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVhIUkxv
YWREYXRhKGNvbnN0IFN0cmluZyYgdXJsKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0
IFN0cmluZyYsIGRvdWJsZSBsaW5lTnVtYmVyKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0cmlu
ZyYsIGRvdWJsZSBsaW5lTnVtYmVyKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcm
KTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRl
VGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERh
dGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAg
ICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJj
ZVNlbmRSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcm
KTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRl
U2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJj
ZVJlY2VpdmVSZXNwb25zZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gY3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlY2VpdmVSZXNvdXJjZURh
dGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGludCBsZW5ndGgpOworICAgICAgICBzdGF0aWMg
UmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZWNlaXZlUmVzb3VyY2VEYXRh
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKTsKIAotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzb3VyY2VGaW5p
c2hEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBib29sIGRpZEZhaWwsIGRvdWJsZSBmaW5p
c2hUaW1lKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
Y3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBib29sIGRp
ZEZhaWwsIGRvdWJsZSBmaW5pc2hUaW1lKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0
eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KTsKKyAg
ICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlTGF5b3V0
RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0cywgYm9vbCBw
YXJ0aWFsTGF5b3V0KTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gY3JlYXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VU
eXBlKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKTsKIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzaXpl
SW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNpemVJbWFnZURhdGEoYm9vbCBzaG91bGRDYWNo
ZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZU1hcmtEYXRhKGJvb2wgaXNNYWluRnJhbWUpOworICAgICAgICBzdGF0aWMgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZy
YW1lKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gY3JlYXRlUGFyc2VIVE1MRGF0YSh1bnNpZ25lZCBzdGFydExpbmUpOworICAgICAgICBz
dGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQYXJzZUhUTUxEYXRh
KHVuc2lnbmVkIHN0YXJ0TGluZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQgY2FsbGJh
Y2tJZCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQgY2FsbGJhY2tJZCk7CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVBhaW50RGF0YShj
b25zdCBGbG9hdFF1YWQmKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlUGFpbnREYXRhKGNvbnN0IEZsb2F0UXVhZCYpOwogCiAgICAgICAgIHN0
YXRpYyB2b2lkIGFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGRh
dGEsIGNvbnN0IEZsb2F0UXVhZCYpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGFwcGVuZFByb2Zp
bGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqLCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4p
OworICAgICAgICBzdGF0aWMgdm9pZCBhcHBlbmRQcm9maWxlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KiwgUmVmUHRyPEpTQzo6UHJvZmlsZT4mJik7CiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tF
VFMpCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlV2ViU29ja2V0Q3JlYXRlRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQorICAgICAgICBzdGF0
aWMgaW5saW5lIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlV2ViU29ja2V0
Q3JlYXRlRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sKQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBk
YXRhLT5zZXRJbnRlZ2VyKCJpZGVudGlmaWVyIiwgaWRlbnRpZmllcik7CiAgICAgICAgICAgICBk
YXRhLT5zZXRTdHJpbmcoInVybCIsIHVybC5zdHJpbmcoKSk7CiAgICAgICAgICAgICBpZiAoIXBy
b3RvY29sLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygid2ViU29j
a2V0UHJvdG9jb2wiLCBwcm90b2NvbCk7Ci0gICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNl
KCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVHZW5lcmljV2ViU29ja2V0RGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCisg
ICAgICAgIHN0YXRpYyBpbmxpbmUgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVh
dGVHZW5lcmljV2ViU29ja2V0RGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIFJlZjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGRhdGEtPnNldEludGVnZXIoImlkZW50aWZpZXIi
LCBpZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKaW5kZXggYWJhOThkMi4uMGQ1YjEzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtMTcyLDkgKzE3Miw5IEBAIHZvaWQgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ2Fs
bEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqIHNjCiAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxTdG9wd2F0Y2g+IFdvcmtlckluc3BlY3RvckNvbnRy
b2xsZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCgpCitSZWY8U3RvcHdhdGNoPiBXb3JrZXJJbnNwZWN0
b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQogewotICAgIHJldHVybiBtX2V4ZWN1
dGlvblN0b3B3YXRjaDsKKyAgICByZXR1cm4gbV9leGVjdXRpb25TdG9wd2F0Y2guY29weVJlZigp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBkNDk5YTE5Li5lOTQ4
MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0
b3JDb250cm9sbGVyLmgKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgpIG92ZXJyaWRlIHsg
fQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdh
dGNoKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBSZWY8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlv
blN0b3B3YXRjaCgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb247CkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgV29y
a2VyUnVudGltZUFnZW50KiBtX3J1bnRpbWVBZ2VudDsKICAgICBJbnNwZWN0b3I6Okluc3BlY3Rv
ckFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbD4gbV9mcm9udGVuZENoYW5uZWw7Ci0gICAgUmVmUHRyPFdURjo6U3RvcHdh
dGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKKyAgICBSZWY8V1RGOjpTdG9wd2F0Y2g+IG1fZXhl
Y3V0aW9uU3RvcHdhdGNoOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIFZlY3RvcjxJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUsIDI+IG1faW5qZWN0ZWRTY3JpcHRJbnN0cnVtZW50YXRpb25Db29r
aWVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGll
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXgg
Y2VjYWYxZi4uZjA3Mjc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29u
c29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVu
dC5jcHAKQEAgLTEwNiwxOCArMTA2LDE4IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1l
c3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uCiAgICAg
YWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCB1cmwsIGxpbmUsIGNvbHVtbiwgMCwg
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSwgcmVxdWVzdElkZW50aWZpZXIp
OwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6
OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaykK
IHsKLSAgICBhZGRNZXNzYWdlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIFN0cmluZygpLCAwLCAw
LCBjYWxsU3RhY2ssIDApOworICAgIGFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwg
U3RyaW5nKCksIDAsIDAsIFdURjo6bW92ZShjYWxsU3RhY2spLCAwKTsKIH0KIAotdm9pZCBQYWdl
Q29uc29sZUNsaWVudDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVybCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQg
Y29sdW1uTnVtYmVyLCBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAg
IGlmIChtdXRlQ291bnQgJiYgc291cmNlICE9IE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChjYWxsU3RhY2spCi0gICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShtX3BhZ2UsIHNvdXJjZSwgTWVzc2Fn
ZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIp
OworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
bV9wYWdlLCBzb3VyY2UsIE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBXVEY6Om1v
dmUoY2FsbFN0YWNrKSwgcmVxdWVzdElkZW50aWZpZXIpOwogICAgIGVsc2UKICAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKG1fcGFnZSwgc291cmNl
LCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2FnZSwgdXJsLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CiAKQEAgLTEzNiwxMyArMTM2LDEx
IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uCiB9CiAKIAotdm9pZCBQYWdlQ29uc29sZUNsaWVu
dDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4gcHJwQXJndW1lbnRzKQordm9pZCBQYWdlQ29uc29sZUNsaWVudDo6bWVzc2Fn
ZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYm
IGFyZ3VtZW50cykKIHsKLSAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMgPSBw
cnBBcmd1bWVudHM7Ci0KICAgICBTdHJpbmcgbWVzc2FnZTsKICAgICBib29sIGdvdE1lc3NhZ2Ug
PSBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1lbnRBc1N0cmluZyhtZXNzYWdlKTsKLSAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUobV9wYWdlLCBNZXNzYWdl
U291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgZXhlYywgYXJndW1lbnRz
KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUobV9w
YWdlLCBNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgZXhl
YywgV1RGOjptb3ZlKGFyZ3VtZW50cykpOwogCiAgICAgaWYgKG1fcGFnZS51c2VzRXBoZW1lcmFs
U2Vzc2lvbigpKQogICAgICAgICByZXR1cm47CkBAIC0xNTUsMTIgKzE1MywxMiBAQCB2b2lkIFBh
Z2VDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBl
LCBNZXNzYWdlTGV2ZWwgbAogICAgIH0KIAogICAgIGlmIChtX3BhZ2Uuc2V0dGluZ3MoKS5sb2dz
UGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCgpIHx8IFBhZ2VDb25zb2xlQ2xpZW50
OjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKLSAgICAgICAgQ29uc29sZUNsaWVudDo6cHJpbnRD
b25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlw
ZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cy5yZWxlYXNlKCkpOworICAgICAgICBDb25zb2xlQ2xp
ZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25z
b2xlQVBJLCB0eXBlLCBsZXZlbCwgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cykpOwogfQogCi12
b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6
OmNvdW50KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFy
Z3VtZW50cykKIHsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudCht
X3BhZ2UsIGV4ZWMsIGFyZ3VtZW50cyk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
b25zb2xlQ291bnQobV9wYWdlLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSk7CiB9CiAKIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgdGl0bGUpCkBAIC0xNzEsNyArMTY5LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVu
dDo6cHJvZmlsZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgaWYgKFJlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2Zp
bGUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmcobV9wYWdlLCBleGVj
LCB0aXRsZSkpCi0gICAgICAgIG1fcHJvZmlsZXMuYXBwZW5kKHByb2ZpbGUucmVsZWFzZSgpKTsK
KyAgICAgICAgbV9wcm9maWxlcy5hcHBlbmQoV1RGOjptb3ZlKHByb2ZpbGUpKTsKIH0KIAogdm9p
ZCBQYWdlQ29uc29sZUNsaWVudDo6dGltZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYg
dGl0bGUpCkBAIC0xODIsMTIgKzE4MCwxMiBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1l
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHZvaWQgUGFnZUNvbnNvbGVD
bGllbnQ6OnRpbWVFbmQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUp
CiB7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENh
bGxTdGFja0ZvckNvbnNvbGUoZXhlYywgMSkpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c3RvcENvbnNvbGVUaW1pbmcobV9wYWdlLm1haW5GcmFtZSgpLCB0aXRsZSwgY2FsbFN0YWNr
LnJlbGVhc2UoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRp
bWluZyhtX3BhZ2UubWFpbkZyYW1lKCksIHRpdGxlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSk7CiB9
CiAKLXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFBh
c3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIFBhZ2VDb25zb2xlQ2xp
ZW50Ojp0aW1lU3RhbXAoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYm
IGFyZ3VtZW50cykKIHsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1l
U3RhbXAobV9wYWdlLm1haW5GcmFtZSgpLCBhcmd1bWVudHMpOworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcChtX3BhZ2UubWFpbkZyYW1lKCksIFdURjo6bW92
ZShhcmd1bWVudHMpKTsKIH0KIAogdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6Y2xlYXJQcm9maWxl
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmgKaW5kZXggYjZmNjE5OS4u
YjJkNDdlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuaApAQCAtNTYs
MjEgKzU2LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBtdXRlKCk7CiAgICAgc3RhdGlj
IHZvaWQgdW5tdXRlKCk7CiAKLSAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+ID0gbnVsbHB0ciwgSlNDOjpFeGVjU3RhdGUqID0g
bnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwotICAgIHZvaWQg
YWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pOworICAgIHZvaWQg
YWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmID0g
bnVsbHB0ciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllciA9IDApOworICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrPiYmKTsKICAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIgPSAwLCBEb2N1bWVudCogPSBudWxscHRyKTsKIAogICAgIGNvbnN0IFByb2ZpbGVzQXJy
YXkmIHByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlczsgfQogICAgIHZvaWQgY2xl
YXJQcm9maWxlcygpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZVdpdGhU
eXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4mJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHByb2ZpbGUoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
cHJvZmlsZUVuZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCB0aW1lKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0
aXRsZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHRpbWVFbmQoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdGltZVN0
YW1wKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAoSlNDOjpFeGVjU3RhdGUq
LCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgogICAgIFBhZ2UmIG1fcGFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxh
eS9SZXBsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250
cm9sbGVyLmNwcAppbmRleCAxMzlmMDVjLi4wNDU3ZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBSZXBsYXlD
b250cm9sbGVyOjpzd2l0Y2hTZXNzaW9uKFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lv
bikKICAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFJlcGxheVBvc2l0aW9uKDAsIDApOwogCiAgICAg
TE9HKFdlYlJlcGxheSwgIiUtMjBzU3dpdGNoaW5nIHNlc3Npb25zIGZyb20gJXAgdG8gJXAuXG4i
LCAiUmVwbGF5Q29udHJvbGxlciIsIG1fbG9hZGVkU2Vzc2lvbi5nZXQoKSwgc2Vzc2lvbi5nZXQo
KSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkKG1fcGFnZSwg
bV9sb2FkZWRTZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25M
b2FkZWQobV9wYWdlLCBtX2xvYWRlZFNlc3Npb24uY29weVJlZigpKTsKIH0KIAogdm9pZCBSZXBs
YXlDb250cm9sbGVyOjpjcmVhdGVTZWdtZW50KCkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFJl
cGxheUNvbnRyb2xsZXI6OmNyZWF0ZVNlZ21lbnQoKQogICAgIG1fbG9hZGVkU2VnbWVudCA9IFJl
cGxheVNlc3Npb25TZWdtZW50OjpjcmVhdGUoKTsKIAogICAgIExPRyhXZWJSZXBsYXksICIlLTIw
cyBDcmVhdGVkIHNlZ21lbnQ6ICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBtX2xvYWRlZFNl
Z21lbnQuZ2V0KCkpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0
ZWQobV9wYWdlLCBtX2xvYWRlZFNlZ21lbnQpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c2VnbWVudENyZWF0ZWQobV9wYWdlLCBtX2xvYWRlZFNlZ21lbnQuY29weVJlZigpKTsKIAog
ICAgIG1fYWN0aXZlQ3Vyc29yID0gQ2FwdHVyaW5nSW5wdXRDdXJzb3I6OmNyZWF0ZShtX2xvYWRl
ZFNlZ21lbnQpOwogICAgIG1fYWN0aXZlQ3Vyc29yLT5hcHBlbmRJbnB1dDxCZWdpblNlZ21lbnRT
ZW50aW5lbD4oKTsKQEAgLTI0NywxMCArMjQ3LDEwIEBAIHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6
Y29tcGxldGVTZWdtZW50KCkKICAgICB1bmxvYWRTZWdtZW50KHNob3VsZFN1cHByZXNzTm90aWZp
Y2F0aW9ucyk7CiAKICAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgQ29tcGxldGVkIHNlZ21lbnQ6
ICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBzZWdtZW50LmdldCgpKTsKLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWQobV9wYWdlLCBzZWdtZW50KTsKKyAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWQobV9wYWdlLCBzZWdt
ZW50LmNvcHlSZWYoKSk7CiAKICAgICBtX2xvYWRlZFNlc3Npb24tPmFwcGVuZFNlZ21lbnQoc2Vn
bWVudCk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTW9kaWZpZWQobV9w
YWdlLCBtX2xvYWRlZFNlc3Npb24pOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vz
c2lvbk1vZGlmaWVkKG1fcGFnZSwgbV9sb2FkZWRTZXNzaW9uLmNvcHlSZWYoKSk7CiB9CiAKIHZv
aWQgUmVwbGF5Q29udHJvbGxlcjo6bG9hZFNlZ21lbnRBdEluZGV4KHNpemVfdCBzZWdtZW50SW5k
ZXgpCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBSZXBsYXlDb250cm9sbGVyOjpsb2FkU2VnbWVu
dEF0SW5kZXgoc2l6ZV90IHNlZ21lbnRJbmRleCkKICAgICBtX2FjdGl2ZUN1cnNvciA9IFJlcGxh
eWluZ0lucHV0Q3Vyc29yOjpjcmVhdGUobV9sb2FkZWRTZWdtZW50LCBtX3BhZ2UsIHRoaXMpOwog
CiAgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzTG9hZGluZyBzZWdtZW50OiAlcC5cbiIsICJSZXBs
YXlDb250cm9sbGVyIiwgc2VnbWVudC5nZXQoKSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZWdtZW50TG9hZGVkKG1fcGFnZSwgc2VnbWVudCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkKG1fcGFnZSwgc2VnbWVudC5jb3B5UmVmKCkpOwogfQog
CiB2b2lkIFJlcGxheUNvbnRyb2xsZXI6OnVubG9hZFNlZ21lbnQoYm9vbCBzdXBwcmVzc05vdGlm
aWNhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRD
cmVhdGlvbk1ldGhvZHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3Jl
YXRpb25NZXRob2RzLmNwcAppbmRleCAwZWQzZTIzLi5iNGQxYzNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAKQEAgLTQ2
LDcgKzQ2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxOYXZpZ2F0aW9uPiBJbml0aWFsTmF2
aWdhdGlvbjo6Y3JlYXRlRnJvbVBhZ2UoY29uc3QgUGFnZSYKICAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbkNvcHkgPSBtYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+aXNvbGF0ZWRDb3B5KCk7CiAgICAgVVJMIHVybCA9IG1haW5GcmFtZS5kb2N1bWVudCgpLT51
cmwoKTsKICAgICBTdHJpbmcgcmVmZXJyZXIgPSBtYWluRnJhbWUubG9hZGVyKCkucmVmZXJyZXIo
KTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbml0aWFsTmF2aWdhdGlvbj4ob3JpZ2lu
Q29weSwgdXJsLCByZWZlcnJlcik7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5pdGlh
bE5hdmlnYXRpb24+KFdURjo6bW92ZShvcmlnaW5Db3B5KSwgdXJsLCByZWZlcnJlcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9T
aGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5kZXggNjc0NjAzOS4uNTNjYjcxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAK
QEAgLTc5LDEwICs3OSwxMCBAQCBTaGFyZWRXb3JrZXJUaHJlYWQmIFNoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlOjp0aHJlYWQoKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTaGFyZWRXb3JrZXJUaHJl
YWQmPihCYXNlOjp0aHJlYWQoKSk7CiB9CiAKLXZvaWQgU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6
OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIFNoYXJl
ZFdvcmtlckdsb2JhbFNjb3BlOjpsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxT
dGFjaykKIHsKLSAgICBXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGVy
cm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFj
ayk7Ci0gICAgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlOjpKUywgTWVz
c2FnZUxldmVsOjpFcnJvciwgZXJyb3JNZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlciwgY2FsbFN0YWNrKTsKKyAgICBXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0
aW9uVG9Db25zb2xlKGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIsIGNhbGxTdGFjay5jb3B5UmVmKCkpOworICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNv
bGUoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjay5jb3B5UmVmKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggYzMzNWIyZi4uMTgxYTI5NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaApA
QCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFVS
TCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBTaGFyZWRXb3JrZXJUaHJlYWQmKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29s
dW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPikgb3ZlcnJp
ZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJl
ciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYm
KSBvdmVycmlkZTsKIAogICAgICAgICBTdHJpbmcgbV9uYW1lOwogICAgIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4IDQ1MmNlYjUuLmEwYjQ3
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBA
IC0yMTQsNyArMjE0LDcgQEAgRXZlbnRUYXJnZXQqIFdvcmtlckdsb2JhbFNjb3BlOjplcnJvckV2
ZW50VGFyZ2V0KCkKICAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBXb3JrZXJHbG9iYWxTY29w
ZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBh
c3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPikKK3ZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmxvZ0V4
Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiYmKQogewogICAgIHRocmVhZCgpLndvcmtlclJlcG9ydGluZ1Byb3h5KCku
cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBzb3VyY2VVUkwpOwogfQpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgV29ya2Vy
R2xvYmFsU2NvcGU6OmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlTGV2ZWwgbGV2CiAgICAgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShzb3VyY2UsIGxldmVs
LCBtZXNzYWdlLCBTdHJpbmcoKSwgMCwgMCwgMCwgMCwgcmVxdWVzdElkZW50aWZpZXIpOwogfQog
Ci12b2lkIFdvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
UGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBXb3JrZXJHbG9iYWxT
Y29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKCFpc0NvbnRleHRUaHJlYWQoKSkgewogICAgICAg
ICBwb3N0VGFzayhBZGRDb25zb2xlTWVzc2FnZVRhc2soc291cmNlLCBsZXZlbCwgU3RyaW5nQ2Fw
dHVyZShtZXNzYWdlKSkpOwpAQCAtMjM4LDE0ICsyMzgsMTQgQEAgdm9pZCBXb3JrZXJHbG9iYWxT
Y29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb24KICAgICB9CiAKICAgICB0aHJlYWQoKS53b3JrZXJSZXBvcnRpbmdQcm94eSgpLnBvc3RD
b25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMKTsKLSAgICBhZGRNZXNzYWdlVG9Xb3JrZXJD
b25zb2xlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBjYWxsU3RhY2ssIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgYWRk
TWVzc2FnZVRvV29ya2VyQ29uc29sZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBzb3VyY2VVUkws
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgV1RGOjptb3ZlKGNhbGxTdGFjayksIHN0YXRlLCBy
ZXF1ZXN0SWRlbnRpZmllcik7CiB9CiAKLXZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmFkZE1lc3Nh
Z2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4gY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCit2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlVG9X
b3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4m
JiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwogICAgIGlmIChj
YWxsU3RhY2spCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRv
Q29uc29sZSh0aGlzLCBzb3VyY2UsIE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBj
YWxsU3RhY2ssIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHRoaXMsIHNvdXJjZSwgTWVzc2FnZVR5cGU6Okxv
ZywgbGV2ZWwsIG1lc3NhZ2UsIFdURjo6bW92ZShjYWxsU3RhY2spLCByZXF1ZXN0SWRlbnRpZmll
cik7CiAgICAgZWxzZQogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3Nh
Z2VUb0NvbnNvbGUodGhpcywgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2Fn
ZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRl
bnRpZmllcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgK
aW5kZXggNmY3NDZlYi4uNDg2YWFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
R2xvYmFsU2NvcGUuaApAQCAtMTQyLDggKzE0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgV29ya2VyR2xvYmFsU2NvcGUoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIFdvcmtlclRocmVhZCYsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRvcE9yaWdpbik7
CiAgICAgICAgIHZvaWQgYXBwbHlDb250ZW50U2VjdXJpdHlQb2xpY3lGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okhl
YWRlclR5cGUpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUo
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dENhbGxTdGFjaz4pIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGFkZE1lc3NhZ2VUb1dvcmtlckNv
bnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBKU0M6
OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKSBvdmVy
cmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVu
c2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgb3ZlcnJpZGUgeyBy
ZWYoKTsgfQpAQCAtMTUyLDcgKzE1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyByZWYoKTsgfQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsg
ZGVyZWYoKTsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApIG92ZXJyaWRlOworICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVu
dGlmaWVyID0gMCkgb3ZlcnJpZGU7CiAKICAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldCogZXJy
b3JFdmVudFRhcmdldCgpIG92ZXJyaWRlOwogCg==
</data>
<flag name="review"
          id="268918"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="268919"
          type_id="3"
          status="-"
          setter="burg"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244096</attachid>
            <date>2015-01-06 14:29:10 -0800</date>
            <delta_ts>2015-01-06 19:23:16 -0800</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>140053.patch</filename>
            <type>text/plain</type>
            <size>633023</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDJhOTg2ODUuLmI3YTZhNjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxNS0wMS0wNiAgQnJpYW4gSi4gQnVy
ZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHVy
Z2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZvciB0eXBlZCBh
bmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFz
IEtsaW5nLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdXNlcyBvZiBQYXNzUmVmUHRy
IHdpdGggdXNlcyBvZiBSZWZQdHImJiBhbmQgV1RGOjptb3ZlKCkgaW4gY29kZQorICAgICAgICBy
ZWxhdGVkIHRvIFdlYiBJbnNwZWN0b3IuIEl0IGFsc28gY29udmVydHMgbWFueSB1c2VzIG9mIFJl
ZlB0ciB0byBSZWYgd2hlcmUKKyAgICAgICAgcmVmZXJlbmNlcyBhcmUgYWx3YXlzIG5vbi1udWxs
LiBUaGVzZSB0d28gcmVmYWN0b3JpbmdzIGhhdmUgYmVlbiBjb21iaW5lZCBzaW5jZQorICAgICAg
ICB0aGV5IHRlbmQgdG8gcmVxdWlyZSBzaW1pbGFyIGNoYW5nZXMgdG8gdGhlIGNvZGUuCisKKyAg
ICAgICAgQ3JlYXRpb24gbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyBvZiBJbnNwZWN0b3JWYWx1ZSBu
b3cgcmV0dXJuIGEgUmVmLCBhbmQgY2FsbHNpdGVzCisgICAgICAgIGhhdmUgYmVlbiB1cGRhdGVk
IHRvIHRha2UgYSBSZWYgaW5zdGVhZCBvZiBSZWZQdHIuCisKKyAgICAgICAgQnVpbGRlcnMgZm9y
IHR5cGVkIHByb3RvY29sIG9iamVjdHMgbm93IHJldHVybiBhIFJlZi4gU2luY2UgdGhlcmUgaXMg
bm8gaW1wbGljaXQKKyAgICAgICAgY2FsbCB0byBvcGVyYXRvciYsIGNhbGxzaXRlcyBub3cgbXVz
dCBleHBsaWNpdGx5IGNhbGwgLnJlbGVhc2UoKSB0byBjb252ZXJ0IGEKKyAgICAgICAgYnVpbGRl
ciBvYmplY3QgaW50byB0aGUgY29ycmVzcG9uZGluZyBwcm90b2NvbCBvYmplY3Qgb25jZSByZXF1
aXJlZCBmaWVsZHMgYXJlIHNldC4KKyAgICAgICAgVXBkYXRlIGNhbGxzaXRlcyBhbmQgdXNlIGF1
dG8gdG8gZWxpbWluYXRlIHJlcGV0aXRpb24gb2YgbG9uZ3dpbmRlZCBwcm90b2NvbCB0eXBlcy4K
KworICAgICAgICBUZXN0cyBmb3IgaW5zcGVjdG9yIHByb3RvY29sIGFuZCByZXBsYXkgaW5wdXRz
IGhhdmUgYmVlbiByZWJhc2VsaW5lZC4KKworICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OmpzVG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAg
IChEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICog
YmluZGluZ3MvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpidWlsZE9iamVjdEZvclNl
YXJjaE1hdGNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Q29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlsaXRpZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QpOgorICAgICAgICAoSW5z
cGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNl
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENh
bGwpOiBTcGxpdCB0aGUgZWFybHkgZXhpdHMuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZElm
QWN0aXZlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZW5kUmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcik6CisgICAgICAgIChJbnNwZWN0b3I6Omdl
dFByb3BlcnR5VmFsdWUpOiBBZGQgYSBjb21tZW50IHRvIGNsYXJpZnkgd2hhdCB0aGlzIGNsZXZl
ciBjb2RlIGRvZXMuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOiBVc2UgYSB0eXBlZCBwcm90b2NvbCBv
YmplY3QgdG8gY29sbGVjdAorICAgICAgICBwcm90b2NvbCBlcnJvciBzdHJpbmdzLgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIpOgorICAgICAgICBDb252ZXJ0IHRo
ZSBzdXBwbGVtZW50YWwgZGlzcGF0Y2hlcidzIHJlZmVyZW5jZSB0byBSZWYgc2luY2UgaXQgaXMg
bmV2ZXIgbnVsbC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oOiBHZXQgcmlkIG9m
IEFycmF5SXRlbUhlbHBlciBhbmQKKyAgICAgICAgU3RydWN0SXRlbVRyYWl0cy4gQWRkIG1vcmUg
dmVyc2lvbnMgb2YgYWRkSXRlbSB0byBoYW5kbGUgcHVzaGluZyB2YXJpb3VzIHR5cGVzLgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6Om9wZW5BY2Nlc3NvcnMpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpTdHJ1Y3RJdGVtVHJhaXRzOjpwdXNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkFycmF5PFQ+Pjo6cnVudGltZUNhc3QpOiBBc3Nl
cnQgYXJndW1lbnQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJh
aXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5SXRlbUhlbHBlcjxTdHJpbmc+OjpUcmFpdHM6OnB1c2hSYXcpOiBEZWxldGVkLgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0czo6
cHVzaFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0
ZW1IZWxwZXI8ZG91YmxlPjo6VHJhaXRzOjpwdXNoUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBlcjxib29sPjo6VHJhaXRzOjpwdXNoUmF3
KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBl
cjxJbnNwZWN0b3JWYWx1ZT46OlRyYWl0czo6cHVzaFJlZlB0cik6IERlbGV0ZWQuCisgICAgICAg
IChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0Pjo6
VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT46OlRyYWl0czo6cHVzaFJlZlB0cik6
IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8
UHJvdG9jb2w6OkFycmF5PFQ+Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDogU3RyYWlnaHRlbiBvdXQgZ2V0QXJy
YXkgYW5kIGdldE9iamVjdCB0byBoYXZlCisgICAgICAgIHRoZSBzYW1lIGNhbGwgc2lnbmF0dXJl
IGFzIG90aGVyIGdldHRlcnMuIFVzZSBSZWYgd2hlcmUgcG9zc2libGUuCisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xlYW4pOgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2U6OmdldFZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXlCYXNlOjpnZXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5OjpjcmVhdGUpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6bnVsbCk6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZTo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaE9iamVjdCk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaEFycmF5KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVFbmQp
OgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVT
dGFtcCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxs
RnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkSW5z
cGVjdG9yT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrOjpidWlsZEluc3BlY3RvckFycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2Ny
aXB0Q2FsbFN0YWNrLmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50OjplbmFibGUpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdCk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWluKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2VydCk6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZSk6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZl
QnJlYWtwb2ludCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1ApOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcyk6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291
cmNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtw
b2ludEFjdGlvblByb2JlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmJ1aWxkRXJyb3JSYW5nZU9iamVj
dCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0
aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1
bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdl
bmVyYXRvcik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3luY19oYW5k
bGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9t
YWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQpOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFy
YXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcik6
CisgICAgICAgIChfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJh
aXRzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19m
b3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChP
YmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2
ZW50KToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogcmVwbGF5L0VuY29kZWRWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6YXNPYmplY3QpOgorICAgICAgICAo
SlNDOjpFbmNvZGVkVmFsdWU6OmFzQXJyYXkpOgorICAgICAgICAoSlNDOjpFbmNvZGVkVmFsdWU6
OnB1dDxFbmNvZGVkVmFsdWU+KToKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphcHBlbmQ8
RW5jb2RlZFZhbHVlPik6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRW
YWx1ZT4pOgorICAgICAgICAqIHJlcGxheS9FbmNvZGVkVmFsdWUuaDoKKyAgICAgICAgKiByZXBs
YXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5OgorICAgICAgICAoVHlwZS5i
b3Jyb3dfdHlwZSk6CisgICAgICAgIChUeXBlLmFyZ3VtZW50X3R5cGUpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmdlbmVyYXRlX21lbWJlcl9tb3ZlX2V4cHJlc3Npb24pOgorICAgICAgICAqIHJ1bnRp
bWUvQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OnByaW50
Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVu
dDo6aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6CisgICAgICAgIChKU0M6OkNvbnNv
bGVDbGllbnQ6OmxvZ1dpdGhMZXZlbCk6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OmNs
ZWFyKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6ZGlyKToKKyAgICAgICAgKEpTQzo6
Q29uc29sZUNsaWVudDo6ZGlyWE1MKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6dGFi
bGUpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojp0cmFjZSk6CisgICAgICAgIChKU0M6
OkNvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkNvbnNvbGVD
bGllbnQ6Omdyb3VwKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6Z3JvdXBDb2xsYXBz
ZWQpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojpncm91cEVuZCk6CisgICAgICAgICog
cnVudGltZS9Db25zb2xlQ2xpZW50Lmg6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0LmNwcDoK
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKToKKyAg
ICAgICAgKEpTQzo6VHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0Lmg6CisKIDIwMTUtMDEtMDYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBVc2UgZGV0YWlscyBmb3Igb3BfY3JlYXRlX2FyZ3VtZW50cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQw
NDZhYjIuLjllMjI1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1Nj
cmlwdFZhbHVlLmNwcApAQCAtOTgsNyArOTgsNyBAQCBib29sIFNjcmlwdFZhbHVlOjppc0Z1bmN0
aW9uKCkgY29uc3QKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1zdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3Rh
dGUsIEpTVmFsdWUgdmFsdWUsIGludCBtYXhEZXB0aCkKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU1ZhbHVl
IHZhbHVlLCBpbnQgbWF4RGVwdGgpCiB7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUs
IEpTVgogCiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKGlzSlNBcnJh
eSh2YWx1ZSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5zcGVjdG9y
QXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVj
dG9yQXJyYXk+IGluc3BlY3RvckFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTMxLDExICsxMzEsMTEgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShFeGVjU3RhdGUq
IHNjcmlwdFN0YXRlLCBKU1YKICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgZWxlbWVudCwg
bWF4RGVwdGgpOwogICAgICAgICAgICAgICAgIGlmICghZWxlbWVudFZhbHVlKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpbnNwZWN0b3JBcnJh
eS0+cHVzaFZhbHVlKGVsZW1lbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJy
YXktPnB1c2hWYWx1ZShXVEY6Om1vdmUoZWxlbWVudFZhbHVlKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gaW5zcGVjdG9yQXJyYXk7CisgICAgICAgICAgICByZXR1cm4gV1RG
Ojptb3ZlKGluc3BlY3RvckFycmF5KTsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBpbnNwZWN0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBpbnNwZWN0b3JPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2Jq
ZWN0KCk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoc2NyaXB0U3Rh
dGUpOwogICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBzY3JpcHRTdGF0ZSwgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVy
dGllcyk7CkBAIC0xNDUsMTYgKzE0NSwxNiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVgogICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNw
ZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgcHJvcGVydHlWYWx1ZSwgbWF4RGVwdGgpOwogICAgICAg
ICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIGluc3BlY3Rvck9iamVjdC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwg
aW5zcGVjdG9yVmFsdWUpOworICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5zZXRWYWx1ZShu
YW1lLnN0cmluZygpLCBXVEY6Om1vdmUoaW5zcGVjdG9yVmFsdWUpKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gaW5zcGVjdG9yT2JqZWN0OworICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGlu
c3BlY3Rvck9iamVjdCk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFZh
bHVlOjp0b0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CitSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0
ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7CiAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcihzY3JpcHRT
dGF0ZSk7CiAgICAgcmV0dXJuIGpzVG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgbV92YWx1
ZS5nZXQoKSwgSW5zcGVjdG9yVmFsdWU6Om1heERlcHRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmgKaW5kZXggZDVmYWRlOS4uZmVmNzcwMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmgKQEAgLTY2LDcgKzY2
LDcgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY3JpcHRWYWx1ZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsgfQogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHRvSW5zcGVjdG9yVmFsdWUoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSop
IGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IGY3ZDFlNTUuLjIwMmUxNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwCkBAIC0xODEsMTAgKzE4MSwxMSBAQCBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29u
c29sZTo6Q29uc29sZU1lc3NhZ2U6OkxldmVsIG1lc3NhZ2VMZXZlbFZhbHVlKE1lcwogCiB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKEluc3BlY3RvckNvbnNvbGVGcm9udGVuZERp
c3BhdGNoZXIqIGNvbnNvbGVGcm9udGVuZERpc3BhdGNoZXIsIEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDb25zb2xlTWVz
c2FnZT4ganNvbk9iaiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNvbGVNZXNz
YWdlOjpjcmVhdGUoKQorICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDb25z
b2xlTWVzc2FnZT4ganNvbk9iaiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNv
bGVNZXNzYWdlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U291cmNlKG1lc3NhZ2VTb3VyY2VWYWx1
ZShtX3NvdXJjZSkpCiAgICAgICAgIC5zZXRMZXZlbChtZXNzYWdlTGV2ZWxWYWx1ZShtX2xldmVs
KSkKLSAgICAgICAgLnNldFRleHQobV9tZXNzYWdlKTsKKyAgICAgICAgLnNldFRleHQobV9tZXNz
YWdlKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgLy8gRklYTUU6IG9ubHkgc2VuZCBvdXQg
dHlwZSBmb3IgQ29uc29sZUFQSSBzb3VyY2UgbWVzc2FnZXMuCiAgICAganNvbk9iai0+c2V0VHlw
ZShtZXNzYWdlVHlwZVZhbHVlKG1fdHlwZSkpOwpAQCAtMTk5LDcgKzIwMCw3IEBAIHZvaWQgQ29u
c29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0
Y2hlciogY29uc29sZUZyCiAgICAgaWYgKG1fYXJndW1lbnRzICYmIG1fYXJndW1lbnRzLT5hcmd1
bWVudENvdW50KCkpIHsKICAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBp
bmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1fYXJndW1lbnRzLT5nbG9i
YWxTdGF0ZSgpKTsKICAgICAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBqc29uQXJncyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD46OmNyZWF0ZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IGpzb25BcmdzID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0Pjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpZiAobV90eXBlID09IE1lc3Nh
Z2VUeXBlOjpUYWJsZSAmJiBnZW5lcmF0ZVByZXZpZXcgJiYgbV9hcmd1bWVudHMtPmFyZ3VtZW50
Q291bnQoKSkgewogICAgICAgICAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHRhYmxl
ID0gbV9hcmd1bWVudHMtPmFyZ3VtZW50QXQoMCk7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgY29sdW1ucyA9IG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkgPiAx
ID8gbV9hcmd1bWVudHMtPmFyZ3VtZW50QXQoMSkgOiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSgp
OwpAQCAtMjA4LDcgKzIwOSw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQo
SW5zcGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyCiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGpzb25BcmdzLT5hZGRJdGVt
KGluc3BlY3RvclZhbHVlKTsKKyAgICAgICAgICAgICAgICBqc29uQXJncy0+YWRkSXRlbShpbnNw
ZWN0b3JWYWx1ZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IGluc3BlY3RvclZhbHVlID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdChtX2FyZ3VtZW50cy0+YXJndW1lbnRBdChpKSwgQVNDSUlMaXRlcmFsKCJjb25z
b2xlIiksIGdlbmVyYXRlUHJldmlldyk7CkBAIC0yMTYsMTcgKzIxNywxNyBAQCB2b2lkIENvbnNv
bGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKEluc3BlY3RvckNvbnNvbGVGcm9udGVuZERpc3BhdGNo
ZXIqIGNvbnNvbGVGcgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAganNvbkFyZ3MtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBqc29uQXJncy0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5j
b3B5UmVmKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGpzb25PYmotPnNldFBhcmFtZXRlcnMoanNvbkFyZ3MpOworICAgICAgICAgICAganNvbk9iai0+
c2V0UGFyYW1ldGVycyhXVEY6Om1vdmUoanNvbkFyZ3MpKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIGlmIChtX2NhbGxTdGFjaykKICAgICAgICAganNvbk9iai0+c2V0U3RhY2tUcmFjZShtX2Nh
bGxTdGFjay0+YnVpbGRJbnNwZWN0b3JBcnJheSgpKTsKIAotICAgIGNvbnNvbGVGcm9udGVuZERp
c3BhdGNoZXItPm1lc3NhZ2VBZGRlZChqc29uT2JqKTsKKyAgICBjb25zb2xlRnJvbnRlbmREaXNw
YXRjaGVyLT5tZXNzYWdlQWRkZWQoV1RGOjptb3ZlKGpzb25PYmopKTsKIH0KIAogdm9pZCBDb25z
b2xlTWVzc2FnZTo6dXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9yQ29uc29sZUZy
b250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyb250ZW5kRGlzcGF0Y2hlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRp
ZXMuY3BwCmluZGV4IDhlNTc2MzcuLmY1ZGYwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcApAQCAt
MTIwLDcgKzEyMCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4gbGluZUVuZGlu
Z3MoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+
IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goc2l6ZV90IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgbGluZUNvbnRlbnQpCitzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goc2l6ZV90IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgbGluZUNvbnRlbnQpCiB7CiAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpCkBAIC0xNTMsMTUgKzE1MywxNyBAQCBpbnQgY291
bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVz
c2lvbiYgcmVnZXgsIGNvbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVz
OjpTZWFyY2hNYXRjaD4+IHNlYXJjaEluVGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wg
aXNSZWdleCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2FzZVNlbnNp
dGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
Pj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOwogCiAgICAg
SlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRp
ZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAg
ICBWZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgU3RyaW5nPj4gbWF0Y2hlcyA9IGdldFJlZ3VsYXJF
eHByZXNzaW9uTWF0Y2hlc0J5TGluZXMocmVnZXgsIHRleHQpOwogCi0gICAgZm9yIChjb25zdCBh
dXRvJiBtYXRjaCA6IG1hdGNoZXMpCi0gICAgICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVj
dEZvclNlYXJjaE1hdGNoKG1hdGNoLmZpcnN0LCBtYXRjaC5zZWNvbmQpKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIG1hdGNoIDogbWF0Y2hlcykgeworICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gbWF0Y2hPYmplY3QgPSBidWlsZE9iamVj
dEZvclNlYXJjaE1hdGNoKG1hdGNoLmZpcnN0LCBtYXRjaC5zZWNvbmQpOworICAgICAgICByZXN1
bHQtPmFkZEl0ZW0oV1RGOjptb3ZlKG1hdGNoT2JqZWN0KSk7CisgICAgfQogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
Q29udGVudFNlYXJjaFV0aWxpdGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgKaW5kZXggOTg4YTBmMmQuLmIzYjYxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxp
dGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJj
aFV0aWxpdGllcy5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBDb250ZW50U2VhcmNoVXRp
bGl0aWVzIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lv
biBjcmVhdGVTZWFyY2hSZWdleChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRp
dmUsIGJvb2wgaXNSZWdleCk7CiBKU19FWFBPUlRfUFJJVkFURSBpbnQgY291bnRSZWd1bGFyRXhw
cmVzc2lvbk1hdGNoZXMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIGNvbnN0
IFN0cmluZyYpOwotSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
Pj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYg
cXVlcnksIGNvbnN0IGJvb2wgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KTsKK0pT
X0VYUE9SVF9QUklWQVRFIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5l
cyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KTsKIEpTX0VYUE9SVF9QUklWQVRFIFRleHRQ
b3NpdGlvbiB0ZXh0UG9zaXRpb25Gcm9tT2Zmc2V0KHNpemVfdCBvZmZzZXQsIGNvbnN0IFZlY3Rv
cjxzaXplX3Q+JiBsaW5lRW5kaW5ncyk7CiBKU19FWFBPUlRfUFJJVkFURSBzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPHNpemVfdD4+IGxpbmVFbmRpbmdzKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCmluZGV4
IDk1ZmE3NWQuLjNiODNkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBJbmplY3Rl
ZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKnJlc3VsdCA9IEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46
OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlKTsKKyAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNh
c3QoV1RGOjptb3ZlKHJlc3VsdFZhbHVlKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6Omdl
dFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVj
dElkLCBib29sIG93blByb3BlcnRpZXMsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiogcHJvcGVydGllcykKQEAgLTEyMiw3ICsx
MjIsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgKnByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwor
ICAgICpwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGOjptb3ZlKHJl
c3VsdCkpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2Ny
aXB0b3I+PiogcHJvcGVydGllcykKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFycmF5ID0gQmlu
ZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOworICAgIGF1dG8gYXJyYXkg
PSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KFdURjo6bW92ZShyZXN1bHQpKTsK
ICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID4gMCkKICAgICAgICAgKnByb3BlcnRpZXMgPSBhcnJh
eTsKIH0KIAotUGFzc1JlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzKQorUmVmPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMo
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMpCiB7CiAgICAgQVNTRVJU
KCFoYXNOb1ZhbHVlKCkpOwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoIndyYXBDYWxsRnJhbWVz
IiksIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CkBAIC0x
NTMsMTIgKzE1MywxMiBAQCBQYXNzUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcAogICAgIEFTU0VSVCghaGFk
RXhjZXB0aW9uKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCA9IGNhbGxGcmFt
ZXNWYWx1ZS50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpOwogICAgIGlmIChyZXN1bHQt
PnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpCi0gICAgICAgIHJldHVybiBC
aW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1l
Q2FzdChXVEY6Om1vdmUocmVzdWx0KSkucmVsZWFzZU5vbk51bGwoKTsKIAogICAgIHJldHVybiBB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJldmll
dykgY29uc3QKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
KSBjb25zdAogewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKICAgICBEZXByZWNhdGVkOjpT
Y3JpcHRGdW5jdGlvbkNhbGwgd3JhcEZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFT
Q0lJTGl0ZXJhbCgid3JhcE9iamVjdCIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlv
bkNhbGxIYW5kbGVyKCkpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjCiAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKIH0KIAotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVk
U2NyaXB0Ojp3cmFwVGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3QKK1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3
cmFwVGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3QKIHsKICAgICBBU1NFUlQoIWhhc05v
VmFsdWUoKSk7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIHdyYXBGdW5jdGlv
bihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoIndyYXBUYWJsZSIpLCBpbnNw
ZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDQyYzc5MGQu
LjI5MDkyYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmgKQEAgLTYyLDkgKzYyLDkgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0UHJvcGVy
dGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVy
dGllcywgUmVmUHRyPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4qIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OkFycmF5
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+KiByZXN1bHQp
OwogCi0gICAgUGFzc1JlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OkRlYnVnZ2VyOjpD
YWxsRnJhbWU+PiB3cmFwQ2FsbEZyYW1lcyhjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYp
OwotICAgIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9i
amVjdChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IFN0cmluZyYgZ3JvdXBO
YW1lLCBib29sIGdlbmVyYXRlUHJldmlldyA9IGZhbHNlKSBjb25zdDsKLSAgICBQYXNzUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHdyYXBUYWJsZShjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgdGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBj
b2x1bW5zKSBjb25zdDsKKyAgICBSZWY8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpEZWJ1Z2dl
cjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9i
amVjdChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IFN0cmluZyYgZ3JvdXBO
YW1lLCBib29sIGdlbmVyYXRlUHJldmlldyA9IGZhbHNlKSBjb25zdDsKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcFRhYmxlKGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiB0YWJsZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNvbHVt
bnMpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRFeGNlcHRpb25WYWx1ZShjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYpOwogICAgIHZvaWQgY2xlYXJFeGNlcHRpb25WYWx1ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwCmluZGV4IGRkMTI5OGMuLjdkZTA1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKQEAgLTEzNSwxNSArMTM1
LDIwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSByZXN1bHRQYWlyLT5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSk7Ci0gICAgYm9vbCB3YXNUaHJvd25WYWwg
PSBmYWxzZTsKLSAgICBpZiAoIXJlc3VsdE9iamVjdCB8fCAhcmVzdWx0UGFpci0+Z2V0Qm9vbGVh
bihBU0NJSUxpdGVyYWwoIndhc1Rocm93biIpLCB3YXNUaHJvd25WYWwpKSB7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0OworICAgIGlmICghcmVzdWx0UGFpci0+Z2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHJlc3VsdE9iamVjdCkpIHsKKyAgICAgICAg
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90
IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGJvb2wgd2FzVGhyb3duVmFsdWUgPSBmYWxzZTsKKyAgICBpZiAoIXJlc3Vs
dFBhaXItPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJvd24iKSwgd2FzVGhyb3duVmFs
dWUpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJv
cjogcmVzdWx0IGlzIG5vdCBhIHBhaXIgb2YgdmFsdWUgYW5kIHdhc1Rocm93biBmbGFnIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAqb2JqZWN0UmVzdWx0ID0gQmluZGluZ1RyYWl0
czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2Jq
ZWN0KTsKLSAgICAqd2FzVGhyb3duID0gd2FzVGhyb3duVmFsOworICAgICp3YXNUaHJvd24gPSB3
YXNUaHJvd25WYWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuY3BwCmluZGV4IGRiZTc5M2UuLjg5NWEwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuY3BwCkBAIC0zNiw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci1JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpDYWxsYmFja0Jhc2Uo
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNoZXIs
IGludCBpZCkKLSAgICA6IG1fYmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCitJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpDYWxsYmFja0Jhc2UoUmVm
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQp
CisgICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKFdURjo6bW92ZShiYWNrZW5kRGlzcGF0Y2hlcikp
CiAgICAgLCBtX2lkKGlkKQogICAgICwgbV9hbHJlYWR5U2VudChmYWxzZSkKIHsKQEAgLTU0LDE4
ICs1NCwxOCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcgogICAgIHNlbmRJZkFjdGl2ZShudWxs
cHRyLCBlcnJvcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZTo6c2VuZElmQWN0aXZlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJ0aWFs
TWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZElmQWN0aXZlKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZv
Y2F0aW9uRXJyb3IpCiB7CiAgICAgaWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShtX2lkLCBwYXJ0aWFsTWVz
c2FnZSwgaW52b2NhdGlvbkVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UobV9pZCwgV1RGOjptb3ZlKHBhcnRpYWxNZXNzYWdlKSwgaW52b2NhdGlvbkVycm9yKTsK
ICAgICBtX2FscmVhZHlTZW50ID0gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKK1JlZjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkpOwogfQogCiB2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oY29u
c3QgU3RyaW5nJiBkb21haW4sIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KiBkaXNwYXRjaGVyKQpAQCAtOTAsOCArOTAsOCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2Fn
ZU9iamVjdC0+Z2V0KEFTQ0lJTGl0ZXJhbCgiaWQiKSk7Ci0gICAgaWYgKCFjYWxsSWRWYWx1ZSkg
eworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWU7CisgICAgaWYgKCFtZXNz
YWdlT2JqZWN0LT5nZXRWYWx1ZShBU0NJSUxpdGVyYWwoImlkIiksIGNhbGxJZFZhbHVlKSkgewog
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJ
SUxpdGVyYWwoIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTEwMiw4ICsxMDIsOCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9i
amVjdC0+Z2V0KEFTQ0lJTGl0ZXJhbCgibWV0aG9kIikpOwotICAgIGlmICghbWV0aG9kVmFsdWUp
IHsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlOworICAgIGlmICghbWVz
c2FnZU9iamVjdC0+Z2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgbWV0aG9kVmFsdWUp
KSB7CiAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3Qs
IEFTQ0lJTGl0ZXJhbCgiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIH0KIAog
ICAgIFN0cmluZyBkb21haW5NZXRob2QgPSBtZXRob2Quc3Vic3RyaW5nKHBvc2l0aW9uICsgMSk7
Ci0gICAgZG9tYWluRGlzcGF0Y2hlci0+ZGlzcGF0Y2goY2FsbElkLCBkb21haW5NZXRob2QsIG1l
c3NhZ2VPYmplY3QucmVsZWFzZSgpKTsKKyAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChj
YWxsSWQsIGRvbWFpbk1ldGhvZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2Fs
bElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0cmlu
ZyYgaW52b2NhdGlvbkVycm9yKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2Vu
ZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHJlc3VsdCwg
Y29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKIHsKICAgICBpZiAoIW1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CkBAIC0xNDEsNyArMTQxLDcgQEAg
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInJlc3VsdCIpLCByZXN1bHQpOwogICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksIGNhbGxJZCk7CiAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQwog
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwg
bnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFBy
b3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgZXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gZGF0YSkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9y
dFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUg
ZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgZGF0YSkgY29uc3QKIHsKICAgICBzdGF0aWMgY29u
c3QgaW50IGVycm9yQ29kZXNbXSA9IHsKICAgICAgICAgLTMyNzAwLCAvLyBQYXJzZUVycm9yCkBA
IC0xNjMsMjEgKzE2MywyMSBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBv
cnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQwogICAgICAgICAtMzIw
MDAsIC8vIFNlcnZlckVycm9yCiAgICAgfTsKIAotICAgIEFTU0VSVChlcnJvckNvZGUgPj0gMCk7
Ci0gICAgQVNTRVJUKCh1bnNpZ25lZCllcnJvckNvZGUgPCBXVEZfQVJSQVlfTEVOR1RIKGVycm9y
Q29kZXMpKTsKLSAgICBBU1NFUlQoZXJyb3JDb2Rlc1tlcnJvckNvZGVdKTsKKyAgICBBU1NFUlRf
QVJHKGVycm9yQ29kZSwgZXJyb3JDb2RlID49IDApOworICAgIEFTU0VSVF9BUkcoZXJyb3JDb2Rl
LCAodW5zaWduZWQpZXJyb3JDb2RlIDwgV1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7Cisg
ICAgQVNTRVJUX0FSRyhlcnJvckNvZGUsIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CiAKICAgICBp
ZiAoIW1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCBlcnJvckNv
ZGVzW2Vycm9yQ29kZV0pOwogICAgIGVycm9yLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNz
YWdlIiksIGVycm9yTWVzc2FnZSk7CiAgICAgaWYgKGRhdGEpCi0gICAgICAgIGVycm9yLT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgZGF0YSk7CisgICAgICAgIGVycm9yLT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImRhdGEiKSwgV1RGOjptb3ZlKGRhdGEpKTsKIAotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIGVycm9yLnJlbGVhc2Uo
KSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwg
V1RGOjptb3ZlKGVycm9yKSk7CiAgICAgaWYgKGNhbGxJZCkKICAgICAgICAgbWVzc2FnZS0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksICpjYWxsSWQpOwogICAgIGVsc2UKQEAgLTE4Nywz
NyArMTg3LDM2IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3Rv
Y29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFJldHVyblZhbHVlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBEZWZhdWx0
VmFsdWVUeXBlPgotc3RhdGljIFJldHVyblZhbHVlVHlwZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycywgRGVmYXVsdFZhbHVlVHlwZSBkZWZhdWx0
VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoSW5zcGVjdG9yVmFsdWUmLCBWYWx1ZVR5cGUmKSwgY29u
c3QgY2hhciogdHlwZU5hbWUpCitzdGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFs
dWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0
X29wdGlvbmFsVmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYg
cHJvdG9jb2xFcnJvcnMsIERlZmF1bHRWYWx1ZVR5cGUgZGVmYXVsdFZhbHVlLCBib29sICgqYXNN
ZXRob2QpKEluc3BlY3RvclZhbHVlJiwgVmFsdWVUeXBlJiksIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KQogewotICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7Ci0KLSAgICBWYWx1ZVR5cGUgdmFsdWUg
PSBkZWZhdWx0VmFsdWU7Ci0gICAgaWYgKHZhbHVlRm91bmQpCi0gICAgICAgICp2YWx1ZUZvdW5k
ID0gZmFsc2U7CisgICAgVmFsdWVUeXBlIHJlc3VsdCA9IGRlZmF1bHRWYWx1ZTsKKyAgICAvLyBv
dXRfb3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25hbHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9w
dGlvbmFsIHByb3BlcnR5IHdhcyBmb3VuZC4KKyAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZv
dW5kID09IG51bGxwdHIsIHRoZW4gdGhpcyBpcyBhIHJlcXVpcmVkIHByb3BlcnR5LgorICAgIGlm
IChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3Vu
ZCA9IGZhbHNlOwogCiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZvdW5k
KQotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0
aCB0eXBlICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwotICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKKyAgICAg
ICAgICAgIHByb3RvY29sRXJyb3JzLmFkZEl0ZW0oU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9i
amVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICclcycu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Jq
ZWN0LT5lbmQoKTsKLSAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRl
cmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7Ci0gICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5k
KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3VuZCkKLSAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVz
JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIGF1dG8gZmluZFJlc3VsdCA9IG9iamVjdC0+ZmluZChuYW1l
KTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgIGlmICgh
b3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLmFkZEl0
ZW0oU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3Qg
Zm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIGlmICghYXNNZXRob2QoKnZhbHVlSXRlcmF0b3ItPnZhbHVl
LCB2YWx1ZSkpIHsKLSAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICclcycuIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwotICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgaWYgKCFhc01ldGhvZCgqZmluZFJlc3VsdC0+dmFsdWUsIHJlc3VsdCkpIHsKKyAgICAgICAg
cHJvdG9jb2xFcnJvcnMuYWRkSXRlbShTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFz
IHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVO
YW1lKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKHZhbHVlRm91
bmQpCi0gICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICBpZiAob3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKKyAgICAgICAgKm91dF9vcHRpb25hbFZhbHVlRm91bmQgPSB0cnVlOwogCi0gICAg
cmV0dXJuIHZhbHVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0cnVjdCBBc01ldGhvZEJy
aWRnZXMgewpAQCAtMjMwLDM5ICsyMjksMzkgQEAgc3RydWN0IEFzTWV0aG9kQnJpZGdlcyB7CiAg
ICAgc3RhdGljIGJvb2wgYXNWYWx1ZShJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4mIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNWYWx1ZShvdXRwdXQpOyB9CiB9
OwogCi1pbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoraW50IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4m
IHByb3RvY29sRXJyb3JzKQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGludCwgaW50
LCBpbnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0
aG9kQnJpZGdlczo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOwogfQogCi1kb3VibGUgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnMpCitkb3VibGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykK
IHsKICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGUsIGRvdWJsZSwgZG91YmxlPihv
YmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJyaWRn
ZXM6OmFzRG91YmxlLCAiTnVtYmVyIik7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykK
K1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQogewogICAgIHJl
dHVybiBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZywgU3RyaW5nLCBTdHJpbmc+KG9iamVjdCwgbmFt
ZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsICIiLCBBc01ldGhvZEJyaWRnZXM6OmFzU3Ry
aW5nLCAiU3RyaW5nIik7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorYm9vbCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKIHsKICAgICByZXR1cm4gZ2V0UHJv
cGVydHlWYWx1ZTxib29sLCBib29sLCBib29sPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzLCBmYWxzZSwgQXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4sICJCb29sZWFu
Iik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykK
K1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRP
YmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xF
cnJvcnMpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiwgSW5zcGVjdG9yT2JqZWN0Kj4ob2Jq
ZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RC
cmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVl
PFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiwgSW5zcGVj
dG9yT2JqZWN0Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVs
bHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOwogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXko
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCiB7Ci0gICAgcmV0dXJu
IGdldFByb3BlcnR5VmFsdWU8UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4sIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4sIEluc3BlY3RvckFycmF5Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc0FycmF5LCAiQXJyYXki
KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SW5zcGVjdG9yQXJyYXk+LCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+LCBJbnNwZWN0b3JBcnJheSo+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNBcnJh
eSwgIkFycmF5Iik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90
b2NvbEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiwgSW5zcGVjdG9yVmFsdWUqPihv
YmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhv
ZEJyaWRnZXM6OmFzVmFsdWUsICJWYWx1ZSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVl
PFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIEluc3BlY3Rv
clZhbHVlKj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0
ciwgQXNNZXRob2RCcmlkZ2VzOjphc1ZhbHVlLCAiVmFsdWUiKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKaW5kZXggYTk5ZTZlYS4uODZjYmQ5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaApAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyX2gKIAotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC00MCwzMCArNDAsMzEgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIElu
c3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXI+IHsKIHB1YmxpYzoKLSAgICBJ
bnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpIDogbV9iYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlcikgeyB9CisgICAgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKQorICAgICAg
ICA6IG1fYmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpIHsgfQogICAgIHZpcnR1
YWwgfkluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9y
T2JqZWN0PiYmIG1lc3NhZ2UpID0gMDsKIHByb3RlY3RlZDoKLSAgICBSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKik7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOwogCiAgICAgY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgQ2FsbGJhY2tCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FsbGJhY2tCYXNl
PiB7CiAgICAgcHVibGljOgotICAgICAgICBDYWxsYmFja0Jhc2UoUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIENhbGxiYWNrQmFzZShSZWY8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CiAKICAgICAgICAgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3Ry
aW5nJik7CiAgICAgICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2VudCA9IHRydWU7IH0K
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBzZW5kSWZBY3RpdmUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2Nh
dGlvbkVycm9yKTsKKyAgICAgICAgdm9pZCBzZW5kSWZBY3RpdmUoUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJv
cik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICAgICAgaW50IG1faWQ7CiAgICAg
ICAgIGJvb2wgbV9hbHJlYWR5U2VudDsKICAgICB9OwpAQCAtODIsMTcgKzgzLDE3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgcmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciopOwogICAgIHZv
aWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIHNlbmRSZXNwb25z
ZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3Qg
RXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcik7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9u
ZyBjYWxsSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0LCBjb25zdCBFcnJvclN0
cmluZyYgaW52b2NhdGlvbkVycm9yKTsKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsKLQotICAgIHN0YXRp
YyBpbnQgZ2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3Rh
dGljIGRvdWJsZSBnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAg
IHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsK
LSAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0VmFsdWUoSW5zcGVj
dG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnMpOworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25n
KiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGRhdGEpIGNv
bnN0OworCisgICAgc3RhdGljIGludCBnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBkb3VibGUgZ2V0RG91Ymxl
KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAg
IHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
PiYgcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9y
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29s
RXJyb3JzKTsKKyAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNw
ZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKIAogcHJpdmF0
ZToKICAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCmluZGV4IGFlMmE3Y2Qu
LjE4ZGYxNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckVudmlyb25tZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgpID0gMDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpID0g
MDsKKyAgICB2aXJ0dWFsIFJlZjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkg
PSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCmluZGV4
IDE0M2RlZjguLjI5NmYzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCkBAIC0zMSwxMiArMzEsMTMgQEAK
IAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBC
aW5kaW5nVHJhaXRzOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgT3B0T3V0cHV0IHsK
IHB1YmxpYzoKQEAgLTYzLDEyNiArNjQsNDIgQEAgcHJpdmF0ZToKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShPcHRPdXRwdXQpOwogfTsKIAotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyAiVHJhaXRz
IiB0eXBlIGZvciB0aGUgaW5wdXQgdHlwZSBULiBJdCBpcyBwcm9ncmFtbWVkIHVzaW5nIEMrKyB0
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgotLy8gdGVjaG5pcXVlLiBCeSBkZWZhdWx0IGl0IHNpbXBs
eSB0YWtlcyAiSXRlbVRyYWl0cyIgdHlwZSBmcm9tIFQsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0
aCB0aGUgYmFzZSB0eXBlcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQXJyYXlJdGVt
SGVscGVyIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6Okl0ZW1UcmFpdHMgVHJhaXRzOwotfTsK
LQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIEFycmF5IDogcHVibGljIEluc3BlY3RvckFy
cmF5QmFzZSB7CiBwcml2YXRlOgogICAgIEFycmF5KCkgeyB9CiAKLSAgICBJbnNwZWN0b3JBcnJh
eSogb3BlbkFjY2Vzc29ycygpCisgICAgSW5zcGVjdG9yQXJyYXkmIG9wZW5BY2Nlc3NvcnMoKQog
ICAgIHsKICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3RvckFycmF5KSA9PSBz
aXplb2YoQXJyYXk8VD4pLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbnNwZWN0b3JBcnJheSo+KHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5QmFzZSo+KHRoaXMp
KTsKKyAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxJbnNwZWN0b3JBcnJheSo+KHN0YXRpY19j
YXN0PEluc3BlY3RvckFycmF5QmFzZSo+KHRoaXMpKTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICB2
b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUPiB2YWx1ZSkKKyAgICB2b2lkIGFkZEl0ZW0oUmVmPFQ+
JiYgdmFsdWUpCiAgICAgewotICAgICAgICBBcnJheUl0ZW1IZWxwZXI8VD46OlRyYWl0czo6cHVz
aFJlZlB0cih0aGlzLT5vcGVuQWNjZXNzb3JzKCksIHZhbHVlKTsKKyAgICAgICAgb3BlbkFjY2Vz
c29ycygpLnB1c2hWYWx1ZSgmdmFsdWUuZ2V0KCkpOwogICAgIH0KIAotICAgIHZvaWQgYWRkSXRl
bShUIHZhbHVlKQorICAgIHZvaWQgYWRkSXRlbShSZWZQdHI8VD4mJiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIEFycmF5SXRlbUhlbHBlcjxUPjo6VHJhaXRzOjpwdXNoUmF3KHRoaXMtPm9wZW5BY2Nl
c3NvcnMoKSwgdmFsdWUpOworICAgICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaFZhbHVlKFdURjo6
bW92ZSh2YWx1ZSkpOwogICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBj
cmVhdGUoKQorICAgIAorICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheTxUPigpKTsKKyAgICAgICAgb3Bl
bkFjY2Vzc29ycygpLnB1c2hTdHJpbmcodmFsdWUpOwogICAgIH0KLX07CiAKLXN0cnVjdCBTdHJ1
Y3RJdGVtVHJhaXRzIHsKLSAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5
KiBhcnJheSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBhZGRJ
dGVtKGludCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwor
ICAgICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaEludGVnZXIodmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUmVmPEFycmF5PFQ+PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQXJyYXk8VD4oKSk7CiAgICAgfQotfTsKLQotdGVtcGxhdGU8Pgotc3Ry
dWN0IEFycmF5SXRlbUhlbHBlcjxTdHJpbmc+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJheSogYXJyYXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVt
SGVscGVyPGludD4gewotICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBw
dXNoUmF3KEluc3BlY3RvckFycmF5KiBhcnJheSwgaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhcnJheS0+cHVzaEludGVnZXIodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07
Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPiB7Ci0gICAgc3Ry
dWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkq
IGFycmF5LCBkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNo
RG91YmxlKHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgQXJyYXlJdGVtSGVscGVyPGJvb2w+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAg
c3RhdGljIHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJheSogYXJyYXksIGJvb2wgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoQm9vbGVhbih2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNw
ZWN0b3JWYWx1ZT4gewotICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBw
dXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUp
OwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1I
ZWxwZXI8SW5zcGVjdG9yT2JqZWN0PiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0
IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewotICAgIHN0cnVjdCBUcmFpdHMgewot
ICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFy
cmF5LT5wdXNoQXJyYXkodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFByb3RvY29sOjpBcnJheTxUPj4g
ewotICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKElu
c3BlY3RvckFycmF5KiBhcnJheSwgUGFzc1JlZlB0cjxQcm90b2NvbDo6QXJyYXk8VD4+IHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH07CiB9OwogCiAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgUHJvdG9jb2wgYW5kIG90
aGVyIEluc3BlY3RvciB0eXBlcyBhcmUgcHJvdmlkZWQgYnkKQEAgLTE5Miw4ICsxMDksOSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEJpbmRpbmdUcmFpdHMgewogICAgIHR5cGVkZWYg
VCBCaW5kaW5nVHlwZTsKIAorICAgIHN0YXRpYyB2b2lkIHB1c2goSW5zcGVjdG9yQXJyYXkmLCBC
aW5kaW5nVHlwZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JWYWx1ZTo6VHlwZSB0eXBlVGFnKCk7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KTsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBzdGF0aWMgdm9pZCBh
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSopOwogI2VuZGlmIC8vICFB
U1NFUlRfRElTQUJMRUQKQEAgLTIwNCwxNSArMTIyLDE2IEBAIHN0cnVjdCBQcmltaXRpdmVCaW5k
aW5nVHJhaXRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgYXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7CisgICAgICAgIEFTU0VSVF9BUkcodmFs
dWUsIHZhbHVlICYmIHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7CiAgICAgfQogI2VuZGlmIC8vICFB
U1NFUlRfRElTQUJMRUQKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQmluZGlu
Z1RyYWl0czxQcm90b2NvbDo6QXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJh
eTxUPj4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAg
c3RhdGljIFJlZlB0cjxBcnJheTxUPj4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3RvclZhbHVl
PiYmIHZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OwogICAgICAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CkBAIC0yMjYsNiArMTQ1LDcgQEAgc3RydWN0IEJp
bmRpbmdUcmFpdHM8UHJvdG9jb2w6OkFycmF5PFQ+PiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVl
KiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKICAgICAgICAgYm9vbCBjYXN0U3VjY2Vl
ZGVkID0gdmFsdWUtPmFzQXJyYXkoYXJyYXkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDJhMmEwYmMuLjQyYTZiNWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHAKQEAgLTM0Nyw3ICszNDcsNyBAQCBib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciog
c3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgb3V0cHV0KQogICAgIHJldHVybiB0cnVl
OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFy
KiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB2YWx1ZVRva2VuRW5kLCBp
bnQgZGVwdGgpCitSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIq
IHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHZhbHVlVG9rZW5FbmQsIGlu
dCBkZXB0aCkKIHsKICAgICBpZiAoZGVwdGggPiBzdGFja0xpbWl0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTM4NSwxNCArMzg1LDE0IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFSUkFZX0JFR0lOOiB7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cisg
ICAgICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CiAgICAgICAgIHRva2VuID0gcGFyc2VUb2tl
bihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKICAgICAgICAgd2hpbGUgKHRv
a2VuICE9IEFSUkFZX0VORCkgewogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBh
cnJheU5vZGUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsK
ICAgICAgICAgICAgIGlmICghYXJyYXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShhcnJheU5vZGUpOworICAgICAgICAg
ICAgYXJyYXktPnB1c2hWYWx1ZShXVEY6Om1vdmUoYXJyYXlOb2RlKSk7CiAKICAgICAgICAgICAg
IC8vIEFmdGVyIGEgbGlzdCB2YWx1ZSwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0
aGUgbGlzdC4KICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CkBAIC00MDksMTEgKzQwOSwx
MSBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29ucwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tl
biAhPSBBUlJBWV9FTkQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmVz
dWx0ID0gYXJyYXkucmVsZWFzZSgpOworICAgICAgICByZXN1bHQgPSBXVEY6Om1vdmUoYXJyYXkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBPQkpFQ1RfQkVHSU46IHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKICAgICAgICAgdG9rZW4g
PSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOwogICAgICAg
ICB3aGlsZSAodG9rZW4gIT0gT0JKRUNUX0VORCkgewpAQCAtNDMyLDcgKzQzMiw3IEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25z
dCBVQ2hhciogZW5kLCBjb25zCiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIGRlcHRoICsgMSk7CiAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIG9iamVj
dC0+c2V0VmFsdWUoa2V5LCBXVEY6Om1vdmUodmFsdWUpKTsKICAgICAgICAgICAgIHN0YXJ0ID0g
dG9rZW5FbmQ7CiAKICAgICAgICAgICAgIC8vIEFmdGVyIGEga2V5L3ZhbHVlIHBhaXIsIHdlIGV4
cGVjdCBhIGNvbW1hIG9yIHRoZSBlbmQgb2YgdGhlCkBAIC00NTAsNyArNDUwLDcgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0
IFVDaGFyKiBlbmQsIGNvbnMKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4gIT0gT0JKRUNU
X0VORCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQgPSBvYmpl
Y3QucmVsZWFzZSgpOworICAgICAgICByZXN1bHQgPSBXVEY6Om1vdmUob2JqZWN0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC03MzksOCArNzM5LDggQEAgSW5zcGVjdG9yT2JqZWN0KiBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpvcGVuQWNjZXNzb3JzKCkKIAogYm9vbCBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgb3V0cHV0KSBjb25z
dAogewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAg
aWYgKCF2YWx1ZSkKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICgh
Z2V0VmFsdWUobmFtZSwgdmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOwpAQCAtNzQ4LDQwICs3NDgsMzkgQEAgYm9vbCBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYg
b3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFN0cmluZyhjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgb3V0cHV0KSBjb25zdAogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91
dHB1dCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPYmplY3RC
YXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorYm9vbCBJbnNwZWN0b3JP
YmplY3RCYXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgb3V0cHV0KSBjb25zdAogewotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlID0gZ2V0KG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgaWYgKCFnZXRWYWx1
ZShuYW1lLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdDsKLSAgICB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KG91dHB1
dCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3Rvck9iamVjdEJhc2U6
OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yT2JqZWN0
QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUg
PSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICBpZiAoIWdldFZhbHVlKG5hbWUs
IHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiByZXN1bHQ7Ci0gICAgdmFsdWUtPmFzQXJyYXkocmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gdmFsdWUtPmFzQXJyYXkob3V0cHV0KTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0KGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiBvdXRwdXQpIGNvbnN0
CiB7Ci0gICAgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1l
KTsKLSAgICBpZiAoaXQgPT0gbV9kYXRhLmVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gaXQtPnZhbHVlOworICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGZp
bmRSZXN1bHQgPSBtX2RhdGEuZmluZChuYW1lKTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBtX2Rh
dGEuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IGZpbmRSZXN1
bHQtPnZhbHVlOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEluc3BlY3Rvck9iamVjdEJh
c2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03OTksMTMgKzc5OCwxMyBAQCB2b2lk
IEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNv
bnN0CiB7CiAgICAgb3V0cHV0LmFwcGVuZCgneycpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9vcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGF0YS5maW5kKG1fb3JkZXJbaV0pOwotICAgICAgICBBU1NFUlQoaXQgIT0g
bV9kYXRhLmVuZCgpKTsKKyAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9kYXRhLmZpbmQobV9v
cmRlcltpXSk7CisgICAgICAgIEFTU0VSVChmaW5kUmVzdWx0ICE9IG1fZGF0YS5lbmQoKSk7CiAg
ICAgICAgIGlmIChpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwotICAgICAgICBk
b3VibGVRdW90ZVN0cmluZyhpdC0+a2V5LCBvdXRwdXQpOworICAgICAgICBkb3VibGVRdW90ZVN0
cmluZyhmaW5kUmVzdWx0LT5rZXksIG91dHB1dCk7CiAgICAgICAgIG91dHB1dC5hcHBlbmQoJzon
KTsKLSAgICAgICAgaXQtPnZhbHVlLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICAgICAgZmluZFJl
c3VsdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQpOwogICAgIH0KICAgICBvdXRwdXQuYXBwZW5k
KCd9Jyk7CiB9CkBAIC04NDUsNTAgKzg0NCw1MCBAQCBJbnNwZWN0b3JBcnJheUJhc2U6Okluc3Bl
Y3RvckFycmF5QmFzZSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3Bl
Y3RvckFycmF5QmFzZTo6Z2V0KHNpemVfdCBpbmRleCkKK1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
SW5zcGVjdG9yQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbV9kYXRhLnNpemUoKSk7CiAgICAgcmV0dXJu
IG1fZGF0YVtpbmRleF07CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JPYmplY3QpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3Rvck9iamVjdCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKQorUmVmPEluc3BlY3Rv
ckFycmF5PiBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckFycmF5KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JB
cnJheSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVlOjpu
dWxsKCkKK1JlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yVmFsdWUpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvclZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHJpbmc+
IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCitSZWY8SW5zcGVj
dG9yU3RyaW5nPiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3RyaW5nKHZhbHVlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3RyaW5nKHZhbHVlKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShjb25zdCBjaGFy
KiB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JTdHJpbmc+IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKGNv
bnN0IGNoYXIqIHZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3Ry
aW5nKHZhbHVlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3RyaW5nKHZh
bHVlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFz
aWNWYWx1ZTo6Y3JlYXRlKGJvb2wgdmFsdWUpCitSZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGJvb2wgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3RvckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShpbnQgdmFsdWUpCitS
ZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGludCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFs
dWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVl
KSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoZG91YmxlIHZhbHVlKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAppbmRleCAyOTZhZjdkLi41NmE4ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpZm5kZWYgSW5zcGVjdG9yVmFsdWVzX2gKICNkZWZpbmUgSW5zcGVjdG9yVmFsdWVzX2gKIAot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU0LDcg
KzUzLDcgQEAgcHVibGljOgogICAgICAgICA6IG1fdHlwZShUeXBlOjpOdWxsKSB7IH0KICAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JWYWx1ZSgpIHsgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IG51bGwoKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclZhbHVlPiBudWxs
KCk7CiAKICAgICBlbnVtIGNsYXNzIFR5cGUgewogICAgICAgICBOdWxsID0gMCwKQEAgLTk5LDkg
Kzk4LDkgQEAgcHJpdmF0ZToKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckJhc2lj
VmFsdWUgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgewogcHVibGljOgogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGJvb2wpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShpbnQpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShkb3VibGUpOworICAgIHN0YXRp
YyBSZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGJvb2wpOworICAgIHN0YXRpYyBSZWY8
SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGludCk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0
b3JCYXNpY1ZhbHVlPiBjcmVhdGUoZG91YmxlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xl
YW4oYm9vbCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIE51bWJlcnMgZnJvbSB0aGUgZnJvbnRl
bmQgYXJlIGFsd2F5cyBwYXJzZWQgYXMgZG91Ymxlcywgc28gd2UgYWxsb3cKQEAgLTEzOCw4ICsx
MzcsOCBAQCBwcml2YXRlOgogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JTdHJp
bmcgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0
aWMgUmVmPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRp
YyBSZWY8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgY2hhciopOwogCiAgICAgdmlydHVh
bCBib29sIGFzU3RyaW5nKFN0cmluZyYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTc3
LDkgKzE3Niw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEludGVnZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBpbnQpOwogICAgIHZvaWQgc2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91
YmxlKTsKICAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPik7Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+KTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheUJhc2U+KTsKKyAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmKTsK
KyAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3RCYXNlPiYmKTsKKyAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVm
UHRyPEluc3BlY3RvckFycmF5QmFzZT4mJik7CiAKICAgICBpdGVyYXRvciBmaW5kKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwpAQCAtMTg4LDIzICsxODcsMjUgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgZ2V0Qm9v
bGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkgY29uc3Q7CiAgICAgdGVtcGxh
dGU8Y2xhc3MgVD4gYm9vbCBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRwdXQp
IGNvbnN0CiAgICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0
KG5hbWUpOwotICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHZhbHVlOworICAgICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICByZXR1cm4gdmFsdWUtPmFzRG91YmxlKG91dHB1
dCk7CiAgICAgfQogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0SW50ZWdlcihjb25zdCBT
dHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgICAgIGlmICghZ2V0VmFsdWUo
bmFtZSwgdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIHJldHVy
biB2YWx1ZS0+YXNJbnRlZ2VyKG91dHB1dCk7CiAgICAgfQogCiAgICAgYm9vbCBnZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KGNvbnN0IFN0cmlu
ZyYgbmFtZSkgY29uc3Q7CisgICAgYm9vbCBnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpIGNvbnN0OworICAgIGJvb2wgZ2V0QXJyYXkoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JikgY29uc3Q7CisgICAgYm9vbCBn
ZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mKSBjb25z
dDsKIAogICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKQEAgLTIyNyw3ICsy
MjgsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JPYmplY3QgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgSlNfRVhQT1JU
X1BSSVZBVEUgUmVmPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlKCk7CiAKICAgICB1c2luZyBJbnNw
ZWN0b3JPYmplY3RCYXNlOjphc09iamVjdDsKIApAQCAtMjQ2LDcgKzI0Nyw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6Z2V0T2JqZWN0OwogICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJh
c2U6OmdldEFycmF5OwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldDsKKyAgICB1
c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRWYWx1ZTsKIAogICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdEJhc2U6OnJlbW92ZTsKIApAQCAtMjczLDExICsyNzQsMTEgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgcHVzaEludGVnZXIoaW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsK
ICAgICB2b2lkIHB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4pOwotICAgIHZvaWQgcHVzaE9iamVjdChQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4pOwotICAgIHZvaWQgcHVzaEFycmF5KFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KTsKKyAgICB2b2lkIHB1c2hWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
JiYpOworICAgIHZvaWQgcHVzaE9iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4mJik7
CisgICAgdm9pZCBwdXNoQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5QmFzZT4mJik7CiAKLSAg
ICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGdldChzaXplX3QgaW5kZXgpOwogCiAgICAgdmlydHVhbCB2b2lk
IHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0y
OTUsNyArMjk2LDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW5zcGVjdG9yQXJyYXkgOiBwdWJsaWMg
SW5zcGVjdG9yQXJyYXlCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZB
VEUgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3JlYXRlKCk7CisgICAgc3RhdGljIEpTX0VY
UE9SVF9QUklWQVRFIFJlZjxJbnNwZWN0b3JBcnJheT4gY3JlYXRlKCk7CiAKICAgICB1c2luZyBJ
bnNwZWN0b3JBcnJheUJhc2U6OmFzQXJyYXk7CiAKQEAgLTM0NCwyNCArMzQ1LDI0IEBAIGlubGlu
ZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsCiAgICAgc2V0VmFsdWUobmFtZSwgSW5zcGVjdG9yU3RyaW5nOjpj
cmVhdGUodmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKK2lubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2
YWx1ZSk7Ci0gICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAg
aWYgKG1fZGF0YS5zZXQobmFtZSwgV1RGOjptb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAg
ICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0QmFzZT4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4mJiB2
YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIHZh
bHVlKS5pc05ld0VudHJ5KQorICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIFdURjo6bW92ZSh2YWx1
ZSkpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxp
bmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiB2YWx1ZSkKK2lubGluZSB2b2lkIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5QmFzZT4mJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmICht
X2RhdGEuc2V0KG5hbWUsIHZhbHVlKS5pc05ld0VudHJ5KQorICAgIGlmIChtX2RhdGEuc2V0KG5h
bWUsIFdURjo6bW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5k
KG5hbWUpOwogfQogCkBAIC0zODUsMjIgKzM4NiwyMiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JB
cnJheUJhc2U6OnB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBtX2RhdGEuYXBw
ZW5kKEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIElu
c3BlY3RvckFycmF5QmFzZTo6cHVzaFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKQoraW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoVmFsdWUoUmVmUHRyPElu
c3BlY3RvclZhbHVlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgbV9kYXRh
LmFwcGVuZCh2YWx1ZSk7CisgICAgbV9kYXRhLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKIH0K
IAotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6
cHVzaE9iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKICAgICBB
U1NFUlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOworICAgIG1fZGF0YS5hcHBl
bmQoV1RGOjptb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFz
ZTo6cHVzaEFycmF5KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoraW5saW5lIHZv
aWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5QmFz
ZT4mJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQodmFs
dWUpOworICAgIG1fZGF0YS5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCmluZGV4IDUwMGFm
ZTIuLmE3ZmIxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTc1LDE5ICs3
NSwxOCBAQCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OkpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudChJbnNwZWN0b3JDb25zb2xlQWdlbnQqCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4gcHJwQXJndW1lbnRzKQordm9pZCBKU0dsb2JhbE9iamVjdENv
bnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1
bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cyA9IHBycEFyZ3VtZW50czsKIAogICAgIGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKQotICAgICAgICBDb25zb2xlQ2xpZW50OjpwcmludENv
bnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBl
LCBsZXZlbCwgZXhlYywgYXJndW1lbnRzKTsKKyAgICAgICAgQ29uc29sZUNsaWVudDo6cHJpbnRD
b25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlw
ZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cy5jb3B5UmVmKCkpOwogCiAgICAgU3RyaW5nIG1lc3Nh
Z2U7CiAgICAgYXJndW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcobWVzc2FnZSk7Ci0g
ICAgbV9jb25zb2xlQWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZTo6Q29u
c29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGV4ZWMsIGFyZ3VtZW50cy5yZWxlYXNlKCkp
OworICAgIG1fY29uc29sZUFnZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2U6
OkNvbnNvbGVBUEksIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBleGVjLCBXVEY6Om1vdmUoYXJndW1l
bnRzKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpjb3VudChFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lk
IEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnQoRXhlY1N0YXRlKiBleGVjLCBSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKICAgICBtX2NvbnNvbGVBZ2VudC0+
Y291bnQoZXhlYywgYXJndW1lbnRzKTsKIH0KQEAgLTExMCwxMCArMTA5LDEwIEBAIHZvaWQgSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0aW1lKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYg
dGl0bGUpCiB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZUVuZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZXhlYywgMSkp
OwotICAgIG1fY29uc29sZUFnZW50LT5zdG9wVGltaW5nKHRpdGxlLCBjYWxsU3RhY2sucmVsZWFz
ZSgpKTsKKyAgICBtX2NvbnNvbGVBZ2VudC0+c3RvcFRpbWluZyh0aXRsZSwgV1RGOjptb3ZlKGNh
bGxTdGFjaykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZVN0
YW1wKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPikKK3ZvaWQgSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAoRXhlY1N0YXRlKiwgUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4mJikKIHsKICAgICAvLyBGSVhNRTogSlNDb250ZXh0IGluc3BlY3Rpb24gbmVl
ZHMgYSB0aW1lbGluZS4KICAgICB3YXJuVW5pbXBsZW1lbnRlZChBU0NJSUxpdGVyYWwoImNvbnNv
bGUudGltZVN0YW1wIikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmgKaW5kZXggZjRhYjkxZS4u
ZTM1ZTliNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ds
b2JhbE9iamVjdENvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oCkBAIC00MywxNyArNDMsMTcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dUb1N5c3RlbUNvbnNvbGUoKTsK
IAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KEpTQzo6RXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiYmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZShKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBw
cm9maWxlRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHRpbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRp
dGxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGltZUVuZChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0aW1lU3Rh
bXAoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHdhcm5Vbmlt
cGxlbWVudGVkKGNvbnN0IFN0cmluZyYgbWV0aG9kKTsKLSAgICB2b2lkIGludGVybmFsQWRkTWVz
c2FnZShNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBpbnRlcm5hbEFkZE1lc3NhZ2UoTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiYmKTsKIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGJjOGM0YjEu
LmI4YWRlY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAg
LTIyMiw5ICsyMjIsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6
ZnJvbnRlbmRJbml0aWFsaXplZCgpCiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxTdG9wd2F0Y2g+
IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkK
K1JlZjxTdG9wd2F0Y2g+IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0
aW9uU3RvcHdhdGNoKCkKIHsKLSAgICByZXR1cm4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAg
cmV0dXJuIG1fZXhlY3V0aW9uU3RvcHdhdGNoLmNvcHlSZWYoKTsKIH0KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JD
b250cm9sbGVyLmgKaW5kZXggYTYwZDQ3Yi4uMmEwMjE4NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiwgaW50KSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FsbElu
amVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKSBvdmVycmlkZSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBSZWY8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpIG92
ZXJyaWRlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAg
ICAgdmlydHVhbCBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQqIGF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
YXVnbWVudGluZ0NsaWVudDsgfSAKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIElu
c3BlY3RvckFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7Ci0gICAgUmVmUHRy
PFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKKyAgICBSZWY8V1RGOjpTdG9w
d2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOwogICAgIGJvb2wgbV9pbmNsdWRlTmF0aXZlQ2Fs
bFN0YWNrV2l0aEV4Y2VwdGlvbnM7CiAgICAgYm9vbCBtX2lzQXV0b21hdGljSW5zcGVjdGlvbjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxs
RnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJh
bWUuY3BwCmluZGV4IDdjOTUwZTguLjI4YzJhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAg
Ym9vbCBTY3JpcHRDYWxsRnJhbWU6OmlzRXF1YWwoY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBvKSBj
b25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPiBTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0KCkgY29uc3QKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxs
RnJhbWU+IFNjcmlwdENhbGxGcmFtZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAogewog
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRGdW5jdGlvbk5hbWUobV9mdW5jdGlvbk5hbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuaAppbmRleCA2YTlj
ZDc3Li4wMTdkZGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
U2NyaXB0Q2FsbEZyYW1lLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNF
cXVhbChjb25zdCBTY3JpcHRDYWxsRnJhbWUmKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJh
bWU+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsK
ICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwCmluZGV4IDZmODFhNTguLmFhNDUyYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAK
QEAgLTM2LDE0ICszNiwxNCBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+IFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKCkKK1JlZjxTY3JpcHRD
YWxsU3RhY2s+IFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNjcmlwdENhbGxTdGFjayk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NyaXB0
Q2FsbFN0YWNrKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IFNjcmlwdENhbGxT
dGFjazo6Y3JlYXRlKFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+JiBmcmFtZXMpCitSZWY8U2NyaXB0
Q2FsbFN0YWNrPiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZShWZWN0b3I8U2NyaXB0Q2FsbEZyYW1l
PiYgZnJhbWVzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0Q2FsbFN0YWNrKGZy
YW1lcykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcmlwdENhbGxTdGFjayhmcmFtZXMp
KTsKIH0KIAogU2NyaXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2soKQpAQCAtMTA3LDEyICsx
MDcsMTIgQEAgYm9vbCBTY3JpcHRDYWxsU3RhY2s6OmlzRXF1YWwoU2NyaXB0Q2FsbFN0YWNrKiBv
KSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1l
Pj4gU2NyaXB0Q2FsbFN0YWNrOjpidWlsZEluc3BlY3RvckFycmF5KCkgY29uc3QKK1JlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxs
RnJhbWU+PiBTY3JpcHRDYWxsU3RhY2s6OmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSBjb25zdAogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpDb25zb2xlOjpDYWxsRnJhbWU+PiBmcmFtZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGZyYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGZyYW1lcy0+YWRkSXRlbSht
X2ZyYW1lcy5hdChpKS5idWlsZEluc3BlY3Rvck9iamVjdCgpKTsKLSAgICByZXR1cm4gZnJhbWVz
OworICAgIHJldHVybiBXVEY6Om1vdmUoZnJhbWVzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaAppbmRleCA2M2Uz
Y2UxLi42ZGI3ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
U2NyaXB0Q2FsbFN0YWNrLmgKQEAgLTQ3LDggKzQ3LDggQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgU2NyaXB0Q2FsbFN0YWNrIDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0Q2FsbFN0YWNrPiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhDYWxsU3RhY2tTaXplVG9DYXB0
dXJlID0gMjAwOwogICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4g
Y3JlYXRlKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGUo
VmVjdG9yPFNjcmlwdENhbGxGcmFtZT4mKTsKKyAgICBzdGF0aWMgUmVmPFNjcmlwdENhbGxTdGFj
az4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZShWZWN0
b3I8U2NyaXB0Q2FsbEZyYW1lPiYpOwogCiAgICAgflNjcmlwdENhbGxTdGFjaygpOwogCkBAIC02
Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXF1YWwoU2NyaXB0Q2FsbFN0YWNrKikg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1l
Pj4gYnVpbGRJbnNwZWN0b3JBcnJheSgpIGNvbnN0OworICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBidWls
ZEluc3BlY3RvckFycmF5KCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50
LmNwcAppbmRleCA3NjVhZjk5Li40ZjY5NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC03Miw3
ICs3Miw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAg
bV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCkK
LSAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCwgbV9wZW5kaW5nSW5z
cGVjdERhdGEuc2Vjb25kKTsKKyAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5m
aXJzdC5jb3B5UmVmKCksIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5jb3B5UmVmKCkpOwog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1f
cGVuZGluZ0V4dHJhRG9tYWluc0RhdGEpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmluaXRpYWxpemVkKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmZyb250
ZW5kSW5pdGlhbGl6ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChQYXNz
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG9iamVjdFRvSW5zcGVjdCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6
aW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3RU
b0luc3BlY3QsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGludHMpCiB7CiAgICAgaWYgKG1f
ZW5hYmxlZCAmJiBtX2Zyb250ZW5kRGlzcGF0Y2hlcikgewogICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+aW5zcGVjdChvYmplY3RUb0luc3BlY3QsIGhpbnRzKTsKQEAgLTEzMCw5ICsxMzAs
OSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWluKGNvbnN0IFN0cmlu
ZyYgZG9tYWluTmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBkb21haW5OYW1lcyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBkb21haW5OYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGRvbWFpbk5hbWVzLT5hZGRJdGVtKGRvbWFp
bk5hbWUpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hY3RpdmF0ZUV4dHJhRG9tYWlucyhk
b21haW5OYW1lcy5yZWxlYXNlKCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hY3RpdmF0
ZUV4dHJhRG9tYWlucyhXVEY6Om1vdmUoZG9tYWluTmFtZXMpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JBZ2VudDo6YWN0aXZhdGVFeHRyYURvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dHJh
RG9tYWlucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IGM5MGUyNDIuLjczMGRjZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdl
bnQuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZWQoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5zcGVjdChQYXNzUmVmUHRyPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG9iamVjdFRvSW5zcGVjdCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKKyAgICB2b2lkIGluc3BlY3QoUmVmUHRyPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIGhpbnRzKTsKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDQ3YWJk
ZmQuLjAzYmQ0OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0xNDEs
MTYgKzE0MSwxNiBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1c2VkKCkKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2VydChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVnU2VydmVyKCkucGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQYXVzZU9uRXhjZXB0aW9ucykgewot
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkFzc2VydFBhdXNl
UmVhc29uPiByZWFzb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QXNzZXJ0UGF1
c2VSZWFzb246OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkFzc2VydFBhdXNlUmVhc29uPiByZWFzb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb246OmNyZWF0ZSgpLnJlbGVhc2UoKTsKICAgICAgICAg
aWYgKCFtZXNzYWdlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmVhc29uLT5zZXRNZXNzYWdlKG1l
c3NhZ2UpOwogICAgICAgICBicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERp
c3BhdGNoZXI6OlJlYXNvbjo6QXNzZXJ0LCByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKSk7CiAgICAg
fQogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
QnJlYWtwb2ludENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBj
b2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBhY3Rpb25zLCBib29sIGlzUmVnZXgsIGJvb2wgYXV0b0NvbnRpbnVlKQorc3RhdGljIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZShjb25zdCBT
dHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgY29uZGl0aW9uLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBhY3Rpb25zLCBib29sIGlzUmVn
ZXgsIGJvb2wgYXV0b0NvbnRpbnVlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInVybCIpLCB1
cmwpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJsaW5l
TnVtYmVyIiksIGxpbmVOdW1iZXIpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJjb2x1bW5OdW1iZXIiKSwgY29sdW1uTnVtYmVyKTsKQEAgLTIzOSw3ICsy
MzksNyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJv
bVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJvclN0cgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlv
bmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCog
Y29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBv
dXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCit2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlv
bmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCog
Y29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCog
b3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKQog
ewogICAgIGxvY2F0aW9ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogICAgIGlmICghb3B0aW9u
YWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAgLTI2MSw5ICsyNjEsOSBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBsaQogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2U7CiAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwogICAgIGlmIChvcHRpb25zKSB7Ci0gICAgICAg
ICgqb3B0aW9ucyktPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBjb25kaXRp
b24pOwotICAgICAgICAoKm9wdGlvbnMpLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0Nv
bnRpbnVlIiksIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIGFjdGlvbnMgPSAoKm9wdGlvbnMpLT5n
ZXRBcnJheShBU0NJSUxpdGVyYWwoImFjdGlvbnMiKSk7CisgICAgICAgIG9wdGlvbnMtPmdldFN0
cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBjb25kaXRpb24pOworICAgICAgICBvcHRp
b25zLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51
ZSk7CisgICAgICAgIG9wdGlvbnMtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpLCBh
Y3Rpb25zKTsKICAgICB9CiAKICAgICBCcmVha3BvaW50QWN0aW9ucyBicmVha3BvaW50QWN0aW9u
czsKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJy
ZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9u
ID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkZW50aWZpZXIsIGl0LT5rZXksIGJyZWFr
cG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICBsb2NhdGlvbnMtPmFk
ZEl0ZW0obG9jYXRpb24pOworICAgICAgICAgICAgbG9jYXRpb25zLT5hZGRJdGVtKFdURjo6bW92
ZShsb2NhdGlvbikpOwogICAgIH0KICAgICAqb3V0QnJlYWtwb2ludElkZW50aWZpZXIgPSBicmVh
a3BvaW50SWRlbnRpZmllcjsKIH0KQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0aWMgYm9vbCBwYXJz
ZUxvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0JiBsb2Nh
dGlvbiwgSgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBv
dXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElk
KiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQogewogICAgIEpTQzo6U291cmNlSUQg
c291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKQEAgLTMxMiw5ICszMTIsOSBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdAogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2U7CiAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwogICAgIGlmIChvcHRpb25zKSB7Ci0g
ICAgICAgICgqb3B0aW9ucyktPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBj
b25kaXRpb24pOwotICAgICAgICAoKm9wdGlvbnMpLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgi
YXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIGFjdGlvbnMgPSAoKm9wdGlv
bnMpLT5nZXRBcnJheShBU0NJSUxpdGVyYWwoImFjdGlvbnMiKSk7CisgICAgICAgIG9wdGlvbnMt
PmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBjb25kaXRpb24pOworICAgICAg
ICBvcHRpb25zLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9D
b250aW51ZSk7CisgICAgICAgIG9wdGlvbnMtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9u
cyIpLCBhY3Rpb25zKTsKICAgICB9CiAKICAgICBCcmVha3BvaW50QWN0aW9ucyBicmVha3BvaW50
QWN0aW9uczsKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcAogICAg
IH0KIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
bG9jYXRpb24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlv
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgbG9jYXRpb24pCiB7CiAgICAgaWYgKG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElE
ICE9IEpTQzo6bm9CcmVha3BvaW50SUQpIHsKICAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5y
ZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEKTsKQEAgLTM2
OCw3ICszNjgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgcmVzdW1lKGVycm9yU3Ry
aW5nKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIsIEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0
IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJjZUlE
IHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQogewogICAgIFNj
cmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNl
SUQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCkBAIC0zODgs
MTEgKzM4OCwxMiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzbwogICAgICAgICBkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElEcy5zZXQoYnJlYWtwb2ludElkZW50aWZpZXIsIFZlY3RvcjxKU0M6OkJy
ZWFrcG9pbnRJRD4oKSkuaXRlcmF0b3I7CiAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRCk7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKKyAgICBhdXRv
IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVh
dGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoU3RyaW5nOjpudW1iZXIoc291cmNlSUQpKQotICAg
ICAgICAuc2V0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVyKTsKKyAgICAgICAgLnNldExpbmVO
dW1iZXIoYWN0dWFsTGluZU51bWJlcikKKyAgICAgICAgLnJlbGVhc2UoKTsKICAgICBsb2NhdGlv
bi0+c2V0Q29sdW1uTnVtYmVyKGFjdHVhbENvbHVtbk51bWJlcik7Ci0gICAgcmV0dXJuIGxvY2F0
aW9uOworICAgIHJldHVybiBXVEY6Om1vdmUobG9jYXRpb24pOwogfQogCiB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0
IFN0cmluZyYgc2NyaXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5
cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQpAQCAtNDMwLDEzICs0MzEsMTMgQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdAogICAgIGluamVjdGVkU2NyaXB0LmdldEZ1bmN0aW9uRGV0YWlscyhl
cnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxl
UGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbiBicmVha1JlYXNvbiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhKQogewog
ICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwotICAgIG1fYnJlYWtBdXhEYXRhID0gZGF0
YTsKKyAgICBtX2JyZWFrQXV4RGF0YSA9IFdURjo6bW92ZShkYXRhKTsKICAgICBzY3JpcHREZWJ1
Z1NlcnZlcigpLnNldFBhdXNlT25OZXh0U3RhdGVtZW50KHRydWUpOwogfQogCkBAIC01NDQsMTIg
KzU0NSwxNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldE92ZXJsYXlNZXNzYWdl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKikKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4
dCkKIHsKICAgICBpZiAoc2NyaXB0RGVidWdTZXJ2ZXIoKS5wYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KCkgIT0gSlNDOjpEZWJ1Z2dlcjo6RG9udFBhdXNlT25FeGNlcHRpb25zKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q1NQVmlvbGF0aW9uUGF1c2VSZWFz
b24+IHJlYXNvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9sYXRpb25Q
YXVzZVJlYXNvbjo6Y3JlYXRlKCkuc2V0RGlyZWN0aXZlKGRpcmVjdGl2ZVRleHQpOworICAgICAg
ICBhdXRvIHJlYXNvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9sYXRp
b25QYXVzZVJlYXNvbjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXREaXJlY3RpdmUoZGlyZWN0
aXZlVGV4dCkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrUHJvZ3JhbShJ
bnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpDU1BWaW9sYXRpb24s
IHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpKTsKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKCkKK1JlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxGcmFtZXMoKQog
ewogICAgIGlmICghbV9wYXVzZWRTY3JpcHRTdGF0ZSkKICAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpjcmVhdGUoKTsKQEAgLTYwNiw3ICs2MDksOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlw
dAogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjb25k
aXRpb24iKSwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAgICAgICBicmVha3BvaW50T2JqZWN0
LT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGJyZWFrcG9pbnQuYXV0
b0NvbnRpbnVlKTsKICAgICAgICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYWN0aW9ucyA9IGJyZWFrcG9pbnRPYmplY3QtPmdldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhY3Rpb25zOworICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRBcnJheShBU0NJSUxpdGVy
YWwoImFjdGlvbnMiKSwgYWN0aW9ucyk7CiAgICAgICAgIGlmICghYnJlYWtwb2ludEFjdGlvbnNG
cm9tUHJvdG9jb2woZXJyb3JTdHJpbmcsIGFjdGlvbnMsICZicmVha3BvaW50LmFjdGlvbnMpKSB7
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNjY1LDE0ICs2NjksMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVh
a3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLAogewogICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmlu
amVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4gcGF5bG9hZCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoc2Ft
cGxlLCBvYmplY3RHcm91cEZvckJyZWFrcG9pbnRBY3Rpb24oYWN0aW9uKSk7Ci0gICAgUmVmUHRy
PFByb3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU+IHJlc3VsdCA9IFByb3RvY29sOjpEZWJ1
Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6
RGVidWdnZXI6OlByb2JlU2FtcGxlOjpjcmVhdGUoKQogICAgICAgICAuc2V0UHJvYmVJZChhY3Rp
b24uaWRlbnRpZmllcikKICAgICAgICAgLnNldEJhdGNoSWQoYmF0Y2hJZCkKICAgICAgICAgLnNl
dFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAuc2V0VGltZXN0YW1wKG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmV4ZWN1dGlvblN0b3B3YXRjaCgpLT5l
bGFwc2VkVGltZSgpKQotICAgICAgICAuc2V0UGF5bG9hZChwYXlsb2FkLnJlbGVhc2UoKSk7Cisg
ICAgICAgIC5zZXRQYXlsb2FkKHBheWxvYWQucmVsZWFzZSgpKQorICAgICAgICAucmVsZWFzZSgp
OwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNhbXBsZVByb2JlKHJlc3VsdC5yZWxl
YXNlKCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRTYW1wbGVQcm9iZShXVEY6Om1v
dmUocmVzdWx0KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGlu
dWUoKQpAQCAtNjg3LDEwICs2OTIsMTAgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJv
Z3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVh
c29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCiB7CiAgICAgbV9icmVha1JlYXNv
biA9IGJyZWFrUmVhc29uOwotICAgIG1fYnJlYWtBdXhEYXRhID0gZGF0YTsKKyAgICBtX2JyZWFr
QXV4RGF0YSA9IFdURjo6bW92ZShkYXRhKTsKICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmJyZWFr
UHJvZ3JhbSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggMGFlNzMz
MS4uOWE3NGNjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtNDIsNyArNDIs
NiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CiAKQEAgLTc0LDEwICs3MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZl
KEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBp
bnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRC
cmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQq
IG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9p
bnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRp
Zmllcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJv
clN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNj
cmlwdElELCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5z
aXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0
Y2g+PiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Jikgb3ZlcnJpZGU7CkBAIC05NCw5ICs5Myw5IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKIAotICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0
U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJl
YWtSZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSk7CiAgICAgdm9pZCBjYW5j
ZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwotICAgIHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3Rv
ckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpOwogICAgIHZvaWQgc2NyaXB0RXhlY3V0aW9uQmxvY2tl
ZEJ5Q1NQKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCk7CiAKICAgICBjbGFzcyBMaXN0ZW5l
ciB7CkBAIC0xMzIsNyArMTMxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGlkQ2xlYXJHbG9i
YWxPYmplY3QoKTsKIAogcHJpdmF0ZToKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJy
ZW50Q2FsbEZyYW1lcygpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gY3VycmVudENhbGxGcmFtZXMo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25z
dCBTY3JpcHQmKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJz
ZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RM
aW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgb3ZlcnJpZGUg
ZmluYWw7CkBAIC0xNDAsNyArMTM5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYnJl
YWtwb2ludEFjdGlvblNvdW5kKGludCBicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNp
Z25lZCBzYW1wbGVJZCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkgb3Zl
cnJpZGUgZmluYWw7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50
SWRlbnRpZmllciwgSlNDOjpTb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHJlc29sdmVC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIsIEpTQzo6U291cmNl
SUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmKTsKICAgICBib29sIGFzc2VydFBhdXNlZChFcnJv
clN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAg
IHZvaWQgY2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwCmluZGV4IDYzMmRlZjMuLmEzOTQxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcApAQCAtODAsMTIgKzgwLDEyIEBAIHN0YXRpYyBTY3JpcHREZWJ1Z1NlcnZl
cjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFNjcmlw
CiAgICAgcmV0dXJuIHByZXNlbnRTdGF0ZTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgdG9rZW5Mb2NhdGlvbikKK3N0YXRpYyBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgdG9rZW5Mb2NhdGlvbikKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gcmVzdWx0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZTo6Y3JlYXRlKCkKICAgICAgICAg
LnNldFN0YXJ0T2Zmc2V0KHRva2VuTG9jYXRpb24uc3RhcnRPZmZzZXQpCi0gICAgICAgIC5zZXRF
bmRPZmZzZXQodG9rZW5Mb2NhdGlvbi5lbmRPZmZzZXQpOwotICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOworICAgICAgICAuc2V0RW5kT2Zmc2V0KHRva2VuTG9jYXRpb24uZW5kT2Zmc2V0KQor
ICAgICAgICAucmVsZWFzZSgpOwogfQogCiB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFy
c2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGV4cAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBjb25zdCBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogY29uc3QgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBjb25zdCByZXR1
cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQordm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+JiYgb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZv
ck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KSB7CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxG
dW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KIAogICAgIFN0
cmluZyBhcmd1bWVudHM7CiAgICAgaWYgKG9wdGlvbmFsQXJndW1lbnRzKQotICAgICAgICBhcmd1
bWVudHMgPSAoKm9wdGlvbmFsQXJndW1lbnRzKS0+dG9KU09OU3RyaW5nKCk7CisgICAgICAgIGFy
Z3VtZW50cyA9IG9wdGlvbmFsQXJndW1lbnRzLT50b0pTT05TdHJpbmcoKTsKIAogICAgIFNjcmlw
dERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHByZXZpb3VzUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSA9IFNjcmlwdERlYnVnU2VydmVyOjpEb250UGF1c2VPbkV4Y2VwdGlvbnM7CiAg
ICAgaWYgKGFzQm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpKQpAQCAt
MTk3LDcgKzE5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpydW4oRXJyb3JTdHJp
bmcmKQogewogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVz
Rm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVz
Y3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBsb2NhdGlv
bnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKIHsKICAgICBz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgVk0mIHZtID0gZ2xvYmFsVk0o
KTsKQEAgLTIzNyw4ICsyMzcsOSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVu
dGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcgogICAgICAgICB9
CiAKICAgICAgICAgYm9vbCBpc1ZhbGlkID0gdHlwZUxvY2F0aW9uICYmIHR5cGVTZXQgJiYgIXR5
cGVTZXQtPmlzRW1wdHkoKTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4gZGVzY3JpcHRpb24gPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb246OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0SXNW
YWxpZChpc1ZhbGlkKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5z
ZXRJc1ZhbGlkKGlzVmFsaWQpCisgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIGlm
IChpc1ZhbGlkKSB7CiAgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0TGVhc3RDb21tb25BbmNl
c3Rvcih0eXBlU2V0LT5sZWFzdENvbW1vbkFuY2VzdG9yKCkpOwpAQCAtMjQ3LDcgKzI0OCw3IEBA
IHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNB
dE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNU
cnVuY2F0ZWQodHlwZVNldC0+aXNPdmVyZmxvd24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0
eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgdHlwZURlc2Ny
aXB0aW9ucy0+YWRkSXRlbShXVEY6Om1vdmUoZGVzY3JpcHRpb24pKTsKICAgICB9CiAKICAgICBk
b3VibGUgZW5kID0gY3VycmVudFRpbWVNUygpOwpAQCAtMzMxLDExICszMzIsMTIgQEAgdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW4KICAgICBjb25zdCBWZWN0b3I8QmFzaWNCbG9ja1JhbmdlPiYgYmFz
aWNCbG9ja1JhbmdlcyA9IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NG
b3JTb3VyY2VJRChzb3VyY2VJRCwgdm0pOwogICAgIGJhc2ljQmxvY2tzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46
OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2lj
QmxvY2tSYW5nZXMpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkJhc2ljQmxvY2s+IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
QmFzaWNCbG9jazo6Y3JlYXRlKCkKKyAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OkJhc2ljQmxvY2s+IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6QmFzaWNCbG9jazo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTdGFydE9mZnNldChibG9j
ay5tX3N0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgLnNldEVuZE9mZnNldChibG9jay5tX2VuZE9m
ZnNldCkKLSAgICAgICAgICAgIC5zZXRIYXNFeGVjdXRlZChibG9jay5tX2hhc0V4ZWN1dGVkKTsK
LSAgICAgICAgYmFzaWNCbG9ja3MtPmFkZEl0ZW0obG9jYXRpb24pOworICAgICAgICAgICAgLnNl
dEhhc0V4ZWN1dGVkKGJsb2NrLm1faGFzRXhlY3V0ZWQpCisgICAgICAgICAgICAucmVsZWFzZSgp
OworICAgICAgICBiYXNpY0Jsb2Nrcy0+YWRkSXRlbShXVEY6Om1vdmUobG9jYXRpb24pKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKaW5kZXggZTVkNzNlMC4uMmUwMjhh
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKQEAgLTYzLDEyICs2MywxMiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZSB7IG1f
ZW5hYmxlZCA9IGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
eW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJv
clJhbmdlPiYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RH
cm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05v
dFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29u
dGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3du
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5Piogb3B0aW9uYWxBcmd1bWVu
dHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29u
c3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikgb3ZlcnJpZGUg
ZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3Ry
aW5nJiBvYmplY3RJZCkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBv
d25Qcm9wZXJ0aWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgb3ZlcnJp
ZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1
YWwgdm9pZCBydW4oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVz
Y3JpcHRpb24+PiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZXNG
b3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4mJiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRCYXNpY0Jsb2NrcyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgaW5fc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4m
IG91dF9iYXNpY0Jsb2Nrcykgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5w
eQppbmRleCBhODNlMmZhLi5iYTQ5MTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHkKQEAgLTExNiwxMiArMTE2LDExIEBAIGNsYXNzIENwcEdlbmVyYXRvcjoKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgogICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5w
cmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgogCi0gICAgICAgIHNp
Z2lsID0gJyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcmJwogICAgICAgICAjIFRo
aXMgaGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVy
dGllcy4KICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSBpcyAnb2JqZWN0JzoKLSAgICAgICAgICAgIHJldHVybiAnY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicgKyBzaWdpbAorICAgICAgICAgICAg
cmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYnCiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4g
J2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PicgKyBzaWdpbAorICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJicK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAg
ICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5
cGUpCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CkBAIC0xNDQsNyArMTQz
LDcgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3Bw
X3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlzX29wdGlvbmFsKToK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgot
ICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwl
cz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQogICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CiAgICAgICAgICAgICBidWls
ZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
CiAgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKQEAgLTE1OCw5ICsxNTcsOSBAQCBjbGFzcyBD
cHBHZW5lcmF0b3I6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgogICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4nCisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JwogICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpIGluIFsnYW55J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JworICAgICAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JwogICAgICAgICAgICAgZWxpZiBpc19vcHRp
b25hbDoKICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFt
ZQogICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106
CkBAIC0yMTIsNyArMjExLDcgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgICAgICAgICAgX3R5
cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCiAKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAg
cmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBH
ZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgogICAgICAgICAgICAgY3BwX25hbWUgPSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQogICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgpAQCAtMjk3LDUgKzI5Niw5IEBAIGNsYXNzIENw
cEdlbmVyYXRvcjoKICAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlU
eXBlLCBPYmplY3RUeXBlKSkKIAogICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX3Vz
ZV9yZWZlcmVuY2VzX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFBy
aW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbImFueSIsICJvYmpl
Y3QiXSkKKworICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29weV9m
b3JfcmV0dXJuX3R5cGUoX3R5cGUpOgogICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwg
KEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZl
VHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3QiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCBlMDQ4ODQyLi40
ZjNjMGMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQpAQCAtNzYsMTAgKzc2LDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBB
bHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJl
ZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAi
IiIpCiAKQEAgLTEwOCwxMSArMTA4LDExIEBAIHByb3RlY3RlZDoKICAgICBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKICAgICAiIiIke2NsYXNz
QW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiAk
e2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRlOgotICAgIEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0xMjUsMTMgKzEyNSwxMyBAQCBwcml2YXRlOgogICAgIEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCiAgICAgIiIi
ICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVi
bGljOgotICAgICAgICAke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgJHtjYWxsYmFja05hbWV9
KFJlZjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwog
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVyc30pOwogICAgIH07CiAgICAg
dmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAog
ICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAi
IiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZSkKKyAgICAiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKQEAgLTE0MSw3ICsx
NDEsNyBAQCAke2Rpc3BhdGNoQ2FzZXN9CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKAotIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCisiIiJ2b2lkIElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
CiB7CiAgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKQEAgLTE2NiwxNiArMTY2LDE2IEBAICR7ZGlzcGF0Y2hDYXNlc30KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwg
Km1lc3NhZ2UuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2Fn
ZS5nZXQoKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRv
bWFpbkNvbnN0cnVjdG9yID0gKAotICAgICIiIlBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorICAgICIiIlJlZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0K
IAotSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1fYWdlbnQoYWdlbnQp
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0xODYsMjYg
KzE4NiwyNSBAQCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6Okluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAgIEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgKLSIiIiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OworIiIiICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zQ29udGFpbmVyKTsKICR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CiAgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogIiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkFzeW5jQ29tbWFuZCA9ICgKLSIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDog
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tl
bmREaXNwYXRjaGVyLCBpZCkgeyB9CisiIiJJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShSZWY8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGOjpt
b3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCiB2b2lkIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nl
c3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogJHtvdXRQ
YXJhbWV0ZXJBc3NpZ25tZW50c30KLSAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9y
U3RyaW5nKCkpOworICAgIHNlbmRJZkFjdGl2ZShXVEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBFcnJv
clN0cmluZygpKTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRj
aGVyRGVjbGFyYXRpb24gPSAoCkBAIC0yMjgsMjYgKzIyNywyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qJHtvYmplY3RU
eXBlfSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihS
ZWY8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3Qp
CisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyAke29iamVjdFR5cGV9OwogICAgIHB1Ymxp
YzoiIiIpCiAKICAgICBQcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlID0g
KAogIiIiCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkKKyAgICAg
ICAgUmVmPCR7b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JHtvYmplY3RUeXBlfT4qPigmbV9y
ZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjwke29iamVjdFR5cGV9PiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjwke29iamVjdFR5
cGV9PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8JHtvYmplY3RUeXBlfT4q
PigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yNTgsMTEgKzI1NCwxMCBAQCAk
e2NvbnN0cnVjdG9yRXhhbXBsZX0KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLSAgICB0eXBlZGVmIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsiIiIpCisgICAgfSIi
IikKIAogICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNhc3QgPSAoCi0iIiJQYXNzUmVmUHRyPCR7
b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisiIiJSZWZQdHI8JHtv
YmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiB7CiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4
IDEyNzJjMDAuLmEyNDFjNTMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01Miw3ICs1
Miw2IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRv
cik6CiAgICAgICAgIGhlYWRlcnMgPSBbCiAgICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29s
T2JqZWN0cy5oIicsCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKICAgICAgICAg
ICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KIAogICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0
cmluZycsICdFcnJvclN0cmluZycpXQpAQCAtMTU3LDcgKzE1Niw3IEBAIGNsYXNzIENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGluX3BhcmFt
ZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCiAgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVz
IGluXyVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5f
cGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAg
ICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxi
YWNrTmFtZSkKKyAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiBjYWxsYmFj
ayIgJSBjYWxsYmFja05hbWUpCiAKICAgICAgICAgb3V0X3BhcmFtZXRlcnMgPSBbXQogICAgICAg
ICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggODQ2MTVkZC4uNTgyZGU0YiAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMDQsMTAgKzEwNCwx
MCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdl
bmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBs
ZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGNhc2VzID0gW10K
ICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBkb21haW4u
Y29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAg
JXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5k
X25hbWUpCisgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsIG1lc3NhZ2Up
OycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQogICAgICAgICBmb3IgY29tbWFu
ZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAg
ZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAg
ICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycg
JSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAg
ICAlcyhjYWxsSWQsIG1lc3NhZ2UpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKIAogICAgICAg
ICBzd2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLApAQCAtMTc4LDIyICsxNzgsMjkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIG91dF9z
dWNjZXNzX2FyZ3VtZW50ID0gJyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZQogICAgICAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcg
ICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkKIAorICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnaW5fJyArIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vf
cmVmZXJlbmNlc19mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX2V4cHJlc3Npb24gPSAnJXMuY29weVJlZigpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9u
CisgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcmJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KKwog
ICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlw
ZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRl
ciksCiAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlckV4cHJlc3Npb24nOiBwYXJhbWV0ZXJf
ZXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0
b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAogICAgICAgICAg
ICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAg
ICUocGFyYW1ldGVyVHlwZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OiUoa2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9j
b2xFcnJvcnNQdHIpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5h
bWUpcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUo
c3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJyb3JzLmdldCgpKTsnICUgcGFyYW1fYXJncykK
IAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVG
b3VuZCA/ICZpbl8lKHBhcmFtZXRlck5hbWUpcyA6IG51bGxwdHInICUgcGFyYW1fYXJncworICAg
ICAgICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJO
YW1lKXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0cicgJSBw
YXJhbV9hcmdzCiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCiAgICAgICAgICAg
ICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJp
bmcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRj
aGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKLSAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3Bh
dGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAg
ICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lv
bikKIAogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgogICAgICAgICAgICAgYXN5bmNfYXJn
cyA9IHsKQEAgLTIwNCw3ICsyMTEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCiAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQot
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjaycpCisgICAgICAg
ICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrLmNvcHlSZWYoKScpCiAKICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyczoKQEAgLTI2MSw5ICsyNjgsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
JykKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMo
bV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpu
ZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2Fs
bGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOycgJSBj
b21tYW5kX2FyZ3MpCiAgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+
IDA6CiAgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCkBAIC0yODIsNiArMjg5LDYg
QEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCiAgICAgICAgIGlmIG5vdCBj
b21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3Ip
OycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOycpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggYWUwNGFkZi4uZmYwOWFiMyAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQpAQCAtNTMsNyArNTMsNiBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICciSW5zcGVjdG9y
UHJvdG9jb2xPYmplY3RzLmgiJywKICAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPicsCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4nLAotICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCiAgICAgICAgICAgICAn
PHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCiAKICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDQyNzBiM2IuLjg4ZjU4
ZjQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMDcs
MTMgKzEwNywxMyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0
b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1h
bFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJShkb21haW5OYW1l
KXMuJShldmVudE5hbWUpcyIpKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAg
ICAgICBsaW5lcy5leHRlbmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpLCBwYXJhbXNPYmplY3QpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdC5j
b3B5UmVmKCkpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4
IGQ2MGM2YWQuLjk2MTE2NTAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtNTIsNyArNTIsNiBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAg
IGhlYWRlcnMgPSBzZXQoWwogICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPicsCiAgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKLSAgICAgICAg
ICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nCiAgICAgICAgIF0pCiAKICAgICAgICAgZXhwb3J0X21h
Y3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25l
KQpAQCAtMTk1LDkgKzE5NCwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJh
dG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9idWls
ZGVyX3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikpCiAKICAgICAgICAgY29uc3RydWN0b3Jf
ZXhhbXBsZSA9IFtdCi0gICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICog
UmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3Rf
bmFtZSkpCisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogUmVmPCVz
PiByZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3RfbmFtZSkpCiAg
ICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKICAgICAgICAgICAgIGNvbnN0
cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogICAgIC5zZXQlcyguLi4pJyAlIHVjZmlyc3Qo
bWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQo
JyAgICAgKiAgICAgLnJlbGVhc2UoKScpCiAKICAgICAgICAgYnVpbGRlcl9hcmdzID0gewogICAg
ICAgICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKQEAgLTMwMiw2ICszMDIsOCBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIHsnKQogICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hv
dWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQp
cyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIFdURjo6bW92ZSh2YWx1ZSkpOycgJSBzZXR0ZXJf
YXJncykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJ
bnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIp
LCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykK
QEAgLTMzMyw3ICszMzUsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
KEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBhcmd1bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7
JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1bWVudFswXSkpCiAgICAgICAgICAg
ICBpZiBhcmd1bWVudFsxXToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBQ
YXNzUmVmUHRyPCVzPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBydW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
KTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkKaW5kZXggMzFlZjQ5NC4uMmMyNjNiNSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbi5weQpAQCAtMTIyLDYgKzEyMiw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJyNp
ZiAhQVNTRVJUX0RJU0FCTEVEJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdU
cmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiB2YWx1ZSknICUgKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlw
ZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoIiIiewor
ICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIp
CkBAIC0xNjksNiArMTcwLDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRf
RElTQUJMRUQnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpJyAlIENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVF9BUkco
dmFsdWUsIHZhbHVlKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcgcmVzdWx0
OycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVl
LT5hc1N0cmluZyhyZXN1bHQpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChj
YXN0U3VjY2VlZGVkKTsnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQppbmRleCA4ZmZhZTliLi4wOTFmYTY0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIE9iakNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57JykKIAogICAgICAgICBpZiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAKICAg
ICAgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEgcGFy
YW1ldGVyOiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5
cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBjb21tYW5kLnJldHVybl9wYXJh
bWV0ZXJzKQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJlZF9wb2ludGVyX3Bh
cmFtZXRlcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5k
ZXggM2I4MzZmYS4uYTNjNGUxYiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQpAQCAtMTE2LDcgKzExNiw3IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJl
ZF9wb2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIiVzLiVzIikpOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBldmVudC5l
dmVudF9uYW1lKSkKICAgICAgICAgaWYgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAg
ICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhkb21h
aW4sIGV2ZW50KSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJh
dGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQu
ZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBDcHBHZW5l
cmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpCiAgICAgICAg
ICAgICB2YXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkKaW5kZXggNTE1NGZlYS4uNDczMTAwYiAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC01OCw3ICs1OCw2IEBAIGNsYXNzIE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICci
JXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwK
ICAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKICAgICAg
ICAgICAgICc8d3RmL0Fzc2VydGlvbnMuaD4nLAotICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0
ci5oPicsCiAgICAgICAgIF0KIAogICAgICAgICBoZWFkZXJfYXJncyA9IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9j
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAppbmRleCA5YzRkYWM2Li5kOGE3OWNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjpt
b3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xNDMsNyArMTQzLDYgQEAgSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKIAogI2luY2x1ZGUgIkluc3Bl
Y3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTcyLDMy
ICsxNzEsMzIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3Vi
bGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXls
b2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFz
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291
dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMq
IG9wdF9vdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKICAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNr
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBp
ZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91
YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKICAgICB9OwotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9y
U3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3Rl
cywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1
dGVTUUxBc3luY0NhbGxiYWNrIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+LCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZh
bHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwor
ICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYm
IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50
Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0
cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVm
UHRyPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxi
YWNrKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CiAKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZh
dGU6CiAgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAgdm9p
ZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgZXhlY3V0ZVNR
TFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKICAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJs
aWM6CkBAIC0yNjIsMTIgKzI2MSwxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI3NywzMyArMjc2LDMyIEBAIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cisg
ICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgbWVzc2Fn
ZSk7CiAgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpCi0gICAgICAgIGV4
ZWN1dGVTUUxTeW5jKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBleGVjdXRlU1FM
U3luYyhjYWxsSWQsIG1lc3NhZ2UpOwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNR
TEFzeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkp
OworICAgICAgICBleGVjdXRlU1FMQXN5bmMoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlCiAg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdc
JycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQogCiB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwot
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRh
dGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyOworICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBh
cmFtc0NvbnRhaW5lcik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJh
bCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJh
bXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnMuZ2V0KCkpOwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2Fn
ZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTMxNSw3ICszMTMsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZwogI2VuZGlmCiAKICAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKQEAgLTM0NywxNCArMzQ1
LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nCiAgICAgICAgIGlmIChvdXRfcHJpbnRDb2xv
ci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgfQotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNz
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2s6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURjo6bW92
ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiog
dGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3Ry
aW5nPiogcHJpbnRDb2xvcikKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNl
bmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNv
bHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZh
bHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBz
cWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNv
bG9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcikK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAgICAg
anNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1u
TmFtZXMpOwogICAgIGlmIChub3Rlcy5pc0Fzc2lnbmVkKCkpCkBAIC0zNzMsMjAgKzM3MSwxOSBA
QCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbAogICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7CiAg
ICAgaWYgKHByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdldFZhbHVlKCkp
OwotICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7CisgICAgc2Vu
ZElmQWN0aXZlKFdURjo6bW92ZShqc29uTWVzc2FnZSksIEVycm9yU3RyaW5nKCkpOwogfQogCiB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsK
LSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJk
YXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5f
cXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CisgICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbXNDb250YWluZXIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVy
YWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0
cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzLmdldCgpKTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
KTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNz
YWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzk4LDkgKzM5NSw5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uCiAjZW5kaWYKIAog
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpOwotICAgIG1fYWdlbnQt
PmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2spOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOworICAgIG1f
YWdlbnQtPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKIAogICAgIGlmIChlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOwpAQCAtNDExLDE1ICs0MDgs
MTQgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb24KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0g
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnNQdHIpOworICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRh
YmFzZS5leGVjdXRlU1FMU3luYyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RG
Ojptb3ZlKHByb3RvY29sRXJyb3JzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQz
MSw3ICs0MjcsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZQogI2VuZGlmCiAKICAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25vdGVz
OwogICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwpAQCAtNDU0LDE0ICs0NTAsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGUKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShvdXRfc2NyZWVuQ29sb3IpKTsKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF9wcmludENvbG9yKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJy
b3IpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDog
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tl
bmREaXNwYXRjaGVyLCBpZCkgeyB9CitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
KFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZShXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
OjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwg
Y29uc3QgU3RyaW5nJiBwcmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYg
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRD
b2xvcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwogICAgIGpzb25N
ZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsK
QEAgLTQ3MSwyMCArNDY3LDE5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjCiAgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7Ci0gICAg
c2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKKyAgICBzZW5kSWZBY3Rp
dmUoV1RGOjptb3ZlKGpzb25NZXNzYWdlKSwgRXJyb3JTdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKLSAgICBpbnQgaW5f
ZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVy
eSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYXV0byBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOworICAgIGludCBp
bl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxp
dGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICBpZiAo
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIpOwotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3Jz
LnJlbGVhc2UoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
IGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTQ5Niw5ICs0OTEsOSBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcAog
I2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRj
aGVyLGNhbGxJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJvciwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5
UmVmKCksIGNhbGxJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJvciwgaW5f
ZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CiAKICAgICBpZiAoZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKQEAgLTU1Miw3ICs1
NDcsNiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcAogI2luY2x1ZGUgIkluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CkBAIC02NTAsNyArNjQ0LDYgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTcwNywxMCArNzAwLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9y
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwv
KkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CkBAIC03MjksMzAgKzcyMiwy
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICBS
ZWY8RXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAg
ICBQYXNzUmVmUHRyPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCiAg
ICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAg
ICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwog
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0
SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpAQCAtMTA2NSw3ICsx
MDU1LDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygKICAgICB9OwogCiAgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZh
bHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBS
V0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3Rl
cyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwpAQCAtMTEwNSw3ICsxMDk1LDcgQEAgdm9pZCBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9y
LCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKICAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAg
LTExNDUsNyArMTEzNSw3IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fCiAgICAgfTsKIAogICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xMTc2LDcg
KzExNjYsNyBAQCB2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbgogICAgIH07CiAKICAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJXSVBy
b3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVz
LCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAgLTE1NjUsNyArMTU1NSw2
IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJ
UHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0CmluZGV4IDdiNWVmNTcuLjI3Zjc0NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNDEsMTgg
KzQxLDE4IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0
Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIAogY2xhc3MgQWx0ZXJu
YXRlSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJu
YXRlSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGlu
X3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwg
Y29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9y
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzOCw3ICsxMzgsNiBAQCBJbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIpOwogCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNjQs
MjEgKzE2MywyMSBAQCBwdWJsaWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNr
ID0gNiwKICAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyog
aW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxpbnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9v
dXRfcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4mIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5f
dGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92
YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2Nv
bHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5f
dGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5f
dmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25z
dCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
U3RyaW5nKiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9v
dXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
IG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5f
c2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50
KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKIH07CiAKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwor
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KTsKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgpAQCAtMjQzLDEyICsyNDIsMTIgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0K
IAotUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAotSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1f
YWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CkBAIC0yNTgsNTcgKzI1Nyw1NiBAQCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvcgogICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwo
IkRhdGFiYXNlIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmICht
ZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2FnZSk7CiAgICAgZWxzZSBp
ZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAg
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsIG1lc3NhZ2UpOwogICAgIGVsc2UK
ICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmco
J1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Ci0gICAg
SW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0
KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CisgICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpLCBwYXJhbXNDb250YWluZXIpOwogICAgIGJvb2wgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9
IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5O
YW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJy
YXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksICZj
b2x1bW5OYW1lc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCBu
b3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgibm90ZXMiKSwgJm5vdGVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91Ymxl
PiBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4gaW5fdGltZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldERvdWJsZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksICZ0aW1lc3RhbXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAg
IGJvb2wgdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmdmFs
dWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCAmdmFsdWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICBib29sIHBh
eWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVl
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRW
YWx1ZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAmcGF5
bG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCBkYXRhYmFz
ZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJkYXRhYmFzZUlkIiksICZkYXRhYmFzZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRh
YmFzZUlkIiksICZkYXRhYmFzZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
ICAgICBib29sIHNxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJy
b3IiKSwgJnNxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgic3FsRXJyb3IiKSwgJnNxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKICAgICBib29sIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJp
bmcgaW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmc2NyZWVu
Q29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9zY3Jl
ZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZzY3JlZW5Db2xvcl92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCBwcmludENvbG9yX3Zh
bHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgJnByaW50Q29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRD
b2xvciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAg
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
Iik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVz
c2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJv
cnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KGNhbGxJZCwgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/ICZpbl9jb2x1bW5OYW1lcyA6IG51bGxw
dHIsIG5vdGVzX3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMgOiBudWxscHRyLCB0aW1lc3RhbXBfdmFs
dWVGb3VuZCA/ICZpbl90aW1lc3RhbXAgOiBudWxscHRyLCB2YWx1ZXNfdmFsdWVGb3VuZCA/ICZp
bl92YWx1ZXMgOiBudWxscHRyLCBwYXlsb2FkX3ZhbHVlRm91bmQgPyAmaW5fcGF5bG9hZCA6IG51
bGxwdHIsIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZpbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwg
c3FsRXJyb3JfdmFsdWVGb3VuZCA/ICZpbl9zcWxFcnJvciA6IG51bGxwdHIsIHNjcmVlbkNvbG9y
X3ZhbHVlRm91bmQgPyAmaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBwcmludENvbG9yX3ZhbHVl
Rm91bmQgPyAmaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBjb2x1bW5OYW1l
c192YWx1ZUZvdW5kID8gaW5fY29sdW1uTmFtZXMuY29weVJlZigpIDogbnVsbHB0ciwgbm90ZXNf
dmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8g
JmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVlc192YWx1ZUZvdW5kID8gaW5fdmFsdWVzLmNv
cHlSZWYoKSA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVGb3VuZCA/IGluX3BheWxvYWQuY29weVJl
ZigpIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQgOiBu
dWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gaW5fc3FsRXJyb3IuY29weVJlZigpIDogbnVs
bHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIs
IHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0cik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4g
b3V0X2NvbHVtbk5hbWVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJp
bmc+IG91dF9ub3RlczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91Ymxl
PiBvdXRfdGltZXN0YW1wOwpAQCAtMzE4LDcgKzMxNiw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNh
bGxJCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0
X3NxbEVycm9yOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIG91dF9zY3JlZW5Db2xvcjsKICAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8g
JmluX2NvbHVtbk5hbWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6
IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIs
IHZhbHVlc192YWx1ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVG
b3VuZCA/ICZpbl9wYXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmlu
X2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gJmluX3NxbEVycm9y
IDogbnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51
bGxwdHIsIHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0ciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgJm91dF9wcmludENvbG9yKTsKKyAgICBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGVycm9yLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gaW5fY29sdW1uTmFtZXMu
Y29weVJlZigpIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxw
dHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVl
c192YWx1ZUZvdW5kID8gaW5fdmFsdWVzLmNvcHlSZWYoKSA6IG51bGxwdHIsIHBheWxvYWRfdmFs
dWVGb3VuZCA/IGluX3BheWxvYWQuY29weVJlZigpIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1
ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8g
aW5fc3FsRXJyb3IuY29weVJlZigpIDogbnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/
ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9w
cmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3Rp
bWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9z
cWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKIAogICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKQEAgLTM0MCwz
OSArMzM4LDM4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJCiAgICAgICAgIGlmIChvdXRfcHJp
bnRDb2xvci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAg
fQotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgU3Ry
aW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwotICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1l
c3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRW
YWx1ZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcg
aW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBhdXRv
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOworICAg
IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5l
cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVz
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
cy5nZXQoKSk7CisgICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIGRvdWJsZSBpbl90aW1lc3Rh
bXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFs
dWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9h
ZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShwYXJhbXNDb250YWluZXIu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJh
c2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNx
bEVycm9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgaW5f
c2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVND
SUlMaXRlcmFsKCJwcmludENvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
ICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1l
c3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJy
b3JzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGNhbGxJZCwgaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVl
cywgaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9y
LCBpbl9wcmludENvbG9yKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBpbl9jb2x1bW5OYW1lcy5jb3B5UmVmKCksIGlu
X25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5jb3B5UmVmKCksIGluX3BheWxvYWQuY29w
eVJlZigpLCBpbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5jb3B5UmVmKCksIGluX3NjcmVlbkNv
bG9yLCBpbl9wcmludENvbG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAgU3RyaW5nIG91
dF9ub3RlczsKICAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKQEAgLTM4Miw3ICszNzksNyBAQCB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhsb25nIGNhbGxJZAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CiAgICAgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7
Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBpbl9jb2x1
bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLCBpbl9wYXlsb2FkLCBp
bl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3Is
IG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMs
ICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVu
Q29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGVycm9yLCBpbl9jb2x1bW5OYW1lcy5jb3B5UmVmKCksIGluX25vdGVzLCBpbl90
aW1lc3RhbXAsIGluX3ZhbHVlcy5jb3B5UmVmKCksIGluX3BheWxvYWQuY29weVJlZigpLCBpbl9k
YXRhYmFzZUlkLCBpbl9zcWxFcnJvci5jb3B5UmVmKCksIGluX3NjcmVlbkNvbG9yLCBpbl9wcmlu
dENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRf
dmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0
X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwogCiAgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgb3V0X2NvbHVtbk5hbWVzKTsKQEAgLTM5NSw3ICszOTIsNyBAQCB2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZAogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNv
bG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3Jl
ZW5Db2xvcikpOwogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50
Q29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3By
aW50Q29sb3IpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDQzLDcgKzQ0MCw2IEBAIHZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgY2FsbElkCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTU0MSw3ICs1MzcsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTk4LDEwICs1OTMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9
CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjpt
b3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNz
IEVycm9yOwogICAgIHB1YmxpYzoKQEAgLTYyMCwzMCArNjE1LDI3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJy
b3I+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+
IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigq
dGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOwog
ICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgotICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICog
UmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldE1lc3Nh
Z2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqICAgICAuc2V0Q29kZSgu
Li4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0g
ICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFp
dHM7CiB9OwogCiB9IC8vIERhdGFiYXNlCkBAIC03NjcsOCArNzU5LDggQEAgbmFtZXNwYWNlIElu
c3BlY3RvciB7CiBjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRl
ID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4q
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGlu
X3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5f
dmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25z
dCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBT
dHJpbmcqIGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBj
b25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
aW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2Ny
ZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC05NDcsMTQgKzkzOSwxNCBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
aW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBp
bl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNv
bnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IFN0cmluZyogaW5fcHJpbnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRD
b2xvcikKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5v
dGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFJXSVByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFs
dWVzIik7CkBAIC0xMDEyLDE0ICsxMDA0LDE0IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjCiAg
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5O
YW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGlu
X25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9f
aW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5p
bCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6
KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3Fs
RXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9y
ID8gJm9faW5fc2NyZWVuQ29sb3IgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAm
b19pbl9wcmludENvbG9yIDogbmlsKV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJ
ZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBp
bl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4m
JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVz
dGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3ZhbHVl
cywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9y
LCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29s
b3IpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCksIGVycm9yKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMs
IGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFi
YXNlRXJyb3IgKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3Jl
ZW5Db2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xNDEzLDcgKzE0MDUs
NiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJX
SVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDM4MjJmYTku
LjJmOTAzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVz
dWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFs
dGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3Qg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVm
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAog
CkBAIC0xNTYsNyArMTU2LDYgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0
d29yazMiKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewpAQCAtMTkwLDEyICsxODksMTIgQEAgcHJvdGVjdGVkOgogCiBjbGFz
cyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVm
PEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVz
c2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0
ZToKLSAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yMDcsOCArMjA2LDggQEAgcHJpdmF0ZToKIAogY2xh
c3MgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKQEAgLTIxOCw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiBwdWJsaWM6CkBAIC0yODQsMTIgKzI4MywxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KIEluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKSB7IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAot
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0lu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAg
OiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
cikKICAgICAsIG1fYWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCkBAIC0yOTksMTIgKzI5OCwxMiBAQCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
cgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihB
U0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIEluc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAg
IFJlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
IAogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVzb3Vy
Y2UxKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBsb2FkUmVzb3VyY2UxKGNhbGxJ
ZCwgbWVzc2FnZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicg
d2FzIG5vdCBmb3VuZCIpKTsKIH0KQEAgLTMxOSwxOCArMzE4LDE4IEBAIHZvaWQgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVz
dWx0KSwgZXJyb3IpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwog
fQogCi1JbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
ICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKQEAgLTM0MCw3ICszMzksNyBAQCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewog
ICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIApAQCAtMzcxLDcgKzM3MCw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNz
YWdlLmdldCgpKTsKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsIG1lc3NhZ2UuZ2V0
KCkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC0zODQsMTAg
KzM4MywxMCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJv
cik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmKQpAQCAtNDAwLDEwICszOTksMTAgQEAgdm9pZCBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShy
ZXN1bHQpLCBlcnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikK
QEAgLTQxNiwxMCArNDE1LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAog
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB2
b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00MzIsMTAgKzQzMSwxMCBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CiAKLSAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
V1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmKQpAQCAtNDQ4LDEwICs0NDcsMTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWMK
ICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdl
bnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJv
cik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKQEAgLTQ2NCwxMCAr
NDYzLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVycm9y
KTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00ODAsMTAgKzQ3OSwxMCBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJl
c3VsdCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC01MzEsNyAr
NTMwLDYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWMKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90
b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNjI5LDcgKzYyNyw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0xMjkyLDcgKzEyODksNiBAQCB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBl
cnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAppbmRleCA4ZGM5YzFmLi40MDE4NWE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CkBA
IC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0
ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0x
NDQsNyArMTQ0LDYgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21h
aW4iKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMTcxLDEyICsxNzAsMTIgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAg
ICBzdGF0aWMgUmVmPEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lk
IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgotICAgIEluc3BlY3RvckNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yNDEsMTIgKzI0MCwxMiBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6fkluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigqYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CiB9CiAKLUluc3BlY3RvckNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQog
ICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCiAgICAgLCBtX2FnZW50KGFnZW50KQogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQpAQCAtMjU2LDEyICsyNTUsMTIgQEAgSW5zcGVjdG9yQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oQVNDSUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksIHRoaXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkKK3ZvaWQgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlIikKLSAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoY2Fs
bElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGNhbGxJZCwgbWVzc2FnZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiQ29tbWFuZERvbWFpbiIsICcuJywg
bWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQpAQCAtMjc2LDE0ICsyNzUsMTQgQEAgdm9p
ZCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGxvbmcgY2EKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKICAgICBtX2FnZW50LT5jb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7CiAKICAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InJldHVyblZhbHVlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVl
KG91dF9yZXR1cm5WYWx1ZSkpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzMxLDcgKzMzMCw2IEBAIHZvaWQgSW5z
cGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZShsb25nIGNhCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKQEAgLTQwMSwxMSArMzk5LDExIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIElu
c3BlY3RvckV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1l
dGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
anNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJh
bCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIpKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwYXJh
bWV0ZXIiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1l
dGVyKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIp
LCBwYXJhbXNPYmplY3QpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0LmNvcHlSZWYoKSk7CiAKICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CiB9CkBAIC00NTQsNyArNDUyLDYgQEAgdm9pZCBJbnNwZWN0b3JFdmVudERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGEK
IAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODEzLDcgKzgxMCw3IEBAIHZvaWQgT2JqQ0luc3BlY3Rv
ckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUobG9uCiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oUldJUHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5W
YWx1ZSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIHRvUHJvdG9jb2xT
dHJpbmcocmV0dXJuVmFsdWUpKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5nKCkpOwogICAgIH07
CkBAIC0xMDIxLDkgKzEwMTgsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIGlm
ICghZnJvbnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwg
QVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIikpOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInBhcmFtZXRlciIpLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlcikpOwogICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0
KTsKICAgICBmcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTE0NSw3ICsxMTQyLDYgQEAgX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJz
aW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdAppbmRleCBkOTJlYzUyLi5jYWZlNDZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTMzLDcgKzEzMyw2IEBAIEluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIik7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI0Miw3ICsyNDEs
NiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMjUyLDggKzI1MCw4IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Y2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJs
ZSogY29uc3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29u
c3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7Ci0gICAgdm9p
ZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
dmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSog
Y29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
cywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3Is
IGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xv
cik7CiBwcml2YXRlOgogICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiB9OwpAQCAtMzA1LDExICszMDMsMTEgQEAgcHJpdmF0ZToKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25z
dCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBw
cmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0
IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2Ny
ZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikKIHsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IikpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoY29sdW1uTmFtZXMpCiAgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBj
b2x1bW5OYW1lcyk7CiAgICAgaWYgKG5vdGVzKQpAQCAtMzI2LDE2ICszMjQsMTYgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyhQYXNzUmVmUHQKICAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVuQ29sb3IpOwogICAgIGlmIChwcmludENvbG9y
KQogICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdC5jb3B5UmVmKCkpOwogCiAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtc09iamVjdC0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CiAgICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CiAg
ICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGlt
ZXN0YW1wKTsKQEAgLTM0NCw3ICszNDIsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZgogICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJy
b3IpOwogICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgc2NyZWVuQ29sb3IpOwogICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CisgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QuY29weVJl
ZigpKTsKIAogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KQEAgLTM5Myw3ICszOTEsNiBA
QCB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZgogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NDUsMTAg
KzQ0MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikK
KyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKICAg
ICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVi
bGljOgpAQCAtNDY3LDMwICs0NjQsMjcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PEVycm9yPiYgKCkKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0g
c2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQp
OwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7
CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9
OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRy
PEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3Vs
dCA9IEVycm9yOjpjcmVhdGUoKQogICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICog
ICAgIC5zZXRDb2RlKC4uLik7CisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAg
LnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIH0gLy8g
RGF0YWJhc2UKQEAgLTg4OCw5ICs4ODIsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwog
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzY3JlZW5Db2xv
ciwgQCJzY3JlZW5Db2xvciIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiKSk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3Bl
Y3RvclN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAgaWYgKG5vdGVzKQpAQCAtOTI1
LDkgKzkxOSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsK
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBA
InByaW50Q29sb3IiKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNl
LmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CiAgICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CiAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKQEAg
LTEwNDEsNyArMTAzNSw2IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVz
dWx0CmluZGV4IGY3YjQ0OWQuLjNjNWI2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
IHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTQyLDcgKzE0Miw2IEBAIEluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIik7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90
b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE2NywxMiArMTY2LDEy
IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCiBjbGFzcyBJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3Zl
cnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgotICAgIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIHB1YmxpYzoKQEAgLTI0MSwxMiArMjQwLDEyIEBAIEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
CiAjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQogCiAjaWYgUExBVEZPUk0oV0VCX0NP
TU1BTkRTKQotUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAotSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAg
ICAsIG1fYWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCkBAIC0yNTYsMTIgKzI1NSwxMiBAQCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvcgogICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxp
dGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAg
IGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZShjYWxs
SWQsICptZXNzYWdlLmdldCgpKTsKKyAgICAgICAgbG9hZFJlc291cmNlKGNhbGxJZCwgbWVzc2Fn
ZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBm
b3VuZCIpKTsKIH0KQEAgLTI3NiwxMCArMjc1LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJv
cik7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQogCkBAIC0zMjgsNyArMzI3
LDYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3QKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewpAQCAtMzk1LDcgKzM5Myw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCiB2b2lkIEluc3BlY3Rvck5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJ
TGl0ZXJhbCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiKSk7CiAKICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CkBAIC00NDYsNyArNDQ0LDYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Zyb250
ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00
OTMsMTAgKzQ5MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
LSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBOZXR3b3JrRXJyb3I7CiAgICAgcHVibGljOgpAQCAtNTE1LDMwICs1MTIsMjcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9
CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5ldHdvcmtFcnJvcj4mICgpCisgICAgICAgIFJl
ZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxOZXR3b3JrRXJyb3I+Kj4oJm1fcmVzdWx0KTsK
LSAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxOZXR3b3JrRXJyb3I+KCp0aGlz
KS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkp
OwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZlB0cjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6
Y3JlYXRlKCkKKyAgICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6
OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENv
ZGUoLi4uKTsKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgp
OwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90
b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBOZXR3b3JrMgpA
QCAtOTkwLDcgKzk4NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgaWYgKCFm
cm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJ
SUxpdGVyYWwoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIikpOwogICAgIGZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9
CkBAIC0xMDk4LDcgKzEwOTIsNiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXgg
MmRjZjEzMy4uMzRkMjY3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3Vs
dApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRl
cm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApA
QCAtMTI3LDcgKzEyNyw2IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIzNiw3ICsyMzUsNiBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewpAQCAtMzM0LDcgKzMzMiw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC04MTcsNyArODE0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCA5
Mzk5M2EzLi5kZjM5M2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1
bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0
ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAK
QEAgLTEyNyw3ICsxMjcsNiBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yMzYsNyArMjM1LDYgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKQEAgLTMzNCw3ICszMzIsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMzg0LDEwICszODEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qS2V5UGF0aCovSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihSZWY8LypLZXlQYXRo
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBLZXlQYXRoOwogICAgIHB1YmxpYzoKQEAgLTM5OSwzOCArMzk2LDM1IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxLZXlQYXRoPiYgKCkKKyAgICAgICAgUmVm
PEtleVBhdGg+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8S2V5UGF0aD4qPigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAg
ICAgICAgUGFzc1JlZlB0cjxLZXlQYXRoPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxLZXlQYXRoPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAg
UmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2Fz
dDxSZWY8S2V5UGF0aD4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoK
ICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPEtleVBhdGg+IHJl
c3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRUeXBlKC4uLik7CisgICAg
ICogUmVmPEtleVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICogICAgIC5z
ZXRUeXBlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwog
ICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsKIAogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgewogICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzdHJpbmciKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQgc2V0QXJyYXkoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNl
dEFycmF5KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiYXJyYXkiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJh
eShBU0NJSUxpdGVyYWwoImFycmF5IiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0KIH07CiAK
QEAgLTkyMCw3ICs5MTQsNiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdAppbmRleCAyMDRhMmI4Li5mNjY5NTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFz
c1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTEyNyw3ICsxMjcsNiBAQCBw
cml2YXRlOgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CkBAIC0yMzYsNyArMjM1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzNCw3ICsz
MzIsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODAz
LDcgKzgwMCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAjaW1wb3J0ICJSV0lQcm90
b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggMzY1NDZjMi4uN2YxZTZhNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xMzAsNyArMTMwLDYgQEAgSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50
ZWQ6ICJGYWludGUKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjM5LDcgKzIzOCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMzcs
NyArMzM1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTg2NCw3ICs4NjEsNiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbERl
YnVnZ2VyUmVhc29uKSB7CiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVy
cy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0Cmlu
ZGV4IGRhNzU2NDYuLjU4Y2E0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQK
QEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJu
YXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAg
LTEzMSw3ICsxMzEsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5U
d29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOgogCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNDAs
NyArMjM5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzOCw3ICszMzYsNiBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtOTAyLDcgKzg5OSw2IEBAIHR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKICNp
bXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IGNjNDJmZDIuLjkx
ZDc1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC00MSwxMCAr
NDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xMjcsNyArMTI3
LDYgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjM2LDcgKzIzNSw2IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0z
MzQsNyArMzMyLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTM4NywxMCArMzg0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJv
cjsKICAgICBwdWJsaWM6CkBAIC00MDksMzAgKzQwNiwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVy
YXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+
KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiByZWxl
YXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMp
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKICAgICAg
ICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAg
ICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqIFJlZjxF
cnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRNZXNzYWdlKC4u
LikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQor
ICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5
cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwog
fTsKIAogY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKQEAgLTQ1Miw0MCArNDQ2LDM3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAg
ICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAgICAgUmVmPE9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0g
c2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZT4qPigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7Cisg
ICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWlu
dGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CiAg
ICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
Ci0gICAgICogUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCk7CisgICAgICogUmVmPE9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAg
KiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVm
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAotICAg
IHZvaWQgc2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFs
dWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0
Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTQ5OCwxOSArNDg5LDE5IEBAIHB1YmxpYzoK
ICAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGlt
ZXN0YW1wIiksIHZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFZhbHVlcyhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICB2b2lkIHNldFZhbHVlcyhS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgIHsKLSAgICAgICAg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZh
bHVlKTsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgidmFsdWVzIiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0UGF5
bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHZv
aWQgc2V0UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAg
ICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1
ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgV1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gdmFsdWUpCisgICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKKyAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwg
V1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogfTsKIApAQCAtNTM3LDE1ICs1MjgsMTUgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAg
ICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0
KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVy
QnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFt
ZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNT
ZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIHZhbHVlKTsKQEAgLTU2Niw1NSArNTU3LDUyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1Nl
dD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0
KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+
JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAg
ICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQp
LCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJy
b3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAgICAgUmVmPFBhcmFt
ZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQp
OwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVh
c2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFtZXRlckJ1bmRs
ZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4q
PigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0g
UGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJl
c3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldENvbHVtbk5h
bWVzKC4uLikKICAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKICAgICAgKiAgICAgLnNldFRpbWVz
dGFtcCguLi4pCiAgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQogICAgICAqICAgICAuc2V0UGF5
bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pOworICAgICAqICAgICAuc2V0RXJy
b3IoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
fQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOwogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdl
dHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRo
b2RzLiAqLwpAQCAtNjQwLDEwICs2MjgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVp
bGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92
ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwogICAgIHB1YmxpYzoKQEAgLTY4MywzMyAr
NjcxLDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHM+JiAoKQorICAgICAgICBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0
cykgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwot
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQ
YXNzUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHM+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAK
ICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8T2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3Jl
YXRlKCkKICAgICAgKiAgICAgLnNldEludGVnZXIoLi4uKQogICAgICAqICAgICAuc2V0QXJyYXko
Li4uKQogICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKICAgICAgKiAgICAgLnNldFZhbHVlKC4u
LikKLSAgICAgKiAgICAgLnNldE9iamVjdCguLi4pOworICAgICAqICAgICAuc2V0T2JqZWN0KC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAg
ICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0
czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKQEAgLTczOCwxNSArNzIzLDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFt
ZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVp
bGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsK
ICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYg
c2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJp
bmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0
Q29sdW1uTmFtZXMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZh
bHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29s
dW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1
ZSk7CkBAIC03NjcsNTUgKzc1Miw1MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRW
YWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3Bl
cnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5
bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBFcnJvclNldD4mIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYg
c2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJv
clNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4mICgpCisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5k
bGU+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKLSAgICAg
ICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlz
KS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJnJlc3Vs
dCkpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRl
ckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQ
YXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4p
CiAgICAgICogICAgIC5zZXROb3RlcyguLi4pCiAgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4u
KQogICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKICAgICAgKiAgICAgLnNldFBheWxvYWQoLi4u
KQotICAgICAqICAgICAuc2V0RXJyb3IoLi4uKTsKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLikK
KyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0
eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsK
IH07CiAKIH0gLy8gVGVzdApAQCAtMTMzMSw3ICsxMzEzLDYgQEAgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
LXJlc3VsdAppbmRleCA3NmQwMWVkLi5hNTRjOTUxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgot
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hl
cjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgot
ICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7CiB9OwogCiAKQEAgLTEzMSw3ICsxMzEsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RW51bSgiVGVzdC5DYXN0ZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucwog
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CkBAIC0yNDAsNyArMjM5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVk
ZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzOCw3ICszMzYsNiBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzk2LDEwICszOTMs
MTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPC8qVHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1v
dmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3Mg
VHlwZU5lZWRpbmdDYXN0OwogICAgIHB1YmxpYzoKQEAgLTQzMiw0MCArNDI5LDM3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ0
cmVlIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsK
ICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+JiAo
KQorICAgICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGlu
Z0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0
KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VHlwZU5lZWRp
bmdDYXN0Pio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPFR5
cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8VHlwZU5lZWRpbmdDYXN0PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8VHlwZU5lZWRpbmdDYXN0Pio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAg
ICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8VHlwZU5l
ZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCisgICAgICogUmVm
PFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQogICAg
ICAqICAgICAuc2V0U3RyaW5nKC4uLikKICAgICAgKiAgICAgLnNldE51bWJlciguLi4pCiAgICAg
ICogICAgIC5zZXRBbmltYWxzKC4uLikKICAgICAgKiAgICAgLnNldElkKC4uLikKLSAgICAgKiAg
ICAgLnNldFRyZWUoLi4uKTsKKyAgICAgKiAgICAgLnNldFRyZWUoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVj
dG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogLyogICov
CkBAIC00OTksNDAgKzQ5MywzNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9i
amVjdDEqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAg
ICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CiAgICAgcHVibGljOgogCi0gICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPiYgKCkKKyAgICAgICAgUmVmPFJl
Y3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVv
ZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4qPigmbV9y
ZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3Qx
PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNp
dmVPYmplY3QxPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZl
T2JqZWN0MT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+
IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpOworICAgICAqIFJlZjxSZWN1cnNp
dmVPYmplY3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKQorICAgICAqICAg
ICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5z
cGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCi0gICAgdm9p
ZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAg
ICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwg
V1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogfTsKIApAQCAtNTUzLDQwICs1NDQsMzcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qUmVjdXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAg
ICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmpl
Y3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNp
dmVPYmplY3QyOwogICAgIHB1YmxpYzoKIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVjdXJz
aXZlT2JqZWN0Mj4mICgpCisgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQogCi0gICAg
ICAgIFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4oKnRoaXMpLnJlbGVhc2Uo
KTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJnJlc3VsdCkpOwogICAg
ICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgot
ICAgICAqIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3Qy
OjpjcmVhdGUoKTsKKyAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJz
aXZlT2JqZWN0Mjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0
ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAotICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgdm9pZCBz
ZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
IHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgib2JqIiksIHZhbHVlKTsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib2JqIiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0K
IH07CiAKQEAgLTU5OCw3ICs1ODYsNyBAQCBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRAogfTsKIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOworc3RhdGljIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRApAQCAtNjg0LDYg
KzY3Miw3IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogI2lmICFB
U1NFUlRfRElTQUJMRUQKIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUp
OwogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
U3RyaW5nKHJlc3VsdCk7CiAgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOwpAQCAtNjk0LDYgKzY4
Myw3IEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IHZhbHVlKQogeworICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
T2JqZWN0KG9iamVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3Vj
Y2VlZGVkKTsKQEAgLTcyOSw3ICs3MTksNyBAQCB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeAogfQog
I2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2Jq
ZWN0KHJlc3VsdCk7CkBAIC03NDUsNiArNzM1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjoK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9BUkcodmFs
dWUsIHZhbHVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICAgYm9v
bCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CiAgICAgQVNTRVJUX1VO
VVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKQEAgLTc2NSw2ICs3NTYsNyBAQCB2
b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0MT46OmFzc2VydFZhbHVlSGFzRQogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUp
CiB7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qo
b2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQp
OwpAQCAtMTI1Niw3ICsxMjQ4LDYgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9F
bmNvZGVkVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFs
dWUuY3BwCmluZGV4IGM3MWRiYzYuLjcyN2ViYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAKQEAgLTM3LDIyICszNywyMiBAQCB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEVuY29kZWRWYWx1ZTo6YXNPYmplY3QoKQorUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gRW5jb2RlZFZhbHVlOjphc09iamVjdCgpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0OwogICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFzT2JqZWN0KHJl
c3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
IAotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJheSgpCitSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJheSgpCiB7CiAgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gbV92YWx1
ZS0+YXNBcnJheShyZXN1bHQpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8VmVjdG9yPGNoYXI+Pjo6
ZW5jb2RlVmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCkBAIC0xNzUsMjMgKzE3NSwy
MyBAQCB0ZW1wbGF0ZTw+IFN0cmluZyBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxTdHJpbmc+KCkK
IHRlbXBsYXRlPD4KIHZvaWQgRW5jb2RlZFZhbHVlOjpwdXQ8RW5jb2RlZFZhbHVlPihjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgdHlwZW5hbWUgRW5jb2RpbmdUcmFpdHM8RW5jb2RlZFZhbHVlPjo6
RGVjb2RlZFR5cGUmIHZhbHVlKQogewotICAgIGFzT2JqZWN0KCktPnNldFZhbHVlKGtleSwgdmFs
dWUubV92YWx1ZSk7CisgICAgYXNPYmplY3QoKS0+c2V0VmFsdWUoa2V5LCB2YWx1ZS5tX3ZhbHVl
LmNvcHlSZWYoKSk7CiB9CiAKIHRlbXBsYXRlPD4KIHZvaWQgRW5jb2RlZFZhbHVlOjphcHBlbmQ8
RW5jb2RlZFZhbHVlPihjb25zdCB0eXBlbmFtZSBFbmNvZGluZ1RyYWl0czxFbmNvZGVkVmFsdWU+
OjpEZWNvZGVkVHlwZSYgdmFsdWUpCiB7Ci0gICAgYXNBcnJheSgpLT5wdXNoVmFsdWUodmFsdWUu
bV92YWx1ZSk7CisgICAgYXNBcnJheSgpLT5wdXNoVmFsdWUodmFsdWUubV92YWx1ZS5jb3B5UmVm
KCkpOwogfQogCiB0ZW1wbGF0ZTw+CiBib29sIEVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRWYWx1
ZT4oY29uc3QgU3RyaW5nJiBrZXksIHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPEVuY29kZWRWYWx1
ZT46OkRlY29kZWRUeXBlJiBkZWNvZGVkVmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+IGluc3BlY3RvclZhbHVlKGFzT2JqZWN0KCktPmdldChrZXkpKTsKLSAg
ICBpZiAoIWluc3BlY3RvclZhbHVlKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiB2YWx1ZTsKKyAgICBpZiAoIWFzT2JqZWN0KCktPmdldFZhbHVlKGtleSwgdmFsdWUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkZWNvZGVkVmFsdWUgPSBFbmNvZGVkVmFsdWUo
aW5zcGVjdG9yVmFsdWUpOworICAgIGRlY29kZWRWYWx1ZSA9IEVuY29kZWRWYWx1ZShXVEY6Om1v
dmUodmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKaW5kZXggYzAwMTBlOC4uODY1OWI0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oCkBAIC00MSw3ICs0MSw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czsKIAogY2xhc3MgRW5j
b2RlZFZhbHVlIGZpbmFsIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFbmNvZGVkVmFsdWUoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICBleHBsaWNpdCBF
bmNvZGVkVmFsdWUoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiAg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkgeyB9CiAKICAgICBFbmNvZGVkVmFsdWUoKQpAQCAtNzgs
OCArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRU
bygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gYXNPYmplY3QoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXkoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGFzT2JqZWN0KCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGFzQXJy
YXkoKTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4g
bV92YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkKaW5kZXggZGY5Yjk2Ny4u
NjVmNTQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkKQEAgLTM0MSwxMyAr
MzQxLDEzIEBAIGNsYXNzIFR5cGU6CiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBUeXBlTW9kZXMu
U0NBTEFSOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZCkKICAg
ICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gVHlwZU1vZGVzLlNIQVJFRDoKLSAgICAgICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwlcz4iICUgc2VsZi50eXBlX25hbWUocXVhbGlmaWVkKQorICAgICAg
ICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZCkKICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiAiY29uc3QgJXMmIiAlIHNlbGYudHlwZV9u
YW1lKHF1YWxpZmllZCkKIAogICAgIGRlZiBhcmd1bWVudF90eXBlKHNlbGYsIHF1YWxpZmllZD1G
YWxzZSk6CiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBUeXBlTW9kZXMuU0hBUkVEOgotICAgICAg
ICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzPiIgJSBzZWxmLnR5cGVfbmFtZShxdWFsaWZpZWQp
CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjwlcz4mJiIgJSBzZWxmLnR5cGVfbmFtZShxdWFs
aWZpZWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdG9yYWdlX3R5
cGUoKQogCkBAIC05MzksNyArOTM5LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgZGVmIGdl
bmVyYXRlX21lbWJlcl9tb3ZlX2V4cHJlc3Npb24oc2VsZiwgX21lbWJlcik6CiAgICAgICAgIF90
eXBlID0gc2VsZi5fbW9kZWwuZ2V0X3R5cGVfZm9yX21lbWJlcihfbWVtYmVyKQotICAgICAgICBp
ZiBfdHlwZS5tb2RlID09IFR5cGVNb2Rlcy5PV05FRDoKKyAgICAgICAgaWYgX3R5cGUubW9kZSBp
biBbVHlwZU1vZGVzLk9XTkVELCBUeXBlTW9kZXMuU0hBUkVEXToKICAgICAgICAgICAgIHJldHVy
biAiV1RGOjptb3ZlKCVzKSIgJSBfbWVtYmVyLm1lbWJlck5hbWUKICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgIHJldHVybiBfbWVtYmVyLm1lbWJlck5hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAKaW5kZXggYzFiOWYxMS4uYjc2NjM2OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAK
QEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIENvbnNvbGVDbGllbnQ6OnByaW50Q29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsCiAgICAgV1RGTG9nQWx3
YXlzKCIlcyIsIGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBD
b25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cykK
K3ZvaWQgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgcHJwQXJndW1l
bnRzKQogewogICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyA9IHBycEFyZ3Vt
ZW50czsKIApAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgQ29uc29sZUNsaWVudDo6cHJpbnRDb25z
b2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhCiAgICAg
fQogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2
ZWwoTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cywgQXJndW1lbnRS
ZXF1aXJlbWVudCBhcmd1bWVudFJlcXVpcmVtZW50KQordm9pZCBDb25zb2xlQ2xpZW50OjppbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYg
cHJwQXJndW1lbnRzLCBBcmd1bWVudFJlcXVpcmVtZW50IGFyZ3VtZW50UmVxdWlyZW1lbnQpCiB7
CiAgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzID0gcHJwQXJndW1lbnRzOwog
ICAgIGlmIChhcmd1bWVudFJlcXVpcmVtZW50ID09IEFyZ3VtZW50UmVxdWlyZWQgJiYgIWFyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpKQpAQCAtMTk1LDU3ICsxOTUsNTcgQEAgdm9pZCBDb25zb2xl
Q2xpZW50OjppbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUs
IE1lc3NhZ2VMZXYKICAgICBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCh0eXBlLCBsZXZlbCwgZXhl
YywgYXJndW1lbnRzLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6bG9nV2l0
aExldmVsKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cywgTWVzc2FnZUxldmVsIGxldmVsKQordm9pZCBDb25zb2xlQ2xpZW50Ojpsb2dXaXRoTGV2
ZWwoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cywg
TWVzc2FnZUxldmVsIGxldmVsKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2
ZWwoTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnRSZXF1
aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6
TG9nLCBsZXZlbCwgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50UmVxdWlyZWQp
OwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6Y2xl
YXIoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykK
IHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpDbGVh
ciwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RSZXF1aXJl
ZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6Q2xl
YXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1l
bnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6ZGlyKEV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29s
ZUNsaWVudDo6ZGlyKEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBh
cmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdl
VHlwZTo6RGlyLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudFJl
cXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBl
OjpEaXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJn
dW1lbnRSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6ZGlyWE1MKEV4ZWNTdGF0
ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29u
c29sZUNsaWVudDo6ZGlyWE1MKEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChN
ZXNzYWdlVHlwZTo6RGlyWE1MLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBB
cmd1bWVudFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1l
c3NhZ2VUeXBlOjpEaXJYTUwsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJn
dW1lbnRzKSwgQXJndW1lbnRSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6dGFi
bGUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
KQordm9pZCBDb25zb2xlQ2xpZW50Ojp0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBl
QW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlRhYmxlLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJn
dW1lbnRzLCBBcmd1bWVudFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFu
ZExldmVsKE1lc3NhZ2VUeXBlOjpUYWJsZSwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIFdURjo6
bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xp
ZW50Ojp0cmFjZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMpCit2b2lkIENvbnNvbGVDbGllbnQ6OnRyYWNlKEV4ZWNTdGF0ZSogZXhlYywgUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdl
V2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6VHJhY2UsIE1lc3NhZ2VMZXZlbDo6TG9nLCBl
eGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50Tm90UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2Fn
ZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlRyYWNlLCBNZXNzYWdlTGV2ZWw6OkxvZywg
ZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50Tm90UmVxdWlyZWQpOwogfQogCi12
b2lkIENvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NS
ZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIGJvb2wgY29uZGl0aW9uKQordm9pZCBD
b25zb2xlQ2xpZW50Ojphc3NlcnRDb25kaXRpb24oRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cywgYm9vbCBjb25kaXRpb24pCiB7CiAgICAgaWYgKGNv
bmRpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVB
bmRMZXZlbChNZXNzYWdlVHlwZTo6QXNzZXJ0LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBleGVjLCBh
cmd1bWVudHMsIEFyZ3VtZW50Tm90UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhU
eXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkFzc2VydCwgTWVzc2FnZUxldmVsOjpFcnJvciwgZXhl
YywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50Tm90UmVxdWlyZWQpOwogfQogCi12b2lk
IENvbnNvbGVDbGllbnQ6Omdyb3VwKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXAoRXhlY1N0YXRl
KiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3VwLCBNZXNz
YWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKKyAg
ICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3Vw
LCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50
Tm90UmVxdWlyZWQpOwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6Omdyb3VwQ29sbGFwc2VkKEV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3Zv
aWQgQ29uc29sZUNsaWVudDo6Z3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3VwQ29sbGFwc2VkLCBNZXNzYWdlTGV2
ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKKyAgICBpbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3VwQ29sbGFw
c2VkLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3Vt
ZW50Tm90UmVxdWlyZWQpOwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6Omdyb3VwRW5kKEV4ZWNT
dGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQg
Q29uc29sZUNsaWVudDo6Z3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExl
dmVsKE1lc3NhZ2VUeXBlOjpFbmRHcm91cCwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3Vt
ZW50cywgQXJndW1lbnROb3RSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVB
bmRMZXZlbChNZXNzYWdlVHlwZTo6RW5kR3JvdXAsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBX
VEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZUNsaWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVu
dC5oCmluZGV4IDhmNGYxOTMuLmExNmI4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zb2xlQ2xpZW50LmgKQEAgLTQyLDMwICs0MiwzMCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB+Q29uc29sZUNsaWVudCgpIHsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgcHJpbnRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKIAotICAgIHZvaWQgbG9nV2l0aExl
dmVsKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+LCBN
ZXNzYWdlTGV2ZWwpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgZGlyKEV4ZWNTdGF0ZSosIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGRpclhNTChFeGVj
U3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9p
ZCB0YWJsZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
Pik7Ci0gICAgdm9pZCB0cmFjZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2Ny
aXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBhc3NlcnRDb25kaXRpb24oRXhlY1N0YXRlKiwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4sIGJvb2wgY29uZGl0aW9uKTsKLSAg
ICB2b2lkIGdyb3VwKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+KTsKLSAgICB2b2lkIGdyb3VwQ29sbGFwc2VkKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGdyb3VwRW5kKEV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lkIGxv
Z1dpdGhMZXZlbChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+
JiYsIE1lc3NhZ2VMZXZlbCk7CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqLCBSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOworICAgIHZvaWQgZGlyKEV4ZWNTdGF0ZSosIFJl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCBkaXJYTUwoRXhl
Y1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2b2lk
IHRhYmxlKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7
CisgICAgdm9pZCB0cmFjZShFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpOworICAgIHZvaWQgYXNzZXJ0Q29uZGl0aW9uKEV4ZWNTdGF0ZSosIFJlZlB0cjxJ
bnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwgYm9vbCBjb25kaXRpb24pOworICAgIHZvaWQg
Z3JvdXAoRXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsK
KyAgICB2b2lkIGdyb3VwQ29sbGFwc2VkKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCBncm91cEVuZChFeGVjU3RhdGUqLCBSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwogCi0gICAgdmlydHVhbCB2b2lkIG1lc3Nh
Z2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY291bnQoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2
ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY291bnQo
RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHByb2ZpbGUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcm9maWxlRW5kKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdGltZShFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHRpdGxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRpbWVFbmQoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAoRXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4mJikgPSAwOwogCiBwcml2YXRlOgogICAgIGVudW0gQXJndW1lbnRSZXF1
aXJlbWVudCB7IEFyZ3VtZW50UmVxdWlyZWQsIEFyZ3VtZW50Tm90UmVxdWlyZWQgfTsKLSAgICB2
b2lkIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiwgQXJndW1lbnRSZXF1aXJlbWVudCk7CisgICAgdm9pZCBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwg
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmLCBBcmd1bWVudFJlcXVpcmVtZW50
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlU2V0LmNwcAppbmRleCAzMTBmNjRkLi4yYTU1MmY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcApAQCAtMjM3LDE3ICsyMzcsMTcgQEAgU3RyaW5nIFR5
cGVTZXQ6OmxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBUeXBlU2V0OjphbGxTdHJ1
Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdAorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPj4g
VHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3QKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0
aW9uPjo6Y3JlYXRlKCk7CisgICAgYXV0byBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0
aW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJl
SGlzdG9yeS5zaXplKCk7IGkrKykKICAgICAgICAgZGVzY3JpcHRpb24tPmFkZEl0ZW0obV9zdHJ1
Y3R1cmVIaXN0b3J5LmF0KGkpLT5pbnNwZWN0b3JSZXByZXNlbnRhdGlvbigpKTsKIAotICAgIHJl
dHVybiBkZXNjcmlwdGlvbi5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkZXNjcmlw
dGlvbik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlw
ZVNldD4gVHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCgpIGNvbnN0CitSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHlwZVNldD4gVHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXQ6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJc0Z1bmN0aW9uKChtX3NlZW5UeXBlcyAmIFR5cGVGdW5j
dGlvbikgIT0gVHlwZU5vdGhpbmcpCkBAIC01MTEsMTEgKzUxMSwxMSBAQCBTdHJpbmcgU3RydWN0
dXJlU2hhcGU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKK1JlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0
dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IGJhc2UgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2Ny
aXB0aW9uPiBjdXJyZW50T2JqZWN0ID0gYmFzZTsKLSAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+
IGN1cnJlbnRTaGFwZSA9IHRoaXM7CisgICAgYXV0byBiYXNlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+
IGN1cnJlbnRPYmplY3QgPSBiYXNlLmNvcHlSZWYoKTsKKyAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IGN1cnJlbnRTaGFwZSh0aGlzKTsKIAogICAgIHdoaWxlIChjdXJyZW50U2hhcGUpIHsKICAg
ICAgICAgYXV0byBmaWVsZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Ojpj
cmVhdGUoKTsKQEAgLTUyNSwyMSArNTI1LDIxIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVyZVNoYXBlOjppCiAg
ICAgICAgIGZvciAoYXV0byBmaWVsZCA6IGN1cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcykK
ICAgICAgICAgICAgIG9wdGlvbmFsRmllbGRzLT5hZGRJdGVtKGZpZWxkLmdldCgpKTsKIAotICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoZmllbGRzKTsKLSAgICAgICAgY3VycmVudE9i
amVjdC0+c2V0T3B0aW9uYWxGaWVsZHMob3B0aW9uYWxGaWVsZHMpOworICAgICAgICBjdXJyZW50
T2JqZWN0LT5zZXRGaWVsZHMoJmZpZWxkcy5nZXQoKSk7CisgICAgICAgIGN1cnJlbnRPYmplY3Qt
PnNldE9wdGlvbmFsRmllbGRzKCZvcHRpb25hbEZpZWxkcy5nZXQoKSk7CiAgICAgICAgIGN1cnJl
bnRPYmplY3QtPnNldENvbnN0cnVjdG9yTmFtZShjdXJyZW50U2hhcGUtPm1fY29uc3RydWN0b3JO
YW1lKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0SXNJbXByZWNpc2UoY3VycmVudFNoYXBl
LT5tX2lzSW5EaWN0aW9uYXJ5TW9kZSk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRTaGFwZS0+bV9w
cm90bykgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBuZXh0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgY3Vy
cmVudE9iamVjdC0+c2V0UHJvdG90eXBlU3RydWN0dXJlKG5leHRPYmplY3QpOwotICAgICAgICAg
ICAgY3VycmVudE9iamVjdCA9IG5leHRPYmplY3Q7CisgICAgICAgICAgICBhdXRvIG5leHRPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6
Y3JlYXRlKCkucmVsZWFzZSgpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0UHJvdG90
eXBlU3RydWN0dXJlKCZuZXh0T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIGN1cnJlbnRPYmpl
Y3QgPSBXVEY6Om1vdmUobmV4dE9iamVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjdXJyZW50
U2hhcGUgPSBjdXJyZW50U2hhcGUtPm1fcHJvdG87CiAgICAgfQogCi0gICAgcmV0dXJuIGJhc2Uu
cmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYmFzZSk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCmluZGV4IGIyYzgxMDcuLjFjYTM5MTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkUHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+KTsKICAg
ICBTdHJpbmcgc3RyaW5nUmVwcmVzZW50YXRpb24oKTsKICAgICBTdHJpbmcgdG9KU09OU3RyaW5n
KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKTsKKyAgICBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IGluc3Bl
Y3RvclJlcHJlc2VudGF0aW9uKCk7CiAgICAgdm9pZCBzZXRDb25zdHJ1Y3Rvck5hbWUoU3RyaW5n
IG5hbWUpIHsgbV9jb25zdHJ1Y3Rvck5hbWUgPSAobmFtZS5pc0VtcHR5KCkgPyAiT2JqZWN0IiA6
IG5hbWUpOyB9CiAgICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSgpIHsgcmV0dXJuIG1fY29uc3Ry
dWN0b3JOYW1lOyB9CiAgICAgdm9pZCBzZXRQcm90byhQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBl
PiBzaGFwZSkgeyBtX3Byb3RvID0gc2hhcGU7IH0KQEAgLTEwMiwxMSArMTAyLDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZSgpOwogICAgIFN0cmluZyBkdW1wVHlwZXMoKSBj
b25zdDsKICAgICBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0
cnVjdHVyZURlc2NyaXB0aW9uPj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7
CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRp
b25zKCkgY29uc3Q7CiAgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OwogICAgIGJvb2wg
aXNPdmVyZmxvd24oKSBjb25zdCB7IHJldHVybiBtX2lzT3ZlcmZsb3duOyB9CiAgICAgU3RyaW5n
IGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXQ+IGluc3BlY3RvclR5cGVTZXQoKSBjb25zdDsKKyAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZVNldD4gaW5zcGVjdG9yVHlw
ZVNldCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5
cGVzID09IFR5cGVOb3RoaW5nOyB9CiAgICAgYm9vbCBkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJf
dCB0ZXN0KSBjb25zdDsKICAgICB1aW50MzJfdCBzZWVuVHlwZXMoKSBjb25zdCB7IHJldHVybiBt
X3NlZW5UeXBlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwppbmRleCAxNDljOGVkLi5iNWRhNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDE1LTAxLTA2ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBwdXJnZSBQYXNzUmVmUHRyIGZyb20gSW5zcGVjdG9yIGNv
ZGUgYW5kIHVzZSBSZWYgZm9yIHR5cGVkIGFuZCB1bnR5cGVkIHByb3RvY29sIG9iamVjdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDA1MworCisg
ICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCisKKyAgICAgICAgKiB3dGYvU3RvcHdh
dGNoLmg6CisgICAgICAgIChXVEY6OlN0b3B3YXRjaDo6Y3JlYXRlKTogUmV0dXJuIGEgUmVmLgor
CiAyMDE1LTAxLTA1ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAg
ICBQdXJnZSBQYXNzUmVmUHRyIGZyb20gUGFnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1N0b3B3YXRjaC5oIGIvU291cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKaW5kZXggNDIxMzkxMS4u
OWNiYTlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKKysrIGIvU291
cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKQEAgLTMzLDkgKzMzLDkgQEAgbmFtZXNwYWNlIFdURiB7
CiAKIGNsYXNzIFN0b3B3YXRjaCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3B3YXRjaD4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3B3YXRjaD4gY3JlYXRlKCkKKyAgICBzdGF0
aWMgUmVmPFN0b3B3YXRjaD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RvcHdhdGNoKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9wd2F0
Y2goKSk7CiAgICAgfQogCiAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM1NDYwZmEu
Ljk4MDc3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMzUgQEAKKworMjAxNS0wMS0wNiAgQnJp
YW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogcHVyZ2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZv
ciB0eXBlZCBhbmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdXNlcyBvZiBQ
YXNzUmVmUHRyIHdpdGggdXNlcyBvZiBSZWZQdHImJiBhbmQgV1RGOjptb3ZlKCkgaW4gY29kZQor
ICAgICAgICByZWxhdGVkIHRvIFdlYiBJbnNwZWN0b3IuIEl0IGFsc28gY29udmVydHMgbWFueSB1
c2VzIG9mIFJlZlB0ciB0byBSZWYgd2hlcmUKKyAgICAgICAgcmVmZXJlbmNlcyBhcmUgYWx3YXlz
IG5vbi1udWxsLiBUaGVzZSB0d28gcmVmYWN0b3JpbmdzIGhhdmUgYmVlbiBjb21iaW5lZCBzaW5j
ZQorICAgICAgICB0aGV5IHRlbmQgdG8gcmVxdWlyZSBzaW1pbGFyIGNoYW5nZXMgdG8gdGhlIGNv
ZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VkLgorCisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bG9nRXhjZXB0aW9uVG9D
b25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRNZXNzYWdlKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXBvcnRF
eGNlcHRpb24pOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvckRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhTU0F1ZGl0b3JEZWxlZ2F0ZTo6Z2VuZXJhdGVWaW9sYXRpb25SZXBvcnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0Nv
bW1hbmRMaW5lQVBJSG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlv
bkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0
eWxlc0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENv
bXB1dGVkU3R5bGVGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpzZXRTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFByb3BlcnR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9n
Z2xlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1
bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2Vu
dDo6Zm9yY2VQc2V1ZG9TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0TmFtZWRGbG93Q29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0Fn
ZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JOYW1lZEZs
b3cpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29s
ZVRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNv
bnNvbGVUaW1lU3RhbXApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9i
amVjdEZvckhpZ2hsaWdodGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2gpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VDb25maWdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cHVz
aE5vZGVQYXRoVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
c2V0SW5zcGVjdE1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpp
bm5lckhpZ2hsaWdodFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OmhpZ2hsaWdodE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9y
RE9NRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdl
QXJlYSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDogVXNlIFJlZiBm
b3IgYWxsIGNhbGxiYWNrcyBzaW5jZSB0aGV5IGFyZQorICAgICAgICBub3QgbnVsbGFibGUuCisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpzZXREYXRhYmFzZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6IFVzZSBSZWYgZm9yIGFsbCBjYWxsYmFja3Mgc2lu
Y2UgdGhleSBhcmUKKyAgICAgICAgbm90IG51bGxhYmxlLgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Q2xlYXJPYmplY3RTdG9yZUxpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlOjpDbGVhck9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xl
Q291bnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RvcENvbnNvbGVUaW1pbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9u
TG9hZGVkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlc3Npb25Nb2RpZmllZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5jaHJv
bm91c2x5SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZExvYWRYSFJTeW5jaHJvbm91c2x5SW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVdvcmtlclNjcmlwdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1
cmVTdG9wcGVkSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnBsYXliYWNrU3RhcnRlZEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1BhdXNlZEltcGwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFj
a0hpdFBvc2l0aW9uSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnBsYXliYWNrRmluaXNoZWRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZElt
cGwpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExv
YWRYSFIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNz
aW9uQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlc3Npb25Mb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZXNzaW9uTW9kaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRl
ZExvYWRpbmdGb3JDbGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRTZW5kV2ViU29ja2V0RnJhbWUpOiBEZWxldGVkLgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25z
Rm9yQ29tcG9zaXRpbmdMYXllcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVy
VHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZE9iamVjdEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRBcnJheUZvclF1
YWQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JSZWdpb25IaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6YnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkT2JqZWN0Rm9yU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZv
ckNTU1JlZ2lvbkNvbnRlbnRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmRyYXdQYWludFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yUmVu
ZGVyZXJGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTaGFwZU91
dHNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hsaWdo
dGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhIUlRl
eHREZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yQ29va2llKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1aWxkQXJyYXlGb3JDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clJlcGxheUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJ
bnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24p
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXNzaW9uRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVudERhdGEp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmJ1aWxkT2JqZWN0Rm9ySGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZv
clRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRTZW5kV2Vi
U29ja2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
c2V0RXh0cmFIVFRQSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlk
U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRDYWNoZURpc2FibGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFBhcnNlZFN0eWxl
U2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRTb3VyY2VS
YW5nZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlhT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFzQ1NTUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlh
TGlzdENoYWluKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6ZXh0cmFjdFNvdXJjZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGVTaGVldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTZWxl
Y3RvckhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RvcnNGcm9tU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RG
b3JTZWxlY3Rvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6
YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNTU0lkOjpJbnNwZWN0b3JDU1NJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDU1NJZDo6YXNQcm90b2NvbFZhbHVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzdGFydEZyb21Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlUmVjb3JkRW50cnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZCk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9OZXR3
b3JrUmVzb3VyY2VzRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYSFJSZXBsYXlEYXRhOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WEhSUmVwbGF5RGF0YTo6WEhSUmVwbGF5RGF0YSk6
CisgICAgICAgICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpkZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OnNldERl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNl
RGF0YTo6YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpS
ZXNvdXJjZURhdGE6OnNldEJ1ZmZlcik6CisgICAgICAgICogaW5zcGVjdG9yL1RpbWVsaW5lUmVj
b3JkRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6
OmNyZWF0ZUdlbmVyaWNSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVCYWNrZ3JvdW5kUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29uc29sZVByb2ZpbGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVT
YW1wbGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlRXZlbnREaXNwYXRjaERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVHZW5lcmljVGltZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZXJJbnN0YWxsRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSTG9h
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVF
dmFsdWF0ZVNjcmlwdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVUaW1lU3RhbXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVz
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVS
ZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZUZpbmlzaERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZlUmVzb3VyY2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTGF5b3V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZURlY29kZUlt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVJlc2l6ZUltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZU1hcmtEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUGFpbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkUHJvZmlsZUluc3BlY3Rvck9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlV2ViU29ja2V0Q3JlYXRlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNXZWJT
b2NrZXREYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpleGVj
dXRpb25TdG9wd2F0Y2gpOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250
cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6YWRkTWVzc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlQ29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
b25zb2xlQ2xpZW50Ojp0aW1lRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xp
ZW50Ojp0aW1lU3RhbXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuaDoKKyAg
ICAgICAgKiByZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlDb250cm9sbGVyOjpzd2l0Y2hTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
eUNvbnRyb2xsZXI6OmNyZWF0ZVNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29u
dHJvbGxlcjo6Y29tcGxldGVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRy
b2xsZXI6OmxvYWRTZWdtZW50QXRJbmRleCk6CisgICAgICAgICogcmVwbGF5L1JlcGxheUlucHV0
Q3JlYXRpb25NZXRob2RzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluaXRpYWxOYXZpZ2F0aW9u
OjpjcmVhdGVGcm9tUGFnZSk6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6bG9n
RXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKToK
KyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xl
KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisKIDIwMTUtMDEtMDYg
IEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IHBhc3MgcGFyYW1ldGVycyB0byBpbnNwZWN0b3IgYWdlbnRzIGJ5IHJlZmVyZW5j
ZSB3aGVyZSBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCmluZGV4IGI5ZDU5MTIuLjUwZWYwMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFz
ZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZQogCiAg
ICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJhc2VDb250
ZXh0Rm9yKGNvbnRleHQpOwogICAgIGRhdGFiYXNlQ29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNl
cygpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRl
eHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbik7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0
YWJhc2UoY29udGV4dCwgZGF0YWJhc2UuY29weVJlZigpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLT5ob3N0KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lvbik7CiAKICAgICBpZiAoYmFja2VuZC0+
aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFz
ZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggOGY4
Y2I4ZS4uMWY0NTYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yNjA2LDkgKzI2MDYs
OSBAQCBFdmVudFRhcmdldCogRG9jdW1lbnQ6OmVycm9yRXZlbnRUYXJnZXQoKQogICAgIHJldHVy
biBtX2RvbVdpbmRvdy5nZXQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6bG9nRXhjZXB0aW9uVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3ZvaWQgRG9jdW1lbnQ6OmxvZ0V4Y2VwdGlv
blRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrKQogewotICAgIGFkZE1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwgc291cmNlVVJM
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7CisgICAgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgZXJyb3JNZXNzYWdlLCBzb3Vy
Y2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgV1RGOjptb3ZlKGNhbGxTdGFjaykpOwog
fQogCiB2b2lkIERvY3VtZW50OjpzZXRVUkwoY29uc3QgVVJMJiB1cmwpCkBAIC00OTY3LDcgKzQ5
NjcsNyBAQCB2b2lkIERvY3VtZW50OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdAogICAgICAgICBwYWdlLT5jb25zb2xlKCku
YWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCByZXF1ZXN0SWRlbnRpZmllciwgdGhp
cyk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgRG9j
dW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKCFpc0NvbnRleHRUaHJlYWQo
KSkgewogICAgICAgICBwb3N0VGFzayhBZGRDb25zb2xlTWVzc2FnZVRhc2soc291cmNlLCBsZXZl
bCwgU3RyaW5nQ2FwdHVyZShtZXNzYWdlKSkpOwpAQCAtNDk3NSw3ICs0OTc1LDcgQEAgdm9pZCBE
b2N1bWVudDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxl
dmVsLCBjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBh
Z2UoKSkKLSAgICAgICAgcGFnZS0+Y29uc29sZSgpLmFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwg
bWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjaywg
c3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAgICAgcGFnZS0+Y29uc29sZSgpLmFkZE1l
c3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIFdURjo6bW92ZShjYWxsU3RhY2spLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIp
OwogfQogCiBTZWN1cml0eU9yaWdpbiogRG9jdW1lbnQ6OnRvcE9yaWdpbigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCmluZGV4IDk4MzZlYTkuLmYxYjdkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CkBAIC0xMTc5LDcgKzExNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kV2lsbFJldmVhbEVk
Z2VFdmVudHNJZk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbnN0IEludFBv
aW50JiBuZXdQb3NpdGlvbiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFNp
emUmIGNvbnRlbnRzU2l6ZSwgRWxlbWVudCogdGFyZ2V0ID0gbnVsbHB0cik7CiAKICAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0KiBlcnJvckV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWw7Ci0gICAg
dmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPikgb3ZlcnJpZGUg
ZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYp
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCBpbml0RE5TUHJlZmV0Y2goKTsKIApAQCAtMTMx
Nyw3ICsxMzE3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIG92ZXJyaWRlIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgb3ZlcnJpZGUgZmluYWwgeyBkZXJlZigpOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIgPSAwKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBK
U0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkg
b3ZlcnJpZGUgZmluYWw7CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZh
bCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggYjJkYjU5MS4uMWEwNjM3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMzUwLDI1ICszNTAs
MjUgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzYW5pdGl6ZVNjcmlwdEVycm9yKFN0
cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgQ2Fj
aGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJl
cG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIs
IGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiB7CiAg
ICAgaWYgKG1faW5EaXNwYXRjaEVycm9yRXZlbnQpIHsKICAgICAgICAgaWYgKCFtX3BlbmRpbmdF
eGNlcHRpb25zKQogICAgICAgICAgICAgbV9wZW5kaW5nRXhjZXB0aW9ucyA9IHN0ZDo6bWFrZV91
bmlxdWU8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRXhjZXB0aW9uPj4+KCk7Ci0gICAg
ICAgIG1fcGVuZGluZ0V4Y2VwdGlvbnMtPmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdF
eGNlcHRpb24+KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VV
UkwsIGNhbGxTdGFjaykpOworICAgICAgICBtX3BlbmRpbmdFeGNlcHRpb25zLT5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxQZW5kaW5nRXhjZXB0aW9uPihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBjYWxsU3RhY2suY29weVJlZigpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBGaXJzdCByZXBvcnQgdGhlIG9yaWdpbmFsIGV4Y2Vw
dGlvbiBhbmQgb25seSB0aGVuIGFsbCB0aGUgbmVzdGVkIG9uZXMuCiAgICAgaWYgKCFkaXNwYXRj
aEVycm9yRXZlbnQoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJj
ZVVSTCwgY2FjaGVkU2NyaXB0KSkKLSAgICAgICAgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGVycm9y
TWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7
CisgICAgICAgIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2suY29weVJlZigpKTsKIAogICAgIGlm
ICghbV9wZW5kaW5nRXhjZXB0aW9ucykKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0V4Y2VwdGlvbj4+PiBwZW5kaW5n
RXhjZXB0aW9ucyA9IFdURjo6bW92ZShtX3BlbmRpbmdFeGNlcHRpb25zKTsKICAgICBmb3IgKGF1
dG8mIGV4Y2VwdGlvbiA6ICpwZW5kaW5nRXhjZXB0aW9ucykKLSAgICAgICAgbG9nRXhjZXB0aW9u
VG9Db25zb2xlKGV4Y2VwdGlvbi0+bV9lcnJvck1lc3NhZ2UsIGV4Y2VwdGlvbi0+bV9zb3VyY2VV
UkwsIGV4Y2VwdGlvbi0+bV9saW5lTnVtYmVyLCBleGNlcHRpb24tPm1fY29sdW1uTnVtYmVyLCBl
eGNlcHRpb24tPm1fY2FsbFN0YWNrKTsKKyAgICAgICAgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGV4
Y2VwdGlvbi0+bV9lcnJvck1lc3NhZ2UsIGV4Y2VwdGlvbi0+bV9zb3VyY2VVUkwsIGV4Y2VwdGlv
bi0+bV9saW5lTnVtYmVyLCBleGNlcHRpb24tPm1fY29sdW1uTnVtYmVyLCBleGNlcHRpb24tPm1f
Y2FsbFN0YWNrLmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCAyYjQzY2E3Li5kOWJlYmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTc2LDcgKzc2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlRXZhbChjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkgPSAwOwogCiAgICAgYm9vbCBzYW5pdGl6ZVNjcmlwdEVycm9yKFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmVOdW1iZXIsIGludCYgY29sdW1uTnVtYmVyLCBTdHJpbmcm
IHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOwotICAgIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNv
bHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRDYWxsU3RhY2s+LCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBy
ZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiAKICAg
ICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRy
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAgICAgdmlydHVhbCB2b2lk
IGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgPSAwOwpA
QCAtMTk4LDkgKzE5OCw5IEBAIHByb3RlY3RlZDoKICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVy
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUq
ID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3RJZGVudGlmaWVyID0gMCkgPSAwOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXQqIGVycm9y
RXZlbnRUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29s
ZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2Ny
aXB0Q2FsbFN0YWNrPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNv
bGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBp
bnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrPiYmKSA9IDA7CiAgICAgYm9vbCBkaXNwYXRjaEVycm9yRXZlbnQoY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwCmluZGV4IGEzMmZhMDguLjA0ZGQwNDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvckRlbGVnYXRl
LmNwcApAQCAtODIsMTIgKzgyLDEyIEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IFhTU0F1ZGl0b3JE
ZWxlZ2F0ZTo6Z2VuZXJhdGVWaW9sYXRpb25SZXBvcnQoY29uc3QgWFNTSW5mbyYKICAgICAgICAg
ICAgIGh0dHBCb2R5ID0gZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpOwogICAgIH0KIAotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydERldGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydERldGFpbHMgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlcG9ydERldGFpbHMtPnNldFN0cmluZygicmVx
dWVzdC11cmwiLCB4c3NJbmZvLm1fb3JpZ2luYWxVUkwpOwogICAgIHJlcG9ydERldGFpbHMtPnNl
dFN0cmluZygicmVxdWVzdC1ib2R5IiwgaHR0cEJvZHkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVwb3J0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBy
ZXBvcnRPYmplY3QtPnNldE9iamVjdCgieHNzLXJlcG9ydCIsIHJlcG9ydERldGFpbHMucmVsZWFz
ZSgpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXBvcnRPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIHJlcG9ydE9iamVjdC0+c2V0T2JqZWN0KCJ4c3MtcmVwb3J0
IiwgV1RGOjptb3ZlKHJlcG9ydERldGFpbHMpKTsKIAogICAgIHJldHVybiBGb3JtRGF0YTo6Y3Jl
YXRlKHJlcG9ydE9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IGIx
M2Q5YzEuLmI0NjRkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21t
YW5kTGluZUFQSUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5k
TGluZUFQSUhvc3QuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0
OjpkaXNjb25uZWN0KCkKICNlbmRpZgogfQogCi12b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5z
cGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBoaW50cykKK3ZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1w
bChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgb2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
JiYgaGludHMpCiB7CiAgICAgaWYgKCFtX2luc3BlY3RvckFnZW50KQogICAgICAgICByZXR1cm47
CkBAIC0xMDEsOCArMTAxLDggQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RJbXBs
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVjdCwgUGFzc1JlZlAKICAgICBpZiAoIWhp
bnRzLT5hc09iamVjdChoaW50c09iamVjdCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlbW90ZU9iamVj
dCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0KTsKLSAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0
KHJlbW90ZU9iamVjdC5yZWxlYXNlKCksIGhpbnRzT2JqZWN0LnJlbGVhc2UoKSk7CisgICAgYXV0
byByZW1vdGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KFdURjo6bW92ZShvYmplY3QpKTsKKyAgICBt
X2luc3BlY3RvckFnZW50LT5pbnNwZWN0KFdURjo6bW92ZShyZW1vdGVPYmplY3QpLCBXVEY6Om1v
dmUoaGludHNPYmplY3QpKTsKIH0KIAogdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50
TGlzdGVuZXJzSW1wbChOb2RlKiBub2RlLCBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+JiBsaXN0
ZW5lcnNBcnJheSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5k
TGluZUFQSUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhv
c3QuaAppbmRleCBiMDNmMTk2Li4zMWU2YzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZEluc3BlY3RlZE9iamVjdChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdGFibGVPYmplY3Q+
KTsKICAgICB2b2lkIGNsZWFySW5zcGVjdGVkT2JqZWN0cygpOwogICAgIEluc3BlY3RhYmxlT2Jq
ZWN0KiBpbnNwZWN0ZWRPYmplY3QodW5zaWduZWQgaW5kZXgpOwotICAgIHZvaWQgaW5zcGVjdElt
cGwoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvYmplY3RUb0luc3BlY3Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaGludHMpOworICAgIHZvaWQg
aW5zcGVjdEltcGwoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgb2JqZWN0VG9J
bnNwZWN0LCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiBoaW50cyk7CiAKICAg
ICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzSW1wbChOb2RlKiwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJ
bmZvPiYgbGlzdGVuZXJzQXJyYXkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmluZGV4IDk0ZDRj
NzguLjQ3ZDgzYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC0xMDgsMTEgKzEwOCwxMiBA
QCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlm
ZXN0cyhFcnJvclN0cmluZyYsIFJlZlB0cgogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Q2FjaGVJbmZvIGluZm8gPSBob3N0LT5hcHBsaWNhdGlvbkNhY2hlSW5mbygpOwogICAgICAgICBT
dHJpbmcgbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5nKCk7CiAgICAgICAgIGlm
ICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+IHZhbHVlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6
OmNyZWF0ZSgpCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAgICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAg
ICAgICAgIC5zZXRNYW5pZmVzdFVSTChtYW5pZmVzdFVSTCkKLSAgICAgICAgICAgICAgICAuc2V0
U3RhdHVzKHN0YXRpY19jYXN0PGludD4oaG9zdC0+c3RhdHVzKCkpKTsKLSAgICAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgLnNldFN0YXR1cyhzdGF0aWNf
Y2FzdDxpbnQ+KGhvc3QtPnN0YXR1cygpKSkKKyAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwor
ICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFdURjo6bW92ZSh2YWx1ZSkpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMTUxLDcgKzE1Miw3IEBAIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVyCiAg
ICAgYXBwbGljYXRpb25DYWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShyZXNv
dXJjZXMsIGluZm8pOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxp
Y2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykK
K1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGlj
YXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYg
YXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNh
Y2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCiB7CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRNYW5pZmVzdFVSTChhcHBsaWNhdGlvbkNhY2hlSW5mby5tX21hbmlmZXN0LnN0
cmluZygpKQpAQCAtMTYyLDE3ICsxNjMsMTcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHAKICAg
ICAgICAgLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpS
ZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQorUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6
OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgQXBwbGljYXRp
b25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IHJlc291
cmNlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAg
IGF1dG8gcmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3Jl
YXRlKCk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlc291cmNlSW5mbyA6IGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCiAgICAgICAgIHJlc291cmNlcy0+YWRkSXRlbShidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShyZXNvdXJjZUluZm8pKTsKIAotICAgIHJldHVybiBy
ZXNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXNvdXJjZXMpOwogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVz
b3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKIHsKICAg
ICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0xOTEsMTEgKzE5MiwxMSBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4gSW5zcAogICAgIGlmIChyZXNvdXJjZUluZm8ubV9pc0V4cGxpY2l0KQogICAgICAg
ICB0eXBlcy5hcHBlbmRMaXRlcmFsKCJFeHBsaWNpdCAiKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+
IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRVcmwocmVzb3VyY2VJbmZvLm1fcmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAg
IC5zZXRTaXplKHN0YXRpY19jYXN0PGludD4ocmVzb3VyY2VJbmZvLm1fc2l6ZSkpCi0gICAgICAg
IC5zZXRUeXBlKHR5cGVzLnRvU3RyaW5nKCkpOwotICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAg
LnNldFR5cGUodHlwZXMudG9TdHJpbmcoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCmluZGV4IGJjNmZlYmIuLmM3MTI5
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTY3LDkgKzY3LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlv
bkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRp
b25DYWNoZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiwgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OkNhY2hlSW5mbyYpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPj4gYnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmKTsKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBidWlsZE9iamVjdEZvckFw
cGxpY2F0aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xp
c3QmLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJik7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9u
Q2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9M
aXN0Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYpOwogCiAgICAg
RG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5n
JiwgU3RyaW5nIGZyYW1lSWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcAppbmRleCA2NWY1ZGM0Li5mNDIxYjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTYxMiw0MCArNjEyLDQy
IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vCiAKICAgICAvLyBQc2V1ZG8gZWxlbWVudHMuCiAg
ICAgaWYgKCFpbmNsdWRlUHNldWRvIHx8ICppbmNsdWRlUHNldWRvKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0VsZW1lbnRzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CiAg
ICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBGSVJTVF9QVUJMSUNfUFNFVURPSUQ7IHBz
ZXVkb0lkIDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VVRE9JRDsgcHNldWRvSWQgPSBzdGF0aWNf
Y2FzdDxQc2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgewogICAgICAgICAgICAgYXV0byBtYXRjaGVk
UnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQs
IHBzZXVkb0lkLCBTdHlsZVJlc29sdmVyOjpBbGxDU1NSdWxlcyk7CiAgICAgICAgICAgICBpZiAo
IW1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+IG1hdGNoZXMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAg
ICBhdXRvIG1hdGNoZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hl
czo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHN0YXRpY19jYXN0
PGludD4ocHNldWRvSWQpKQotICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhidWlsZEFy
cmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCkpOwotICAgICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5hZGRJdGVtKG1hdGNoZXMucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLnNldE1hdGNoZXMoYnVpbGRBcnJheUZvck1h
dGNoZWRSdWxlTGlzdChtYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGVsZW1lbnQpKQorICAg
ICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIHBzZXVkb0VsZW1l
bnRzLT5hZGRJdGVtKFdURjo6bW92ZShtYXRjaGVzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBwc2V1ZG9JZE1hdGNoZXMgPSBwc2V1ZG9FbGVtZW50cy5yZWxlYXNlKCk7
CisgICAgICAgIHBzZXVkb0lkTWF0Y2hlcyA9IFdURjo6bW92ZShwc2V1ZG9FbGVtZW50cyk7CiAg
ICAgfQogCiAgICAgLy8gSW5oZXJpdGVkIHN0eWxlcy4KICAgICBpZiAoIWluY2x1ZGVJbmhlcml0
ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRy
eT4+IGVudHJpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBl
bnRyaWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgICAgIEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIHdoaWxlIChw
YXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICBTdHlsZVJlc29sdmVyJiBwYXJlbnRTdHlsZVJl
c29sdmVyID0gcGFyZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7
CiAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2
ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgU3R5bGVSZXNvbHZlcjo6QWxs
Q1NTUnVsZXMpOwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
SW5oZXJpdGVkU3R5bGVFbnRyeT4gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Oklu
aGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldE1hdGNoZWRD
U1NSdWxlcyhidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcywg
c3R5bGVSZXNvbHZlciwgcGFyZW50RWxlbWVudCkpOworICAgICAgICAgICAgYXV0byBlbnRyeSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkK
KyAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVk
UnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCBwYXJlbnRFbGVtZW50
KSkKKyAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgaWYgKHBhcmVudEVs
ZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIHN0eWxlU2hl
ZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQocGFyZW50RWxlbWVudCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHN0eWxlU2hlZXQpCiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVT
dHlsZShzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQtPnN0eWxlRm9y
SWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC0+aWQoKSwgMCkpKSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKKyAgICAg
ICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKGVudHJ5KSk7CiAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICB9
CiAKLSAgICAgICAgaW5oZXJpdGVkRW50cmllcyA9IGVudHJpZXMucmVsZWFzZSgpOworICAgICAg
ICBpbmhlcml0ZWRFbnRyaWVzID0gV1RGOjptb3ZlKGVudHJpZXMpOwogICAgIH0KIH0KIApAQCAt
NjcxLDcgKzY3Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVJ
bmZvID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgdHJ1ZSk7
Ci0gICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0
eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgY29tcHV0ZWRTdHlsZUluZm8sIG51bGxwdHIp
OworICAgIFJlZjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHls
ZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGVJbmZvLCBudWxscHRyKTsK
ICAgICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgp
OwogfQogCkBAIC03MTgsOSArNzIwLDkgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5
bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICBl
cnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBjb25zdCBT
dHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYg
cmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBmdWxsU3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxT
dHlsZUlkKTsKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkLmNvcHlS
ZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklk
KGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTczNCw5ICs3MzYs
OSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcAogICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50
OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3Bl
cnR5VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRl
eHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHls
ZUlkKTsKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkLmNvcHlSZWYo
KSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JT
dHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVy
cm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTc1MCw5ICs3NTIsOSBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SQogICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0
b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJs
ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCit2
b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0eWxlSWQsIGludCBw
cm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiYgcmVzdWx0KQogewotICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQo
ZnVsbFN0eWxlSWQpOworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQu
Y29weVJlZigpKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIElu
c3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoZXJyb3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwpAQCAtNzY2LDkg
Kzc2OCw5IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluCiAgICAgZXJyb3JTdHJpbmcgPSBJbnNw
ZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBmdWxsUnVsZUlkLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxl
PiYgcmVzdWx0KQogewotICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFJ1bGVJZCk7
CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVsZUlkLmNvcHlSZWYoKSk7CiAg
ICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3Ry
aW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTgxMSwyOSArODEzLDMwIEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBpbnQgY29udGV4dE5vZGVJCiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgY3Nz
UHJvcGVydGllcykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiBwcm9wZXJ0aWVzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3BlcnRpZXMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46
OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmaXJzdENTU1Byb3BlcnR5OyBpIDw9IGxhc3RD
U1NQcm9wZXJ0eTsgKytpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgaWQgPSBjb252ZXJ0VG9D
U1NQcm9wZXJ0eUlEKGkpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eUluZm8+IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NQcm9wZXJ0eUluZm86OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0TmFtZShnZXRQcm9wZXJ0
eU5hbWVTdHJpbmcoaWQpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAK
ICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRo
YW5kRm9yUHJvcGVydHkoaWQpOwogICAgICAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkgewot
ICAgICAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShwcm9wZXJ0eS5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEY6Om1vdmUocHJvcGVydHkpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBsb25naGFuZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBsb25naGFuZHMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytqKSB7CiAgICAgICAgICAgICBD
U1NQcm9wZXJ0eUlEIGxvbmdoYW5kSUQgPSBzaG9ydGhhbmQucHJvcGVydGllcygpW2pdOwogICAg
ICAgICAgICAgbG9uZ2hhbmRzLT5hZGRJdGVtKGdldFByb3BlcnR5TmFtZVN0cmluZyhsb25naGFu
ZElEKSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvcGVydHktPnNldExvbmdoYW5kcyhsb25naGFu
ZHMucmVsZWFzZSgpKTsKLSAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShwcm9wZXJ0eS5yZWxl
YXNlKCkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0TG9uZ2hhbmRzKFdURjo6bW92ZShsb25naGFu
ZHMpKTsKKyAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEY6Om1vdmUocHJvcGVydHkpKTsK
ICAgICB9Ci0gICAgY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOworICAgIGNz
c1Byb3BlcnRpZXMgPSBXVEY6Om1vdmUocHJvcGVydGllcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBmb3JjZWRQc2V1ZG9DbGFzc2Vz
KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBm
b3JjZWRQc2V1ZG9DbGFzc2VzKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvbUFnZW50
LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkK
QEAgLTg2MiwxMiArODY1LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE5hbWVkRmxv
d0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jCiAgICAgbV9uYW1l
ZEZsb3dDb2xsZWN0aW9uc1JlcXVlc3RlZC5hZGQoZG9jdW1lbnROb2RlSWQpOwogCiAgICAgVmVj
dG9yPFJlZlB0cjxXZWJLaXROYW1lZEZsb3c+PiBuYW1lZEZsb3dzVmVjdG9yID0gZG9jdW1lbnQt
Pm5hbWVkRmxvd3MoKS5uYW1lZEZsb3dzKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pj4gbmFtZWRGbG93
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
TmFtZWRGbG93Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBuYW1lZEZsb3dzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+OjpjcmVh
dGUoKTsKIAogICAgIGZvciAoVmVjdG9yPFJlZlB0cjxXZWJLaXROYW1lZEZsb3c+Pjo6aXRlcmF0
b3IgaXQgPSBuYW1lZEZsb3dzVmVjdG9yLmJlZ2luKCk7IGl0ICE9IG5hbWVkRmxvd3NWZWN0b3Iu
ZW5kKCk7ICsraXQpCiAgICAgICAgIG5hbWVkRmxvd3MtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JO
YW1lZEZsb3coZXJyb3JTdHJpbmcsIGl0LT5nZXQoKSwgZG9jdW1lbnROb2RlSWQpKTsKIAotICAg
IHJlc3VsdCA9IG5hbWVkRmxvd3MucmVsZWFzZSgpOworICAgIHJlc3VsdCA9IFdURjo6bW92ZShu
YW1lZEZsb3dzKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW1lbnQqIGVsZW1lbnQpCkBA
IC0xMDAwLDcgKzEwMDMsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJvcgogCiBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVj
dE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9j
dW1lbnQpCiB7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVn
dWxhcjsKKyAgICBhdXRvIG9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbjo6UmVndWxhcjsKICAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHls
ZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSkK
ICAgICAgICAgb3JpZ2luID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpVc2VyQWdlbnQ7CiAgICAgZWxzZSBpZiAocGFnZVN0eWxlU2hlZXQgJiYgcGFnZVN0eWxl
U2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKS0+bm9kZU5h
bWUoKSA9PSAiI2RvY3VtZW50IikKQEAgLTEwMTMsNyArMTAxNiw3IEBAIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3Jp
Z2luKENTU1N0CiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
clJ1bGUoU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NB
Z2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTEwMjcsNyArMTAzMCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JS
CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5i
dWlsZE9iamVjdEZvclJ1bGUoY3Nzb21XcmFwcGVyKSA6IG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6
YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
clJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAgIGlmICghcnVsZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xMDM3LDkgKzEwNDAsOSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
UgogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+
YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUpIDogbnVsbHB0cjsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRj
aD4+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgRWxlbWVudCogZWxlbWVudCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiByZXN1bHQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRj
aD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAogICAg
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNo
ZWNrZXIoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CkBAIC0xMDQ5LDcgKzEwNTIsNyBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UnVsZU1hdGNoPj4gSW5zcAogICAgICAgICBpZiAoIXJ1bGVPYmplY3QpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50
Pj4gbWF0Y2hpbmdTZWxlY3RvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+Ojpj
cmVhdGUoKTsKKyAgICAgICAgYXV0byBtYXRjaGluZ1NlbGVjdG9ycyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxp
c3QmIHNlbGVjdG9yTGlzdCA9IG1hdGNoZWRSdWxlLT5zZWxlY3Rvckxpc3QoKTsKICAgICAgICAg
bG9uZyBpbmRleCA9IDA7CiAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
ID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChzZWxlY3RvcikpIHsKQEAgLTEwNjAsMTYgKzEwNjMsMTcgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1
bGVNYXRjaD4+IEluc3AKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KIAotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+IG1hdGNoID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g6OmNyZWF0ZSgpCi0gICAgICAgICAgICAu
c2V0UnVsZShydWxlT2JqZWN0LnJlbGVhc2UoKSkKLSAgICAgICAgICAgIC5zZXRNYXRjaGluZ1Nl
bGVjdG9ycyhtYXRjaGluZ1NlbGVjdG9ycy5yZWxlYXNlKCkpOwotICAgICAgICByZXN1bHQtPmFk
ZEl0ZW0obWF0Y2gucmVsZWFzZSgpKTsKKyAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFJ1bGUo
V1RGOjptb3ZlKHJ1bGVPYmplY3QpKQorICAgICAgICAgICAgLnNldE1hdGNoaW5nU2VsZWN0b3Jz
KFdURjo6bW92ZShtYXRjaGluZ1NlbGVjdG9ycykpCisgICAgICAgICAgICAucmVsZWFzZSgpOwor
ICAgICAgICByZXN1bHQtPmFkZEl0ZW0oV1RGOjptb3ZlKG1hdGNoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50KiBlbGVt
ZW50KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50KiBlbGVtZW50
KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpl
bGVtZW50KSkKQEAgLTEwODMsMTMgKzEwODcsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3IK
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihhdHRyaWJ1dGVTdHlsZS0+aXNN
dXRhYmxlKCkpOwogICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMqIG11dGFibGVBdHRyaWJ1dGVT
dHlsZSA9IHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMqPihhdHRyaWJ1dGVTdHls
ZSk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVj
dG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBtdXRhYmxlQXR0cmlidXRlU3R5bGUt
PmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgbnVsbHB0cik7CisgICAgUmVmPEluc3BlY3Rv
clN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgbXV0YWJsZUF0dHJpYnV0ZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCksIG51bGxwdHIpOwogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JT
dHlsZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJy
YXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUGFzc1JlZlB0cjxOb2RlTGlz
dD4gcmVnaW9uTGlzdCwgaW50IGRvY3VtZW50Tm9kZUlkKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5zcGVjdG9y
Q1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
UmVmUHRyPE5vZGVMaXN0PiYmIHJlZ2lvbkxpc3QsIGludCBkb2N1bWVudE5vZGVJZCkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpSZWdpb24+PiByZWdpb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlZ2lvbnMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJl
Z2lvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lvbkxp
c3QtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
ZWdpb246OlJlZ2lvbk92ZXJzZXQgcmVnaW9uT3ZlcnNldDsKQEAgLTExMTEsMjEgKzExMTUsMjIg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlJlZ2lvbj4+IEluc3BlY3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPiBy
ZWdpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbjo6Y3JlYXRlKCkKKyAgICAg
ICAgYXV0byByZWdpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbjo6Y3JlYXRl
KCkKICAgICAgICAgICAgIC5zZXRSZWdpb25PdmVyc2V0KHJlZ2lvbk92ZXJzZXQpCiAgICAgICAg
ICAgICAvLyBkb2N1bWVudE5vZGVJZCB3YXMgcHJldmlvdXNseSBhc3NlcnRlZAotICAgICAgICAg
ICAgLnNldE5vZGVJZChtX2RvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcs
IGRvY3VtZW50Tm9kZUlkLCByZWdpb25MaXN0LT5pdGVtKGkpKSk7CisgICAgICAgICAgICAuc2V0
Tm9kZUlkKG1fZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1l
bnROb2RlSWQsIHJlZ2lvbkxpc3QtPml0ZW0oaSkpKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsK
IAotICAgICAgICByZWdpb25zLT5hZGRJdGVtKHJlZ2lvbi5yZWxlYXNlKCkpOworICAgICAgICBy
ZWdpb25zLT5hZGRJdGVtKFdURjo6bW92ZShyZWdpb24pKTsKICAgICB9CiAKLSAgICByZXR1cm4g
cmVnaW9ucy5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZWdpb25zKTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9y
Q1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgV2ViS2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkK
K1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
V2ViS2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkKIHsK
ICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGNvbnRlbnRMaXN0ID0gd2Via2l0TmFtZWRGbG93LT5nZXRD
b250ZW50KCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+IGNv
bnRlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKKyAgICBh
dXRvIGNvbnRlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb250ZW50TGlzdC0+bGVuZ3RoKCk7ICsr
aSkgewogICAgICAgICAvLyBkb2N1bWVudE5vZGVJZCB3YXMgcHJldmlvdXNseSBhc3NlcnRlZApA
QCAtMTEzNiw3ICsxMTQxLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm8KICAgICAgICAgLnNl
dERvY3VtZW50Tm9kZUlkKGRvY3VtZW50Tm9kZUlkKQogICAgICAgICAuc2V0TmFtZSh3ZWJraXRO
YW1lZEZsb3ctPm5hbWUoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldE92ZXJzZXQod2Via2l0TmFt
ZWRGbG93LT5vdmVyc2V0KCkpCi0gICAgICAgIC5zZXRDb250ZW50KGNvbnRlbnQucmVsZWFzZSgp
KQorICAgICAgICAuc2V0Q29udGVudChXVEY6Om1vdmUoY29udGVudCkpCiAgICAgICAgIC5zZXRS
ZWdpb25zKGJ1aWxkQXJyYXlGb3JSZWdpb25zKGVycm9yU3RyaW5nLCB3ZWJraXROYW1lZEZsb3ct
PmdldFJlZ2lvbnMoKSwgZG9jdW1lbnROb2RlSWQpKQogICAgICAgICAucmVsZWFzZSgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCAzZGRj
YTliLi5kM2EwMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTExOCwxMyArMTE3LDEzIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZVNoZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IGdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQsIFN0cmluZyogcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVT
aGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVUZXh0KEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3Bl
cnR5VGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4m
IHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVByb3BlcnR5KEVycm9y
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJ
ZCwgaW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdHlsZUlkLCBpbnQgcHJvcGVy
dHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgYm9v
bCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJl
c3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJ1bGVTZWxlY3RvcihFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBydWxlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBhZGRSdWxlKEVy
cm9yU3RyaW5nJiwgaW50IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGZvcmNlZFBzZXVkb0NsYXNzZXMpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiwgaW50
IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgZm9yY2Vk
UHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldE5hbWVkRmxvd0Nv
bGxlY3Rpb24oRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4+
JiByZXN1bHQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgpAQCAtMTUzLDEyICsxNTIsMTIgQEAgcHJp
dmF0ZToKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4gZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNo
ZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVsZSos
IFN0eWxlUmVzb2x2ZXImKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlPj4mLCBTdHlsZVJlc29sdmVyJiwgRWxlbWVudCopOwotICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JB
dHRyaWJ1dGVzU3R5bGUoRWxlbWVudCopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+PiBidWlsZEFycmF5
Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+LCBpbnQgZG9jdW1l
bnROb2RlSWQpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1l
ZEZsb3c+IGJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiwgV2ViS2l0TmFtZWRG
bG93KiwgaW50IGRvY3VtZW50Tm9kZUlkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxlKiwgU3R5bGVSZXNv
bHZlciYpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1
aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWls
ZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4m
LCBTdHlsZVJlc29sdmVyJiwgRWxlbWVudCopOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50
Kik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UmVnaW9uPj4gYnVpbGRBcnJheUZvclJlZ2lvbnMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8Tm9kZUxpc3Q+JiYsIGludCBkb2N1bWVudE5vZGVJZCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93PiBidWlsZE9iamVjdEZvck5hbWVkRmxvdyhF
cnJvclN0cmluZyYsIFdlYktpdE5hbWVkRmxvdyosIGludCBkb2N1bWVudE5vZGVJZCk7CiAKICAg
ICAvLyBJbnNwZWN0b3JET01BZ2VudDo6RE9NTGlzdGVuZXIgaW1wbGVtZW50YXRpb24KICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVu
dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3Ry
dW1lbnRhdGlvbi5oCmluZGV4IDMyYTYyNDcuLjQxZDU3NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24u
aApAQCAtMzUsMTUgKzM1LDE0IEBACiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1
ZGUgPGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2Ny
aXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1l
c3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VU
eXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUlt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNh
bGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xl
SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwg
V1RGOjptb3ZlKGNhbGxTdGFjayksIHJlcXVlc3RJZGVudGlmaWVyKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwpAQCAtNTUsMTEgKzU0
LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRv
Q29uc29sZShQYWdlJiBwYWdlLCBNZXNzYWdlU291CiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2Us
IE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4mJiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBh
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBl
LCBsZXZlbCwgbWVzc2FnZSwgc3RhdGUsIGFyZ3VtZW50cywgcmVxdWVzdElkZW50aWZpZXIpOwor
ICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291
cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc3RhdGUsIFdURjo6bW92ZShhcmd1bWVudHMpLCBy
ZXF1ZXN0SWRlbnRpZmllcik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBV
TlVTRURfUEFSQU0oc291cmNlKTsKQEAgLTkxLDExICs5MCwxMSBAQCBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVz
c2FnZVNvdQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YWRkTWVzc2FnZVRvQ29uc29sZShXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2Nv
cGUsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dENhbGxTdGFjaz4gY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQor
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xl
KFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9iYWxTY29wZSwgTWVzc2FnZVNvdXJjZSBzb3Vy
Y2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpKQot
ICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291
cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgY2FsbFN0YWNrLCByZXF1ZXN0SWRlbnRpZmllcik7
CisgICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBz
b3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVz
dElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od29ya2VyR2xvYmFsU2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwpAQCAtMTI2LDExICsxMjUsMTEgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtl
ckdsb2JhbFNjb3BlKiB3b3IKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK2lu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50KFBhZ2UmIHBh
Z2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiYmIGFyZ3VtZW50cykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIGNvbnNvbGVDb3VudEltcGwoKmluc3RydW1lbnRpbmdB
Z2VudHMsIHN0YXRlLCBhcmd1bWVudHMpOworICAgICAgICBjb25zb2xlQ291bnRJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgV1RGOjptb3ZlKGFyZ3VtZW50cykpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0OSwx
MSArMTQ4LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRD
b25zb2xlVGltaW5nKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyCiAjZW5kaWYKIH0KIAotaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYg
ZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRD
YWxsU3RhY2s+IHN0YWNrKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
dG9wQ29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiBzdGFjaykKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgc3RvcENvbnNv
bGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgdGl0bGUsIHN0YWNrKTsK
KyAgICAgICAgc3RvcENvbnNvbGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFt
ZSwgdGl0bGUsIFdURjo6bW92ZShzdGFjaykpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aXRsZSk7CkBAIC0xNjEsMTIgKzE2MCwxMiBAQCBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKEZyYW1l
JiBmcmFtZSwgY29uc3QgU3RyaQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcChGcmFtZSYgZnJhbWUsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK2lubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcChGcmFtZSYgZnJhbWUsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGNvbnNvbGVUaW1lU3RhbXBJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgYXJndW1lbnRzKTsKKyAgICAgICAgY29uc29s
ZVRpbWVTdGFtcEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCBXVEY6Om1vdmUoYXJn
dW1lbnRzKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGFyZ3VtZW50cyk7CkBAIC0xODUsNyArMTg0LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzdGFydFByb2ZpbGluZyhQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0
ZSoKICNlbmRpZgogfQogCi1pbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZyhQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nICZ0aXRsZSkKK2lubGluZSBSZWZQdHI8SlNDOjpQcm9maWxl
PiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyAmdGl0bGUpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDJlZDhhZGYuLjhiZjBm
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhp
Z2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6QwogICAgIG1f
b3ZlcmxheS0+Z2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgY29vcmRpbmF0ZVN5c3RlbSk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9i
amVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJ
bnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fb3ZlcmxheS0+YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUo
KTsKIH0KQEAgLTQ1NCw5ICs0NTQsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250
ZW5kSW5pdGlhbGl6ZWQoKQogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3RvcHdhdGNoPiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQorUmVmPFN0b3B3YXRjaD4gSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkKIHsKLSAgICByZXR1cm4gbV9l
eGVjdXRpb25TdG9wd2F0Y2g7CisgICAgcmV0dXJuIG1fZXhlY3V0aW9uU3RvcHdhdGNoLmNvcHlS
ZWYoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggN2M3OGVlNC4uMzhhZWVhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0x
MTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGln
aGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1VuZGVyVGVzdDsgfQogICAgIHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCBpc1Vu
ZGVyVGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0KQEAgLTEzMSw3ICsxMzEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWxsSW5qZWN0ZWRTY3JpcHRGdW5j
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlw
dExpbmUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRG
dW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmcm9u
dGVuZEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdURjo6
U3RvcHdhdGNoPiBleGVjdXRpb25TdG9wd2F0Y2goKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJl
ZjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgb3ZlcnJpZGU7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjsKQEAgLTE1MCw3
ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CiAgICAgSW5zcGVj
dG9yOjpJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwotICAgIFJlZlB0cjxXVEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAg
UmVmPFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKICAgICBQYWdlJiBtX3Bh
Z2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2luc3BlY3RvckNsaWVudDsKICAgICBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCogbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGJiYWNkYzQuLmRh
YTBkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1heFRleHRTaXplID0gMTAwMDA7CiBzdGF0aWMgY29uc3QgVUNoYXIg
ZWxsaXBzaXNVQ2hhcltdID0geyAweDIwMjYsIDAgfTsKIAotc3RhdGljIENvbG9yIHBhcnNlQ29s
b3IoY29uc3QgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvbG9yT2JqZWN0KQorc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3IoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvck9i
amVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICByZXR1cm4gQ29sb3I6OnRy
YW5zcGFyZW50OwpAQCAtMTMyLDggKzEzMiw5IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb2xvck9iamVjdCkKIAogc3RhdGljIENv
bG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEluc3BlY3Rvck9i
amVjdCogY29uZmlnT2JqZWN0KQogewotICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNvbG9yT2JqZWN0ID0gY29uZmlnT2JqZWN0LT5nZXRPYmplY3QoZmllbGROYW1lKTsKLSAgICBy
ZXR1cm4gcGFyc2VDb2xvcihjb2xvck9iamVjdCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gY29sb3JPYmplY3Q7CisgICAgY29uZmlnT2JqZWN0LT5nZXRPYmplY3QoZmllbGROYW1lLCBj
b2xvck9iamVjdCk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoV1RGOjptb3ZlKGNvbG9yT2JqZWN0
KSk7CiB9CiAKIHN0YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKQEAgLTU3OSw5ICs1ODAsOSBAQCBpbnQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVz
aCkKICAgICAgICAgICAgIGF1dG8gbmV3TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxOb2RlVG9JZE1h
cD4oKTsKICAgICAgICAgICAgIGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAg
ICAgbV9kYW5nbGluZ05vZGVUb0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1
dG8gY2hpbGRyZW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVt
KGJ1aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwotICAgICAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgY2hpbGRyZW4pOworICAgICAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGOjptb3ZlKGNo
aWxkcmVuKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHBhdGguYXBwZW5kKHBhcmVudCk7CkBAIC04NzYsMTUgKzg3NywxNCBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaQogICAgIGF4UHJvcGVydGllcyA9IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJp
bGl0eVByb3BlcnRpZXMobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZv
cm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHdoaXRlc3Bh
Y2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5vZGVJZHMsIFN0
cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgbm9k
ZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkKIHsKICAgICAvLyBGSVhN
RTogU2VhcmNoIHdvcmtzIHdpdGggbm9kZSBncmFudWxhcml0eSAtIG51bWJlciBvZiBtYXRjaGVz
IHdpdGhpbiBub2RlIGlzIG5vdCBjYWxjdWxhdGVkLgogICAgIEluc3BlY3Rvck5vZGVGaW5kZXIg
ZmluZGVyKHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKLSAg
ICAgICAgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbm9kZUlkc1JlZiA9ICpub2RlSWRz
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUlkc1JlZi0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBub2RlVmFsdWUgPSBu
b2RlSWRzUmVmLT5nZXQoaSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rl
SWRzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IG5vZGVWYWx1ZSA9IG5vZGVJZHMtPmdldChpKTsKICAgICAgICAgICAgIGlmICghbm9kZVZhbHVl
KSB7CiAgICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQg
bm9kZUlkcyBpdGVtLiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNDYsMzcgKzEw
NDYsMzcgQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAgICByZXR1cm4gaGlnaGxpZ2h0Q29u
ZmlnOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBoaWdobGlnaHRDb25maWcpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJs
ZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKQogewot
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENv
bmZpZyA/IGhpZ2hsaWdodENvbmZpZy0+Z2V0KCkgOiAwKTsKKyAgICBzZXRTZWFyY2hpbmdGb3JO
b2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25m
aWcuZ2V0KCkgOiBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5l
Q29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UXVhZD4oRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWln
aHQpKTsKLSAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCBjb2xvciwgb3V0
bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEY6Om1vdmUocXVhZCksIGNvbG9yLmNvcHlSZWYoKSwgb3V0bGluZUNvbG9yLmNvcHlSZWYoKSwg
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0UXVhZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRRdWFk
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYm
IHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBh
Z2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0
UXVhZD4oKTsKICAgICBpZiAoIXBhcnNlUXVhZChxdWFkQXJyYXksIHF1YWQuZ2V0KCkpKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIFF1YWQgZm9ybWF0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURjo6bW92
ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xvciwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICBp
bm5lckhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCBjb2xvci5jb3B5UmVmKCksIG91dGxp
bmVDb2xvci5jb3B5UmVmKCksIHVzZVBhZ2VDb29yZGluYXRlcyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFk
PiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29y
ZGluYXRlcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6
OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
Y29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29u
ZmlnID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0
Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcigqY29sb3IpOwotICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKCpvdXRsaW5lQ29sb3IpOworICAgIGhpZ2hs
aWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IuY29weVJlZigpKTsKKyAgICBo
aWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3Iu
Y29weVJlZigpKTsKICAgICBoaWdobGlnaHRDb25maWctPnVzZVBhZ2VDb29yZGluYXRlcyA9IHVz
ZVBhZ2VDb29yZGluYXRlcyA/ICp1c2VQYWdlQ29vcmRpbmF0ZXMgOiBmYWxzZTsKICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElkKQor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkKIHsKICAg
ICBOb2RlKiBub2RlID0gMDsKICAgICBpZiAobm9kZUlkKSB7CkBAIC0xMDk4LDE0ICsxMDk4LDE0
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2Rl
KG5vZGUsICpoaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0Piogb3V0bGluZUNvbG9yKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJh
bWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0
bGluZUNvbG9yKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5mcmFtZUZvcklk
KGZyYW1lSWQpOwogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+b3duZXJFbGVtZW50KCkpIHsKICAg
ICAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hsaWdodENv
bmZpZz4oKTsKICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93SW5mbyA9IHRydWU7IC8vIEFs
d2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCi0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+
Y29udGVudCA9IHBhcnNlQ29sb3IoKmNvbG9yKTsKLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoKm91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hs
aWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IuY29weVJlZigpKTsKKyAgICAg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNv
bG9yLmNvcHlSZWYoKSk7CiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShmcmFtZS0+
b3duZXJFbGVtZW50KCksICpoaWdobGlnaHRDb25maWcpOwogICAgIH0KIH0KQEAgLTEyMjAsNyAr
MTIyMCw3IEBAIHN0YXRpYyBTdHJpbmcgZG9jdW1lbnRCYXNlVVJMU3RyaW5nKERvY3VtZW50KiBk
b2N1bWVudCkKICAgICByZXR1cm4gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKCIiKS5zdHJpbmcoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0
aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAgIGludCBpZCA9IGJpbmQobm9kZSwgbm9k
ZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFtZTsKQEAgLTEyNTMsMTkgKzEyNTMsMjAgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCisgICAgYXV0byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5vZGVJZChpZCkKICAgICAg
ICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4obm9kZS0+bm9kZVR5cGUoKSkpCiAgICAg
ICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKICAgICAgICAgLnNldExvY2FsTmFtZShsb2NhbE5h
bWUpCi0gICAgICAgIC5zZXROb2RlVmFsdWUobm9kZVZhbHVlKTsKKyAgICAgICAgLnNldE5vZGVW
YWx1ZShub2RlVmFsdWUpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAobm9kZS0+aXND
b250YWluZXJOb2RlKCkpIHsKICAgICAgICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2Rl
Q291bnQobm9kZSk7CiAgICAgICAgIHZhbHVlLT5zZXRDaGlsZE5vZGVDb3VudChub2RlQ291bnQp
OwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hp
bGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0g
YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKG5vZGUsIGRlcHRoLCBub2Rlc01hcCk7CiAg
ICAgICAgIGlmIChjaGlsZHJlbi0+bGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgdmFsdWUtPnNl
dENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hp
bGRyZW4oV1RGOjptb3ZlKGNoaWxkcmVuKSk7CiAgICAgfQogCiAgICAgaWYgKGlzPEVsZW1lbnQ+
KCpub2RlKSkgewpAQCAtMTI4Miw5ICsxMjgzLDkgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gZWxlbWVudC5zaGFk
b3dSb290KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBzaGFkb3dSb290cyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAg
ICAgICAgc2hhZG93Um9vdHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5v
ZGVzTWFwKSk7Ci0gICAgICAgICAgICB2YWx1ZS0+c2V0U2hhZG93Um9vdHMoc2hhZG93Um9vdHMp
OworICAgICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jvb3RzKFdURjo6bW92ZShzaGFkb3dSb290
cykpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKQEAgLTEzMTcs
MjYgKzEzMTgsMjYgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgICAgIHZhbHVl
LT5zZXRSb2xlKGF4T2JqZWN0LT5jb21wdXRlZFJvbGVTdHJpbmcoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHZhbHVlKTsKIH0K
IAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1l
bnQpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBhdHRyaWJ1
dGVzVmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsK
KyAgICBhdXRvIGF0dHJpYnV0ZXNWYWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz46OmNyZWF0ZSgpOwogICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMgYW5kIHNl
cmlhbGl6ZSB0aGVtLgogICAgIGlmICghZWxlbWVudC0+aGFzQXR0cmlidXRlcygpKQotICAgICAg
ICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bW92ZShhdHRyaWJ1dGVzVmFsdWUpOwogICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1
dGUgOiBlbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewogICAgICAgICAvLyBBZGQgYXR0
cmlidXRlIHBhaXIKICAgICAgICAgYXR0cmlidXRlc1ZhbHVlLT5hZGRJdGVtKGF0dHJpYnV0ZS5u
YW1lKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIGF0dHJpYnV0ZXNWYWx1ZS0+YWRkSXRlbShhdHRy
aWJ1dGUudmFsdWUoKSk7CiAgICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzVmFsdWUucmVsZWFz
ZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYXR0cmlidXRlc1ZhbHVlKTsKIH0KIAotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVu
KE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2Rl
KiBjb250YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+PiBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgIGF1dG8gY2hpbGRyZW4gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+Ojpj
cmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAvLyBTcGVjaWFsLWNhc2Ug
dGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhhdCBjb250YWluZXIncyBjaGlsZHJlbiBo
YXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gY29udGFpbmVy
LT5maXJzdENoaWxkKCk7CkBAIC0xMzQ0LDcgKzEzNDUsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3Bl
Y3RvcgogICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKGZp
cnN0Q2hpbGQsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAgICAgICBtX2NoaWxkcmVuUmVxdWVzdGVk
LmFkZChiaW5kKGNvbnRhaW5lciwgbm9kZXNNYXApKTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gY2hpbGRyZW4ucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGNoaWxkcmVu
KTsKICAgICB9CiAKICAgICBOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChjb250YWluZXIp
OwpAQCAtMTM1NSwxMCArMTM1NiwxMCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvcgogICAgICAg
ICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUoY2hpbGQsIGRlcHRoLCBub2Rl
c01hcCkpOwogICAgICAgICBjaGlsZCA9IGlubmVyTmV4dFNpYmxpbmcoY2hpbGQpOwogICAgIH0K
LSAgICByZXR1cm4gY2hpbGRyZW4ucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoY2hp
bGRyZW4pOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihj
b25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwSWQpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyogb2JqZWN0R3Jv
dXBJZCkKIHsKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciA9IHJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmxpc3RlbmVyOwogCkBAIC0xMzg2LDI5ICsxMzg3LDMxIEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiB2YWx1ZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5zZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAgIC5zZXRJc0F0dHJpYnV0ZShldmVudExp
c3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQogICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQobm9kZSkpCi0gICAgICAgIC5zZXRIYW5kbGVyQm9keShib2R5KTsKKyAgICAgICAg
LnNldEhhbmRsZXJCb2R5KGJvZHkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgaWYgKG9iamVj
dEdyb3VwSWQgJiYgaGFuZGxlciAmJiBzdGF0ZSkgewogICAgICAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZv
cihzdGF0ZSk7CiAgICAgICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAg
ICAgICAgICAgdmFsdWUtPnNldEhhbmRsZXIoaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgaGFuZGxlciksICpvYmplY3RHcm91cElk
KSk7CiAgICAgfQogICAgIGlmICghc2NyaXB0SUQuaXNOdWxsKCkpIHsKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCisgICAgICAgIGF1
dG8gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNy
ZWF0ZSgpCiAgICAgICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SUQpCi0gICAgICAgICAgICAu
c2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKLSAgICAgICAgdmFsdWUtPnNldExvY2F0aW9uKGxv
Y2F0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVy
KQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgdmFsdWUtPnNldExvY2F0aW9uKFdU
Rjo6bW92ZShsb2NhdGlvbikpOwogICAgICAgICBpZiAoIXNvdXJjZU5hbWUuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgdmFsdWUtPnNldFNvdXJjZU5hbWUoc291cmNlTmFtZSk7CiAgICAgfQotICAg
IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZSh2YWx1ZSk7CiB9
CiAgICAgCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxk
cmVuKFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhPYmplY3QsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgY2hpbGROb2RlSWRzKQordm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4mJiBheE9iamVjdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PGludD4+JiYgY2hpbGROb2RlSWRzKQogewogICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gYXhP
YmplY3QtPmNoaWxkcmVuKCk7CiAgICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCkBAIC0xNDIxLDEx
ICsxNDI0LDExIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW4oUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqCiAgICAgICAgIGlmIChOb2RlKiBj
aGlsZE5vZGUgPSBjaGlsZE9iamVjdC0+bm9kZSgpKQogICAgICAgICAgICAgY2hpbGROb2RlSWRz
LT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoY2hpbGROb2RlKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oY2hpbGRPYmplY3Qs
IGNoaWxkTm9kZUlkcyk7CisgICAgICAgICAgICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KGNoaWxkT2JqZWN0LmNvcHlSZWYoKSwgY2hpbGROb2RlSWRzLmNvcHlSZWYoKSk7CiAgICAgfQog
fQogICAgIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmls
aXR5UHJvcGVydGllcyhOb2RlKiBub2RlKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5v
ZGUpOwogICAgIGlmICghbm9kZSkKQEAgLTE0MzYsNyArMTQzOSw3IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9y
RE9NQWdlbnQ6CiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAg
ICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZCBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7CisgICAgYXV0
byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q2hlY2tlZDo6RmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PGludD4+IGNoaWxkTm9kZUlkczsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8aW50Pj4gY29udHJvbGxlZE5vZGVJZHM7CiAgICAgYm9vbCBleGlzdHMgPSBmYWxzZTsK
QEAgLTE0NDYsMTIgKzE0NDksMTIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDoKICAgICBib29s
IGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9yZWQgPSB0cnVlOwogICAgIGJvb2wgaWdu
b3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQgaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOworICAgIGF1
dG8gaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFsc2U7CiAgICAgU3Ry
aW5nIGxhYmVsOwogICAgIGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNlOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBsaXZlUmVnaW9uUmVsZXZhbnQ7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
TGl2ZVJlZ2lvblN0YXR1cyBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAg
IGF1dG8gbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAgICBOb2RlKiBtb3Vz
ZUV2ZW50Tm9kZSA9IG51bGxwdHI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PGludD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVsbHB0cjsK
QEAgLTE0OTIsNyArMTQ5NSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6CiAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKGF4T2JqZWN0LCBjaGls
ZE5vZGVJZHMpOworICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihheE9i
amVjdCwgV1RGOjptb3ZlKGNoaWxkTm9kZUlkcykpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoYXhPYmplY3QtPnN1cHBvcnRzQVJJQUNvbnRyb2xzKCkpIHsKICAgICAgICAgICAgICAg
ICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVtZW50czsKQEAgLTE2MjIsMTEgKzE2MjUs
MTIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzOjpjcmVhdGUoKQorICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzPiB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRFeGlzdHMoZXhpc3RzKQog
ICAgICAgICAuc2V0TGFiZWwobGFiZWwpCiAgICAgICAgIC5zZXRSb2xlKHJvbGUpCi0gICAgICAg
IC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSk7CisgICAgICAgIC5zZXRO
b2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSkKKyAgICAgICAgLnJlbGVhc2UoKTsK
IAogICAgIGlmIChleGlzdHMpIHsKICAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKQpA
QCAtMTY3OSw3ICsxNjgzLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDoKICAgICAgICAgICAg
IHZhbHVlLT5zZXRTZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcyk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3Zl
KHZhbHVlKTsKIH0KIAogTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChO
b2RlKiBub2RlKQpAQCAtMTc1NCwxMCArMTc1OCwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpkaWRDb21taXRMb2FkKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Y2hpbGROb2RlUmVtb3ZlZChwYXJlbnRJZCwgZnJhbWVPd25lcklkKTsKICAgICB1bmJp
bmQoZnJhbWVPd25lciwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShm
cmFtZU93bmVyLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShmcmFtZU93
bmVyLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICBOb2RlKiBwcmV2aW91c1NpYmxp
bmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFtZU93bmVyKTsKICAgICBpbnQgcHJldklkID0g
cHJldmlvdXNTaWJsaW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxp
bmcpIDogMDsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFy
ZW50SWQsIHByZXZJZCwgdmFsdWUucmVsZWFzZSgpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwgV1RGOjptb3ZlKHZhbHVlKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9k
ZSkKQEAgLTE3ODQsOCArMTc4OCw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2Vy
dERPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gQ2hpbGRyZW4gaGF2ZSBiZWVuIHJlcXVl
c3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAgICAgICAgIE5vZGUqIHByZXZT
aWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwogICAgICAgICBpbnQgcHJldklk
ID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZTaWJsaW5nKSA6
IDA7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVl
ID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsK
LSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVkKHBhcmVudElk
LCBwcmV2SWQsIHZhbHVlLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9k
b2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxk
Tm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0K
IH0KIApAQCAtMTg0OSw3ICsxODUzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVt
b3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG4KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0
b3I8RWxlbWVudCo+JiBlbGVtZW50cykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8aW50Pj4gbm9kZUlkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46
OmNyZWF0ZSgpOworICAgIGF1dG8gbm9kZUlkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBlbGVtZW50
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRzLmF0KGkpOwogICAgICAgICBpbnQgaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsKQEAg
LTE4NjEsNyArMTg2NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRl
SW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVuCiAgICAgICAgICAgICBt
X2RvbUxpc3RlbmVyLT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOwogICAgICAgICBub2RlSWRz
LT5hZGRJdGVtKGlkKTsKICAgICB9Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmlubGluZVN0
eWxlSW52YWxpZGF0ZWQobm9kZUlkcy5yZWxlYXNlKCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5pbmxpbmVTdHlsZUludmFsaWRhdGVkKFdURjo6bW92ZShub2RlSWRzKSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRh
JiBjaGFyYWN0ZXJEYXRhKQpAQCAtMTk4NCw3ICsxOTg4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLAogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2Rl
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5v
ZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDUzMDUwNTYuLjQxMmI3
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBA
IC0xMzIsMjEgKzEzMiwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1
ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcm
LCBpbnQgbm9kZUlkLCBjb25zdCBXVEY6OlN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlz
dGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4m
IGF4UHJvcGVydGllcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1TZWFyY2go
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5Piogbm9kZUlkcywgU3RyaW5nKiBzZWFy
Y2hJZCwgaW50KiByZXN1bHRDb3VudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1TZWFyY2goRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVl
cnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIG5vZGVJZHMsIFN0
cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJ
ZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxpbnQ+PiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNjYXJkU2VhcmNo
UmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBn
ZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGhpZ2hsaWdodENvbmZpZykg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0
cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCogbm9kZUlkKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgcHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcm
LCBCYWNrZW5kTm9kZUlkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VCYWNrZW5kTm9kZUlkcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbm9kZUdy
b3VwKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5n
JiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodFF1YWQoRXJyb3JTdHJp
bmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIHF1YWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVz
ZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodE5v
ZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVj
dElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiBvdXRsaW5lQ29sb3IpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9v
bCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxp
Z2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5PiYmIHF1YWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBj
b2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVD
b2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgaGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlk
LCBjb25zdCBTdHJpbmcqIG9iamVjdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGln
aGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvcikgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgaW50IHRhcmdl
dE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgdW5kbyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwpAQCAtMTg2
LDcgKzE4Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpbmcgZG9jdW1lbnRVUkxTdHJp
bmcoRG9jdW1lbnQqKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiByZXNvbHZlTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSosIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwog
ICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygpOwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAg
IHZvaWQgaW5zcGVjdChOb2RlKik7CkBAIC0yMzAsMjEgKzIzMCwyMCBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUqLCBpbnQgdHlwZSk7CiAgICAgdm9pZCB1cGRhdGVT
dWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogcm9vdCwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgdmFs
dWUpOwotICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGRlc2NyaXB0aW9uKTsKLQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPiBidWlsZE9iamVjdEZvck5vZGUoTm9kZSosIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50Kik7Ci0gICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFp
bmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7Ci0gICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZl
bnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBOb2RlKiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cElkKTsKLSAg
ICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMoTm9kZSopOwotICAg
IHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihQYXNzUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mKTsKKwor
ICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IGJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCopOworICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxl
bWVudCopOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSog
Y29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RGb3JFdmVu
dExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIE5vZGUqLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwSWQpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
PiBidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqKTsKKyAgICB2b2lk
IHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
JiYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYmKTsKICAgICAKICAg
ICBOb2RlKiBub2RlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIE5vZGUqIG5vZGVG
b3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKTsKIAogICAgIHZvaWQgZGlzY2FyZEJp
bmRpbmdzKCk7CiAKLSAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8
RmxvYXRRdWFkPiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogY29s
b3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xv
ciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICB2b2lkIGlubmVySGlnaGxp
Z2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0
ZXMpOwogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dC5jcHAKaW5kZXggNzgyNmE5My4uZGQ4ZjUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMTcwLDkgKzE3
MCw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChF
cnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAoaGFz
QnJlYWtwb2ludCgmbm9kZSwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoJm5vZGUsIEF0dHJpYnV0ZU1vZGlmaWVkLCBm
YWxzZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1By
b2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBl
dmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnRE
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgZGVzY3JpcHRpb25Gb3JE
T01FdmVudChub2RlLCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7
CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2Vy
RnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwog
ICAgIH0KIH0KIApAQCAtMjcwLDkgKzI3MCw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGluCiB2
b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUmIHBh
cmVudCkKIHsKICAgICBpZiAoaGFzQnJlYWtwb2ludCgmcGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQp
KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoJnBhcmVu
dCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlLCBldmVudERhdGEuZ2V0KCkpOwotICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkLCB0cnVl
LCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3Jh
bShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURjo6
bW92ZShldmVudERhdGEpKTsKICAgICB9CiB9CiAKQEAgLTI4MCwzOSArMjgwLDM5IEBAIHZvaWQg
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkK
IHsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50
Tm9kZSgmbm9kZSk7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoJm5vZGUsIE5vZGVSZW1vdmVkKSkg
ewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KCZub2RlLCBO
b2RlUmVtb3ZlZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJB
Z2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRl
c2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQsIGZhbHNlLCBldmVudERhdGEu
Z2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JE
ZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURjo6bW92ZShldmVudERh
dGEpKTsKICAgICB9IGVsc2UgaWYgKHBhcmVudE5vZGUgJiYgaGFzQnJlYWtwb2ludChwYXJlbnRO
b2RlLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGRlc2NyaXB0
aW9uRm9yRE9NRXZlbnQoJm5vZGUsIFN1YnRyZWVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5n
ZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRl
YnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2Uo
KSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgU3Vi
dHJlZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKKyAgICAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbjo6RE9NLCBXVEY6Om1vdmUoZXZlbnREYXRhKSk7CiAgICAgfQogfQogCiB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoJmVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVk
KSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KCZlbGVt
ZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAg
IG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmRE
aXNwYXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZp
ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJy
ZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpE
T00sIFdURjo6bW92ZShldmVudERhdGEpKTsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3BlY3Rvck9iamVjdCogZGVzY3JpcHRp
b24pCit2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZl
bnQoTm9kZSYgdGFyZ2V0LCBpbnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNw
ZWN0b3JPYmplY3QmIGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChoYXNCcmVha3BvaW50KHRh
cmdldCwgYnJlYWtwb2ludFR5cGUpKTsKKyAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCgmdGFyZ2V0
LCBicmVha3BvaW50VHlwZSkpOwogCi0gICAgTm9kZSogYnJlYWtwb2ludE93bmVyID0gdGFyZ2V0
OworICAgIE5vZGUqIGJyZWFrcG9pbnRPd25lciA9ICZ0YXJnZXQ7CiAgICAgaWYgKCgxIDw8IGJy
ZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgewogICAg
ICAgICAvLyBGb3IgaW5oZXJpdGFibGUgYnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNu
J3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCiAg
ICAgICAgIC8vIFRhcmdldCBub2RlIG1heSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBu
ZWVkIHRvIHB1c2ggaXQgZmlyc3QuCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHRhcmdldE5vZGVPYmplY3QgPSBtX2RvbUFnZW50LT5y
ZXNvbHZlTm9kZSh0YXJnZXQsIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVj
dEdyb3VwKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnNldFZhbHVlKCJ0YXJnZXROb2RlIiwgdGFy
Z2V0Tm9kZU9iamVjdCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IHRhcmdldE5vZGVPYmplY3QgPSBtX2RvbUFnZW50LT5yZXNvbHZl
Tm9kZSgmdGFyZ2V0LCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91
cCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldFZhbHVlKCJ0YXJnZXROb2RlIiwgdGFyZ2V0Tm9k
ZU9iamVjdCk7CiAKICAgICAgICAgLy8gRmluZCBicmVha3BvaW50IG93bmVyIG5vZGUuCiAgICAg
ICAgIGlmICghaW5zZXJ0aW9uKQotICAgICAgICAgICAgYnJlYWtwb2ludE93bmVyID0gSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSh0YXJnZXQpOworICAgICAgICAgICAgYnJlYWtw
b2ludE93bmVyID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmdGFyZ2V0KTsK
ICAgICAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lcik7CiAgICAgICAgIHdoaWxlICghKG1fZG9t
QnJlYWtwb2ludHMuZ2V0KGJyZWFrcG9pbnRPd25lcikgJiAoMSA8PCBicmVha3BvaW50VHlwZSkp
KSB7CiAgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0gSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVyUGFyZW50Tm9kZShicmVha3BvaW50T3duZXIpOwpAQCAtMzIyLDEzICszMjIsMTMgQEAgdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUq
IHRhcmdldCwgaW50IGJyZWFrcG8KICAgICAgICAgfQogCiAgICAgICAgIGlmIChicmVha3BvaW50
VHlwZSA9PSBTdWJ0cmVlTW9kaWZpZWQpCi0gICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0Qm9v
bGVhbigiaW5zZXJ0aW9uIiwgaW5zZXJ0aW9uKTsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uLnNl
dEJvb2xlYW4oImluc2VydGlvbiIsIGluc2VydGlvbik7CiAgICAgfQogCiAgICAgaW50IGJyZWFr
cG9pbnRPd25lck5vZGVJZCA9IG1fZG9tQWdlbnQtPmJvdW5kTm9kZUlkKGJyZWFrcG9pbnRPd25l
cik7CiAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24t
PnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3Jp
cHRpb24tPnNldFN0cmluZygidHlwZSIsIGRvbVR5cGVOYW1lKGJyZWFrcG9pbnRUeXBlKSk7Cisg
ICAgZGVzY3JpcHRpb24uc2V0SW50ZWdlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlk
KTsKKyAgICBkZXNjcmlwdGlvbi5zZXRTdHJpbmcoInR5cGUiLCBkb21UeXBlTmFtZShicmVha3Bv
aW50VHlwZSkpOwogfQogCiBib29sIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6Omhhc0JyZWFr
cG9pbnQoTm9kZSogbm9kZSwgaW50IHR5cGUpCkBAIC0zNjYsMTIgKzM2NiwxMiBAQCB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGJvb2wg
aXNET01FdmVudCwgY29ucwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygiZXZlbnROYW1lIiwgZnVsbEV2ZW50
TmFtZSk7CiAgICAgaWYgKHN5bmNocm9ub3VzKQotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJy
ZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpF
dmVudExpc3RlbmVyLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFn
ZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3Bl
Y3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIGV2
ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNjaGVkdWxlUGF1
c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogfQogCiB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHVybCkKQEAgLTQxMSwxMCArNDExLDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkK
ICAgICBpZiAoYnJlYWtwb2ludFVSTC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVha3BvaW50VVJMIiwg
YnJlYWtwb2ludFVSTCk7CiAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0g
ICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVu
ZERpc3BhdGNoZXI6OlJlYXNvbjo6WEhSLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uOjpYSFIsIFdURjo6bW92ZShldmVudERhdGEpKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50OjpjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaAppbmRleCA1NTg3MzM3Li5jNjli
M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUGF1c2UoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpc2FibGUoKTsKIAotICAgIHZvaWQg
ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwg
Ym9vbCBpbnNlcnRpb24sIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBkZXNjcmlwdGlvbik7
CisgICAgdm9pZCBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUmIHRhcmdldCwgaW50IGJyZWFr
cG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGRl
c2NyaXB0aW9uKTsKICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiwgdWlu
dDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KTsKICAgICBib29sIGhhc0JyZWFrcG9pbnQoTm9kZSos
IGludCB0eXBlKTsKICAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCBk
N2M1ZWEzLi44MTEzYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtOTQsMzQgKzk0LDM0IEBAIHZvaWQgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBtX2VuYWJs
ZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0
b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0ZW1zKQordm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4+JiBpdGVtcykKIHsKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VB
cmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlk
LCBmcmFtZSk7CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLmNvcHlSZWYoKSwgZnJhbWUpOwogICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5v
IFN0b3JhZ2VBcmVhIGZvciBnaXZlbiBzdG9yYWdlSWQiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+Pj4gc3RvcmFnZUl0ZW1zID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gc3RvcmFnZUl0ZW1zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIFN0
cmluZyBrZXkgPSBzdG9yYWdlQXJlYS0+a2V5KGkpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBz
dG9yYWdlQXJlYS0+aXRlbShrZXkpOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgIGVudHJ5LT5hZGRJdGVtKGtleSk7
CiAgICAgICAgIGVudHJ5LT5hZGRJdGVtKHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZUl0ZW1zLT5h
ZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7CisgICAgICAgIHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShX
VEY6Om1vdmUoZW50cnkpKTsKICAgICB9CiAKLSAgICBpdGVtcyA9IHN0b3JhZ2VJdGVtcy5yZWxl
YXNlKCk7CisgICAgaXRlbXMgPSBXVEY6Om1vdmUoc3RvcmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0
cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcs
IHN0b3JhZ2VJZCwgZnJhbWUpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEg
PSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1l
KTsKICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlM
aXRlcmFsKCJTdG9yYWdlIG5vdCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CkBAIC0xMzMsMTAg
KzEzMywxMCBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0
ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICBlcnJvclN0cmluZyA9
IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihRVU9UQV9FWENFRURFRF9FUlIpLm5hbWU7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9y
YWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQogewog
ICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0g
ZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKKyAgICBSZWZQ
dHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5n
LCBzdG9yYWdlSWQuY29weVJlZigpLCBmcmFtZSk7CiAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewog
ICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiU3RvcmFnZSBub3QgZm91bmQiKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTU3LDExICsxNTcsMTIgQEAgU3RyaW5nIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAgcmV0dXJuIHN0
b3JhZ2VJZChzZWN1cml0eU9yaWdpbi5nZXQoKSwgaXNMb2NhbFN0b3JhZ2UpLT50b0pTT05TdHJp
bmcoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpT
dG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKK1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xv
Y2FsU3RvcmFnZSkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFn
ZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJp
dHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCi0gICAgICAgIC5zZXRJc0xvY2FsU3RvcmFnZShpc0xv
Y2FsU3RvcmFnZSkucmVsZWFzZSgpOworICAgICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoaXNMb2Nh
bFN0b3JhZ2UpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5
cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgUGFnZSopCkBA
IC0xODEsNyArMTgyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZERpc3Bh
dGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb24KICAgICAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChpZCwga2V5LCBvbGRWYWx1ZSwg
bmV3VmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUp
CitSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3Jh
Z2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUpCiB7CiAgICAgU3RyaW5nIHNl
Y3VyaXR5T3JpZ2luOwogICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRl
eCA2ZmRiMTlkLi4zNjFiNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC02MywxOSArNjMsMTkgQEAgcHVibGljOgog
ICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCiAgICAgdmlydHVhbCB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0
b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdl
SXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5n
JiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQu
CiAgICAgU3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9y
aWdpbiosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiosIGJv
b2wgaXNMb2NhbFN0b3JhZ2UpOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uCiAgICAgdm9pZCBkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwg
U3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFnZSopOwogCiBwcml2YXRlOgotICAgIFBh
c3NSZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mLCBGcmFtZSomKTsKKyAgICBSZWZQ
dHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiwgRnJhbWUqJik7CiAKICAgICBJbnNwZWN0
b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRj
aGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwCmluZGV4IGQ1YTM5NjguLmI0NzQ5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTU4LDE5ICs1OCwy
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXZvaWQgcmVwb3J0VHJh
bnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2ssIFNRTEVy
cm9yKiBlcnJvcikKK3ZvaWQgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxi
YWNrJiByZXF1ZXN0Q2FsbGJhY2ssIFNRTEVycm9yKiBlcnJvcikKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBlcnJvck9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3JlYXRlKCkKKyAgICBhdXRvIGVycm9yT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWVzc2FnZShlcnJvci0+bWVzc2FnZSgpKQotICAgICAgICAuc2V0Q29kZShlcnJv
ci0+Y29kZSgpKTsKLSAgICByZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKG51bGxwdHIsIG51
bGxwdHIsIGVycm9yT2JqZWN0LnJlbGVhc2UoKSk7CisgICAgICAgIC5zZXRDb2RlKGVycm9yLT5j
b2RlKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CisgICAgcmVxdWVzdENhbGxiYWNrLnNlbmRTdWNj
ZXNzKG51bGxwdHIsIG51bGxwdHIsIFdURjo6bW92ZShlcnJvck9iamVjdCkpOwogfQogCiBjbGFz
cyBTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRDYWxsYmFjayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShQYXNz
UmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBS
ZWY8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhdGVt
ZW50Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFN0YXRlbWVudENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSk7CiAgICAg
fQogCiAgICAgdmlydHVhbCB+U3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KQEAgLTc5LDU3ICs4MCw2
MCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dMaXN0
ID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gY29sdW1uTmFtZXMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGNvbHVtbnMgPSByb3dMaXN0LT5jb2x1bW5OYW1lcygpOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBj
b2x1bW5OYW1lcy0+YWRkSXRlbShjb2x1bW5zW2ldKTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+PiB2YWx1ZXMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT46OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHZhbHVlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPjo6Y3Jl
YXRlKCk7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGRhdGEgPSByb3dMaXN0LT52
YWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBjb25zdCBTUUxWYWx1ZSYgdmFsdWUgPSByb3dMaXN0LT52YWx1ZXMo
KVtpXTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWU7
CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBT
UUxWYWx1ZTo6U3RyaW5nVmFsdWU6IHZhbHVlcy0+YWRkSXRlbShJbnNwZWN0b3JTdHJpbmc6OmNy
ZWF0ZSh2YWx1ZS5zdHJpbmcoKSkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6
Ok51bWJlclZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRl
KHZhbHVlLm51bWJlcigpKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVs
bFZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7IGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6IGluc3BlY3RvclZhbHVlID0g
SW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUuc3RyaW5nKCkpOyBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgU1FMVmFsdWU6Ok51bWJlclZhbHVlOiBpbnNwZWN0b3JWYWx1ZSA9IEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZS5udW1iZXIoKSk7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBTUUxWYWx1ZTo6TnVsbFZhbHVlOiBpbnNwZWN0b3JWYWx1ZSA9IEluc3BlY3RvclZhbHVl
OjpudWxsKCk7IGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICB2YWx1ZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKGluc3BlY3RvclZhbHVlKSk7CiAgICAgICAgIH0K
LSAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKGNvbHVtbk5hbWVzLnJlbGVh
c2UoKSwgdmFsdWVzLnJlbGVhc2UoKSwgbnVsbHB0cik7CisgICAgICAgIG1fcmVxdWVzdENhbGxi
YWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUoY29sdW1uTmFtZXMpLCBXVEY6Om1vdmUodmFsdWVz
KSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBTdGF0ZW1lbnRDYWxsYmFjayhQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVz
dENhbGxiYWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykg
eyB9Ci0gICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7Cisg
ICAgU3RhdGVtZW50Q2FsbGJhY2soUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2Fs
bGJhY2spCisgICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxs
YmFjaykpIHsgfQorICAgIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNr
OwogfTsKIAogY2xhc3MgU3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNy
ZWF0ZShSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhdGVtZW50RXJyb3JDYWxsYmFjayhyZXF1ZXN0
Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RhdGVtZW50RXJyb3JD
YWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAogICAgIHZpcnR1
YWwgflN0YXRlbWVudEVycm9yQ2FsbGJhY2soKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKiBlcnJvcikgb3ZlcnJpZGUKICAgICB7
Ci0gICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKG1fcmVxdWVzdENhbGxiYWNrLmdldCgp
LCBlcnJvcik7CisgICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKG1fcmVxdWVzdENhbGxi
YWNrLmNvcHlSZWYoKSwgZXJyb3IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsgIAogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKFBhc3NSZWZQdHI8RXhlY3V0ZVNR
TENhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCi0gICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2so
cmVxdWVzdENhbGxiYWNrKSB7IH0KLSAgICBSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3Jl
cXVlc3RDYWxsYmFjazsKKyAgICBTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKFJlZjxFeGVjdXRlU1FM
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNr
KFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSB7IH0KKyAgICBSZWY8RXhlY3V0ZVNRTENhbGxi
YWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIGNsYXNzIFRyYW5zYWN0aW9uQ2FsbGJhY2sg
OiBwdWJsaWMgU1FMVHJhbnNhY3Rpb25DYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VHJhbnNhY3Rpb25DYWxsYmFjaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3FsU3Rh
dGVtZW50LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQor
ICAgIHN0YXRpYyBSZWY8VHJhbnNhY3Rpb25DYWxsYmFjaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
c3FsU3RhdGVtZW50LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25DYWxsYmFjayhz
cWxTdGF0ZW1lbnQsIHJlcXVlc3RDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUcmFuc2FjdGlvbkNhbGxiYWNrKHNxbFN0YXRlbWVudCwgV1RGOjptb3ZlKHJlcXVlc3RD
YWxsYmFjaykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5UcmFuc2FjdGlvbkNhbGxiYWNrKCkg
eyB9CkBAIC0xNDAsMjQgKzE0NCwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgICAgICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICAgICAgUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayhTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRl
KG1fcmVxdWVzdENhbGxiYWNrLmdldCgpKSk7Ci0gICAgICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0
ZShtX3JlcXVlc3RDYWxsYmFjay5nZXQoKSkpOwotICAgICAgICB0cmFuc2FjdGlvbi0+ZXhlY3V0
ZVNRTChtX3NxbFN0YXRlbWVudCwgc3FsVmFsdWVzLCBjYWxsYmFjay5yZWxlYXNlKCksIGVycm9y
Q2FsbGJhY2sucmVsZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgUmVmPFNRTFN0
YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayhTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKG1fcmVx
dWVzdENhbGxiYWNrLmNvcHlSZWYoKSkpOworICAgICAgICBSZWY8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjayhTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpjcmVhdGUobV9y
ZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5leGVjdXRl
U1FMKG1fc3FsU3RhdGVtZW50LCBzcWxWYWx1ZXMsIFdURjo6bW92ZShjYWxsYmFjayksIFdURjo6
bW92ZShlcnJvckNhbGxiYWNrKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIHByaXZhdGU6Ci0gICAgVHJhbnNhY3Rpb25DYWxsYmFjayhjb25zdCBTdHJp
bmcmIHNxbFN0YXRlbWVudCwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RD
YWxsYmFjaykKKyAgICBUcmFuc2FjdGlvbkNhbGxiYWNrKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVt
ZW50LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICAgICAg
OiBtX3NxbFN0YXRlbWVudChzcWxTdGF0ZW1lbnQpCi0gICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJh
Y2socmVxdWVzdENhbGxiYWNrKSB7IH0KKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6
Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9CiAgICAgU3RyaW5nIG1fc3FsU3RhdGVtZW50Owot
ICAgIFJlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJl
ZjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogY2xhc3MgVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFj
aykKKyAgICBzdGF0aWMgUmVmPFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gY3JlYXRlKFJlZjxF
eGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2socmVxdWVzdENhbGxiYWNr
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgflRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQpAQCAtMTY4LDE2ICsxNzIsMTYgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwcml2YXRlOgotICAgIFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxi
YWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0g
ICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQorICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2Fs
bGJhY2spKSB7IH0KKyAgICBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFj
azsKIH07CiAKIGNsYXNzIFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrIDogcHVibGljIFZvaWRD
YWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25TdWNj
ZXNzQ2FsbGJhY2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxUcmFuc2FjdGlvblN1Y2Nlc3ND
YWxsYmFjaz4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJh
bnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgflRy
YW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkgeyB9CkBAIC0yNzIsMTAgKzI3Niw4IEBAIHZvaWQg
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5n
JiBlcnJvciwgY29uc3QgU3RyCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiBwcnBSZXF1
ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogewotICAgIFJlZlB0
cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjayA9IHBycFJlcXVlc3RDYWxsYmFj
azsKLQogICAgIGlmICghbV9lbmFibGVkKSB7CiAgICAgICAgIHJlcXVlc3RDYWxsYmFjay0+c2Vu
ZEZhaWx1cmUoIkRhdGFiYXNlIGFnZW50IGlzIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVy
bjsKQEAgLTI4NywxMCArMjg5LDEwIEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhl
Y3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxs
YmFjayhUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUocXVlcnksIHJlcXVlc3RDYWxsYmFjay5n
ZXQoKSkpOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2soVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUocmVxdWVzdENhbGxiYWNrLmdl
dCgpKSk7Ci0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0
aW9uU3VjY2Vzc0NhbGxiYWNrOjpjcmVhdGUoKSk7Ci0gICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9u
KGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxs
YmFjay5yZWxlYXNlKCkpOworICAgIFJlZjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
ayhUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUocXVlcnksIHJlcXVlc3RDYWxsYmFjay5nZXQo
KSkpOworICAgIFJlZjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2so
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUocmVxdWVzdENhbGxiYWNrLmdldCgpKSk7
CisgICAgUmVmPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0aW9uU3VjY2Vz
c0NhbGxiYWNrOjpjcmVhdGUoKSk7CisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKFdURjo6bW92
ZShjYWxsYmFjayksIFdURjo6bW92ZShlcnJvckNhbGxiYWNrKSwgV1RGOjptb3ZlKHN1Y2Nlc3ND
YWxsYmFjaykpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJ
ZChEYXRhYmFzZSogZGF0YWJhc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuaAppbmRleCA3N2VmZWRmLi4zOGUzZjMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAgLTY0
LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiYgbmFtZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
U1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4pIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQuCiAgICAgU3Ry
aW5nIGRhdGFiYXNlSWQoRGF0YWJhc2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggZDZj
YjYyMy4uY2RlYzNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKQEAgLTM4LDExICszOCwxMSBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLWlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBj
b25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8RGF0YWJhc2U+JiYg
ZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIGRpZE9wZW5EYXRhYmFzZUltcGwoKmluc3Ry
dW1lbnRpbmdBZ2VudHMsIGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOworICAgICAg
ICBkaWRPcGVuRGF0YWJhc2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1vdmUoZGF0
YWJhc2UpLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGRhdGFiYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAppbmRleCA4
M2I4ODQyLi45YmFmNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCkBAIC00MywxMiArNDMsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW50IG5leHRVbnVzZWRJZCA9IDE7CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6
Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCitSZWY8SW5zcGVj
dG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6Y3JlYXRlKFJl
ZlB0cjxEYXRhYmFzZT4mJiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2
ZXJzaW9uKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZShXVEY6Om1vdmUoZGF0YWJhc2UpLCBkb21haW4sIG5hbWUsIHZlcnNpb24pKTsKIH0KIAot
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShSZWZQdHI8RGF0YWJhc2U+JiYgZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbikKICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgLCBtX2lkKFN0cmlu
Zzo6bnVtYmVyKG5leHRVbnVzZWRJZCsrKSkKICAgICAsIG1fZG9tYWluKGRvbWFpbikKQEAgLTU5
LDEyICs1OSwxMyBAQCBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpJbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYQogCiB2b2lkIEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2U6OmJpbmQoSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIq
IGRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2U+IGpzb25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RGF0YWJhc2U6OmNyZWF0ZSgpCisgICAgYXV0byBqc29uT2JqZWN0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0SWQobV9pZCkKICAgICAgICAgLnNldERvbWFpbihtX2RvbWFpbikKICAgICAgICAgLnNl
dE5hbWUobV9uYW1lKQotICAgICAgICAuc2V0VmVyc2lvbihtX3ZlcnNpb24pOwotICAgIGRhdGFi
YXNlRnJvbnRlbmREaXNwYXRjaGVyLT5hZGREYXRhYmFzZShqc29uT2JqZWN0KTsKKyAgICAgICAg
LnNldFZlcnNpb24obV92ZXJzaW9uKQorICAgICAgICAucmVsZWFzZSgpOworICAgIGRhdGFiYXNl
RnJvbnRlbmREaXNwYXRjaGVyLT5hZGREYXRhYmFzZShXVEY6Om1vdmUoanNvbk9iamVjdCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaAppbmRleCA5ODhhMjc3Li5jYWE2OGFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAm
JiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDUsMTUgKzQ0LDE1IEBAIGNsYXNzIERhdGFiYXNlOwog
CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBk
YXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2U+IGNyZWF0ZShSZWZQdHI8RGF0YWJhc2U+JiYsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAKICAgICB2b2lkIGJpbmQo
SW5zcGVjdG9yOjpJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciopOwogICAgIERh
dGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldERhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKSB7IG1fZGF0YWJhc2Ug
PSBkYXRhYmFzZTsgfQorICAgIHZvaWQgc2V0RGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlPiYmIGRh
dGFiYXNlKSB7IG1fZGF0YWJhc2UgPSBkYXRhYmFzZTsgfQogICAgIFN0cmluZyBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UoUmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogCiAgICAgUmVmUHRyPERhdGFi
YXNlPiBtX2RhdGFiYXNlOwogICAgIFN0cmluZyBtX2lkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oCmluZGV4IDFhNzRlZGIuLjUwYmZlMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhv
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmgKQEAgLTQ1LDkgKzQ1LDkgQEAgY2xhc3MgUGFnZTsKIAogY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUo
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAg
IHN0YXRpYyBSZWY8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQYWdlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50LCBmcm9udGVuZFBh
Z2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
KGNsaWVudCwgZnJvbnRlbmRQYWdlKSk7CiAgICAgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgfklu
c3BlY3RvckZyb250ZW5kSG9zdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggZGExNmE4NC4uZjc5YzAyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwCkBAIC05Miw5ICs5Miw5IEBAIG5hbWVzcGFjZSB7CiBjbGFzcyBHZXREYXRhYmFzZU5h
bWVzQ2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPFJlcXVl
c3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBz
ZWN1cml0eU9yaWdpbikKKyAgICBzdGF0aWMgUmVmPEdldERhdGFiYXNlTmFtZXNDYWxsYmFjaz4g
Y3JlYXRlKFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaywgc2Vj
dXJpdHlPcmlnaW4pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2V0RGF0YWJhc2VO
YW1lc0NhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBzZWN1cml0eU9yaWdpbikp
OwogICAgIH0KIAogICAgIHZpcnR1YWwgfkdldERhdGFiYXNlTmFtZXNDYWxsYmFjaygpIHsgfQpA
QCAtMTI2LDE4ICsxMjYsMTggQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXNMaXN0ID0gcmVxdWVzdFJlc3VsdC0+ZG9tU3Ry
aW5nTGlzdCgpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gZGF0YWJhc2VOYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46
OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gZGF0YWJhc2VOYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNy
ZWF0ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXNMaXN0
LT5sZW5ndGgoKTsgKytpKQogICAgICAgICAgICAgZGF0YWJhc2VOYW1lcy0+YWRkSXRlbShkYXRh
YmFzZU5hbWVzTGlzdC0+aXRlbShpKSk7Ci0gICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5k
U3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7CisgICAgICAgIG1fcmVxdWVzdENhbGxi
YWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUoZGF0YWJhc2VOYW1lcykpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxSZXF1ZXN0RGF0
YWJhc2VOYW1lc0NhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgc2VjdXJp
dHlPcmlnaW4pCisgICAgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKFJlZjxSZXF1ZXN0RGF0YWJh
c2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBzZWN1cml0
eU9yaWdpbikKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50
TGlzdGVuZXJUeXBlKQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFj
aykKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNr
KSkKICAgICAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKSB7IH0KLSAgICBS
ZWZQdHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7Cisg
ICAgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwog
ICAgIFN0cmluZyBtX3NlY3VyaXR5T3JpZ2luOwogfTsKIApAQCAtMTQ3LDggKzE0Nyw4IEBAIHB1
YmxpYzoKICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkgeyB9CiAgICAgdmlydHVhbCB+RXhl
Y3V0YWJsZVdpdGhEYXRhYmFzZSgpIHsgfTsKICAgICB2b2lkIHN0YXJ0KElEQkZhY3RvcnkqLCBT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlPikgPSAwOwotICAgIHZpcnR1YWwg
UmVxdWVzdENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmKSA9IDA7CisgICAgdmlydHVhbCBSZXF1ZXN0
Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpID0gMDsKICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OwogcHJpdmF0ZToKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CkBAIC0xNTYsOSArMTU2LDkgQEAgcHJpdmF0
ZToKIAogY2xhc3MgT3BlbkRhdGFiYXNlQ2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNy
ZWF0ZShFeGVjdXRhYmxlV2l0aERhdGFiYXNlKiBleGVjdXRhYmxlV2l0aERhdGFiYXNlKQorICAg
IHN0YXRpYyBSZWY8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0ZShFeGVjdXRhYmxlV2l0aERh
dGFiYXNlKiBleGVjdXRhYmxlV2l0aERhdGFiYXNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBPcGVuRGF0YWJhc2VDYWxsYmFjayhleGVjdXRhYmxlV2l0aERhdGFiYXNlKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9wZW5EYXRhYmFzZUNhbGxiYWNrKGV4ZWN1
dGFibGVXaXRoRGF0YWJhc2UpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5PcGVuRGF0YWJhc2VD
YWxsYmFjaygpIHsgfQpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5z
dWNjZXNzRXZlbnQpIHsKLSAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVx
dWVzdENhbGxiYWNrKCktPnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUuIik7Cisg
ICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNl
bmRGYWlsdXJlKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUuIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMTc5LDE2ICsxNzksMTYgQEAgcHVibGljOgogICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgUmVmUHRyPElEQkFueT4gcmVxdWVzdFJlc3VsdCA9
IGlkYk9wZW5EQlJlcXVlc3QtPnJlc3VsdChlYyk7CiAgICAgICAgIGlmIChlYykgewotICAgICAg
ICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS0+c2VuZEZh
aWx1cmUoIkNvdWxkIG5vdCBnZXQgcmVzdWx0IGluIGNhbGxiYWNrLiIpOworICAgICAgICAgICAg
bV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgi
Q291bGQgbm90IGdldCByZXN1bHQgaW4gY2FsbGJhY2suIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlcXVlc3RSZXN1bHQtPnR5cGUoKSAhPSBJREJBbnk6
OklEQkRhdGFiYXNlVHlwZSkgewotICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNl
LT5yZXF1ZXN0Q2FsbGJhY2soKS0+c2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUu
Iik7CisgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFj
aygpLnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIHJlc3VsdCB0eXBlLiIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRh
YmFzZSA9IHJlcXVlc3RSZXN1bHQtPmlkYkRhdGFiYXNlKCk7Ci0gICAgICAgIG1fZXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZShpZGJEYXRhYmFzZSk7CisgICAgICAgIG1fZXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZShXVEY6Om1vdmUoaWRiRGF0YWJhc2UpKTsKICAgICAgICAg
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6ZGVhY3RpdmF0ZU5ld1RyYW5zYWN0aW9ucygp
OwogICAgICAgICBpZGJEYXRhYmFzZS0+Y2xvc2UoKTsKICAgICB9CkBAIC0yMDIsMTI3ICsyMDIs
MTM2IEBAIHByaXZhdGU6CiAKIHZvaWQgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZTo6c3RhcnQoSURC
RmFjdG9yeSogaWRiRmFjdG9yeSwgU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSkKIHsKLSAgICBSZWZQdHI8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrID0g
T3BlbkRhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzKTsKKyAgICBSZWY8T3BlbkRhdGFiYXNl
Q2FsbGJhY2s+IGNhbGxiYWNrID0gT3BlbkRhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4g
aWRiT3BlbkRCUmVxdWVzdCA9IGlkYkZhY3RvcnktPm9wZW4oY29udGV4dCgpLCBkYXRhYmFzZU5h
bWUsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdENhbGxiYWNrKCktPnNlbmRG
YWlsdXJlKCJDb3VsZCBub3Qgb3BlbiBkYXRhYmFzZS4iKTsKKyAgICAgICAgcmVxdWVzdENhbGxi
YWNrKCkuc2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBvcGVuIGRhdGFiYXNlLiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlkYk9wZW5EQlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICBpZGJPcGVuREJS
ZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIFdURjo6
bW92ZShjYWxsYmFjayksIGZhbHNlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgSURCRGF0YWJhc2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJp
bmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2RlID0gSURCVHJhbnNhY3Rpb246
Om1vZGVSZWFkT25seSgpKQorc3RhdGljIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b25Gb3JEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBJREJEYXRhYmFzZSogaWRiRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVO
YW1lLCBjb25zdCBTdHJpbmcmIG1vZGUgPSBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRPbmx5KCkp
CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiBpZGJUcmFuc2FjdGlvbiA9IGlkYkRhdGFiYXNlLT50cmFuc2FjdGlvbihzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIG1vZGUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBpZGJUcmFuc2FjdGlvbjsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKGlkYlRyYW5zYWN0aW9uKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlRm9yVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24qIGlk
YlRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKK3N0YXRpYyBSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlRm9yVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b24qIGlkYlRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9i
amVjdFN0b3JlID0gaWRiVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGlk
Yk9iamVjdFN0b3JlOworICAgIHJldHVybiBXVEY6Om1vdmUoaWRiT2JqZWN0U3RvcmUpOwogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gaW5kZXhGb3JPYmplY3RTdG9yZShJREJPYmpl
Y3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQorc3RhdGlj
IFJlZlB0cjxJREJJbmRleD4gaW5kZXhGb3JPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSogaWRi
T2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQogewogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIFJlZlB0cjxJREJJbmRleD4gaWRiSW5kZXggPSBpZGJPYmplY3RTdG9y
ZS0+aW5kZXgoaW5kZXhOYW1lLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gaWRiSW5kZXg7CisgICAgcmV0dXJuIFdURjo6bW92ZShpZGJJbmRl
eCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5UGF0
aChjb25zdCBJREJLZXlQYXRoJiBpZGJLZXlQYXRoKQorc3RhdGljIFJlZlB0cjxLZXlQYXRoPiBr
ZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYgaWRiS2V5UGF0aCkKIHsKICAg
ICBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aDsKICAgICBzd2l0Y2ggKGlkYktleVBhdGgudHlwZSgp
KSB7CiAgICAgY2FzZSBJREJLZXlQYXRoOjpOdWxsVHlwZToKLSAgICAgICAga2V5UGF0aCA9IEtl
eVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6TnVsbCk7CisgICAgICAgIGtl
eVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFR5cGUoS2V5UGF0aDo6
VHlwZTo6TnVsbCkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSURCS2V5UGF0aDo6U3RyaW5nVHlwZToKLSAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6
OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAga2V5UGF0
aCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBl
OjpTdHJpbmcpCisgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRoLT5zZXRT
dHJpbmcoaWRiS2V5UGF0aC5zdHJpbmcoKSk7CisKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
REJLZXlQYXRoOjpBcnJheVR5cGU6IHsKLSAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0
ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpOwotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYXJyYXkgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcnJheSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3RyaW5nQXJyYXkgPSBpZGJLZXlQYXRoLmFycmF5KCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5nQXJyYXkuc2l6ZSgpOyArK2kpCiAgICAgICAgICAg
ICBhcnJheS0+YWRkSXRlbShzdHJpbmdBcnJheVtpXSk7Ci0gICAgICAgIGtleVBhdGgtPnNldEFy
cmF5KGFycmF5KTsKKyAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpBcnJheSkKKyAgICAgICAgICAgIC5yZWxlYXNl
KCk7CisgICAgICAgIGtleVBhdGgtPnNldEFycmF5KFdURjo6bW92ZShhcnJheSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGtleVBhdGgucmVsZWFzZSgpOworICAgIHJldHVybiBX
VEY6Om1vdmUoa2V5UGF0aCk7CiB9CiAKIGNsYXNzIERhdGFiYXNlTG9hZGVyIDogcHVibGljIEV4
ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQorICAgIHN0
YXRpYyBSZWY8RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUxvYWRlcihjb250ZXh0
LCByZXF1ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJh
c2VMb2FkZXIoY29udGV4dCwgV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIH5EYXRhYmFzZUxvYWRlcigpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gcHJwRGF0YWJhc2UpIG92ZXJyaWRlCisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKSBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IHBy
cERhdGFiYXNlOwotICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLT5pc0FjdGl2ZSgpKQor
ICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLmlzQWN0aXZlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSBkYXRhYmFzZU1ldGFk
YXRhID0gaWRiRGF0YWJhc2UtPm1ldGFkYXRhKCk7CisgICAgICAgIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEgZGF0YWJhc2VNZXRhZGF0YSA9IGRhdGFiYXNlLT5tZXRhZGF0YSgpOwogCi0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPj4gb2JqZWN0U3RvcmVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT46
OmNyZWF0ZSgpOworICAgICAgICBhdXRvIG9iamVjdFN0b3JlcyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+Ojpj
cmVhdGUoKTsKIAogICAgICAgICBmb3IgKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEgOiBkYXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy52YWx1ZXMo
KSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD4+IGluZGV4ZXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6
Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gaW5kZXhlcyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwogCiAgICAgICAgICAgICBmb3IgKGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgOiBvYmplY3RTdG9yZU1ldGFkYXRhLmlu
ZGV4ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8T2JqZWN0U3RvcmVJbmRl
eD4gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAgICAgUmVmPE9iamVjdFN0b3JlSW5kZXg+IG9iamVjdFN0b3JlSW5kZXggPSBPYmplY3RT
dG9yZUluZGV4OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleE1l
dGFkYXRhLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9t
SURCS2V5UGF0aChpbmRleE1ldGFkYXRhLmtleVBhdGgpKQogICAgICAgICAgICAgICAgICAgICAu
c2V0VW5pcXVlKGluZGV4TWV0YWRhdGEudW5pcXVlKQotICAgICAgICAgICAgICAgICAgICAuc2V0
TXVsdGlFbnRyeShpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpOwotICAgICAgICAgICAgICAgIGlu
ZGV4ZXMtPmFkZEl0ZW0ob2JqZWN0U3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIC5z
ZXRNdWx0aUVudHJ5KGluZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkKKyAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBpbmRleGVzLT5hZGRJdGVtKFdURjo6bW92
ZShvYmplY3RTdG9yZUluZGV4KSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZlB0
cjxPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBPYmplY3RTdG9yZTo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgIFJlZjxPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBPYmplY3RTdG9yZTo6Y3JlYXRl
KCkKICAgICAgICAgICAgICAgICAuc2V0TmFtZShvYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUpCiAg
ICAgICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5UGF0aEZyb21JREJLZXlQYXRoKG9iamVjdFN0
b3JlTWV0YWRhdGEua2V5UGF0aCkpCiAgICAgICAgICAgICAgICAgLnNldEF1dG9JbmNyZW1lbnQo
b2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50KQotICAgICAgICAgICAgICAgIC5zZXRJ
bmRleGVzKGluZGV4ZXMpOworICAgICAgICAgICAgICAgIC5zZXRJbmRleGVzKFdURjo6bW92ZShp
bmRleGVzKSkKKyAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgICAgICAgICBvYmpl
Y3RTdG9yZXMtPmFkZEl0ZW0ob2JqZWN0U3RvcmUpOworICAgICAgICAgICAgb2JqZWN0U3RvcmVz
LT5hZGRJdGVtKFdURjo6bW92ZShvYmplY3RTdG9yZSkpOwogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcz4gcmVzdWx0ID0gRGF0YWJhc2VXaXRoT2Jq
ZWN0U3RvcmVzOjpjcmVhdGUoKQorICAgICAgICBSZWY8RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVz
PiByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAuc2V0TmFtZShkYXRhYmFzZU1ldGFkYXRhLm5hbWUpCiAgICAgICAgICAgICAuc2V0VmVyc2lv
bihkYXRhYmFzZU1ldGFkYXRhLnZlcnNpb24pCi0gICAgICAgICAgICAuc2V0T2JqZWN0U3RvcmVz
KG9iamVjdFN0b3Jlcyk7CisgICAgICAgICAgICAuc2V0T2JqZWN0U3RvcmVzKFdURjo6bW92ZShv
YmplY3RTdG9yZXMpKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgICAgICBtX3JlcXVl
c3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MocmVzdWx0KTsKKyAgICAgICAgbV9yZXF1ZXN0Q2FsbGJh
Y2stPnNlbmRTdWNjZXNzKFdURjo6bW92ZShyZXN1bHQpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IFJlcXVlc3RDYWxsYmFjayogcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9y
ZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVx
dWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7
IH0KIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gcmVxdWVzdENhbGxi
YWNrKQorICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAg
IDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQotICAgICAgICAsIG1fcmVxdWVzdENh
bGxiYWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0gICAgUmVmUHRyPFJlcXVlc3REYXRhYmFzZUNh
bGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9CisgICAgUmVmPFJlcXVlc3REYXRhYmFzZUNh
bGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKLXN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3JPYmplY3QqIGtleSkKK3N0YXRp
YyBSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rvck9iamVj
dCoga2V5KQogewogICAgIFJlZlB0cjxJREJLZXk+IGlkYktleTsKIApAQCAtMzUyLDcgKzM2MSw5
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChJ
bnNwZWN0b3JPYmplY3QqIGtleSkKICAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRl
KGRhdGUpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBhcnJheVR5cGUpIHsKICAgICAgICAgSURC
S2V5OjpLZXlBcnJheSBrZXlBcnJheTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cnJheSA9IGtleS0+Z2V0QXJyYXkoImFycmF5Iik7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJyYXk7CisgICAgICAgIGlmICgha2V5LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJheSkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB2YWx1ZSA9IGFycmF5LT5nZXQoaSk7CiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3Q7CkBAIC0zNjcsMTYgKzM3OCwyMCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBrZXkp
CiAgICAgcmV0dXJuIGlkYktleS5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5nZShJbnNwZWN0b3JPYmplY3QqIGtleVJh
bmdlKQorc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uo
SW5zcGVjdG9yT2JqZWN0KiBrZXlSYW5nZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBsb3dlciA9IGtleVJhbmdlLT5nZXRPYmplY3QoImxvd2VyIik7Ci0gICAgUmVmUHRyPElEQktl
eT4gaWRiTG93ZXIgPSBsb3dlciA/IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIuZ2V0
KCkpIDogbnVsbHB0cjsKLSAgICBpZiAobG93ZXIgJiYgIWlkYkxvd2VyKQorICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGxvd2VyOworICAgIGlmICgha2V5UmFuZ2UtPmdldE9iamVjdCgibG93
ZXIiLCBsb3dlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxJREJLZXk+
IGlkYkxvd2VyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5nZXQoKSk7CisgICAg
aWYgKCFpZGJMb3dlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB1cHBlciA9IGtleVJhbmdlLT5nZXRPYmplY3QoInVwcGVyIik7Ci0gICAg
UmVmUHRyPElEQktleT4gaWRiVXBwZXIgPSB1cHBlciA/IGlkYktleUZyb21JbnNwZWN0b3JPYmpl
Y3QodXBwZXIuZ2V0KCkpIDogbnVsbHB0cjsKLSAgICBpZiAodXBwZXIgJiYgIWlkYlVwcGVyKQor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwcGVyOworICAgIGlmICgha2V5UmFuZ2UtPmdl
dE9iamVjdCgidXBwZXIiLCB1cHBlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJl
ZlB0cjxJREJLZXk+IGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1cHBlci5n
ZXQoKSk7CisgICAgaWYgKCFpZGJVcHBlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBib29sIGxvd2VyT3BlbjsKQEAgLTM4OSwxNyArNDA0LDE2IEBAIHN0YXRpYyBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5nZShJbnNwZWN0b3JPYmplY3QqIGtl
eVJhbmdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIElEQktleVJhbmdlOjpVcHBlckJv
dW5kVHlwZSB1cHBlckJvdW5kVHlwZSA9IHVwcGVyT3BlbiA/IElEQktleVJhbmdlOjpVcHBlckJv
dW5kT3BlbiA6IElEQktleVJhbmdlOjpVcHBlckJvdW5kQ2xvc2VkOwogCi0gICAgUmVmUHRyPElE
QktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IElEQktleVJhbmdlOjpjcmVhdGUoaWRiTG93ZXIsIGlk
YlVwcGVyLCBsb3dlckJvdW5kVHlwZSwgdXBwZXJCb3VuZFR5cGUpOwotICAgIHJldHVybiBpZGJL
ZXlSYW5nZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoaWRiTG93
ZXIsIGlkYlVwcGVyLCBsb3dlckJvdW5kVHlwZSwgdXBwZXJCb3VuZFR5cGUpOwogfQogCiBjbGFz
cyBEYXRhTG9hZGVyOwogCiBjbGFzcyBPcGVuQ3Vyc29yQ2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRM
aXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlbkN1cnNvckNhbGxi
YWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQsIFBhc3NSZWZQdHI8UmVx
dWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25l
ZCBwYWdlU2l6ZSkKKyAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gY3JlYXRlKElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuQ3Vyc29yQ2FsbGJhY2soaW5qZWN0ZWRT
Y3JpcHQsIHJlcXVlc3RDYWxsYmFjaywgc2tpcENvdW50LCBwYWdlU2l6ZSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuQ3Vyc29yQ2FsbGJhY2soaW5qZWN0ZWRTY3JpcHQsIFdU
Rjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBza2lwQ291bnQsIHBhZ2VTaXplKSk7CiAgICAgfQog
CiAgICAgdmlydHVhbCB+T3BlbkN1cnNvckNhbGxiYWNrKCkgeyB9CkBAIC00NTgsOCArNDcyLDkg
QEAgcHVibGljOgogICAgICAgICBSZWZQdHI8RGF0YUVudHJ5PiBkYXRhRW50cnkgPSBEYXRhRW50
cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9i
amVjdChpZGJDdXJzb3ItPmtleSgpLCBTdHJpbmcoKSkpCiAgICAgICAgICAgICAuc2V0UHJpbWFy
eUtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT5wcmltYXJ5S2V5KCks
IFN0cmluZygpKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0LndyYXBP
YmplY3QoaWRiQ3Vyc29yLT52YWx1ZSgpLCBTdHJpbmcoKSkpOwotICAgICAgICBtX3Jlc3VsdC0+
YWRkSXRlbShkYXRhRW50cnkpOworICAgICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdChpZGJDdXJzb3ItPnZhbHVlKCksIFN0cmluZygpKSkKKyAgICAgICAgICAg
IC5yZWxlYXNlKCk7CisgICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURjo6bW92ZShkYXRhRW50
cnkpKTsKIAogICAgIH0KIApAQCAtNDY3LDQxICs0ODIsNDAgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKCFtX3JlcXVlc3RDYWxsYmFjay0+aXNBY3RpdmUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKG1fcmVzdWx0LnJl
bGVhc2UoKSwgaGFzTW9yZSk7CisgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2Vz
cyhXVEY6Om1vdmUobV9yZXN1bHQpLCBoYXNNb3JlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
T3BlbkN1cnNvckNhbGxiYWNrKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBQYXNzUmVm
UHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaywgaW50IHNraXBDb3VudCwg
dW5zaWduZWQgcGFnZVNpemUpCisgICAgT3BlbkN1cnNvckNhbGxiYWNrKEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJh
Y2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiAgICAgICAgICwgbV9p
bmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKLSAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFj
ayhyZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3Zl
KHJlcXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9za2lwQ291bnQoc2tpcENvdW50KQogICAg
ICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCisgICAgICAgICwgbV9yZXN1bHQoQXJyYXk8RGF0
YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgewotICAgICAgICBtX3Jlc3VsdCA9IEFycmF5PERhdGFF
bnRyeT46OmNyZWF0ZSgpOwogICAgIH0KICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVkU2Ny
aXB0OwotICAgIFJlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsK
KyAgICBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAgaW50
IG1fc2tpcENvdW50OwogICAgIHVuc2lnbmVkIG1fcGFnZVNpemU7Ci0gICAgUmVmUHRyPEFycmF5
PERhdGFFbnRyeT4+IG1fcmVzdWx0OworICAgIFJlZjxBcnJheTxEYXRhRW50cnk+PiBtX3Jlc3Vs
dDsKIH07CiAKIGNsYXNzIERhdGFMb2FkZXIgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YUxvYWRlcj4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxs
YmFjaz4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3Jp
cHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFt
ZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVu
c2lnbmVkIHBhZ2VTaXplKQorICAgIHN0YXRpYyBSZWY8RGF0YUxvYWRlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0
cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFn
ZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFMb2FkZXIoY29u
dGV4dCwgcmVxdWVzdENhbGxiYWNrLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVOYW1lLCBp
bmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERhdGFMb2FkZXIoY29udGV4dCwgV1RGOjptb3ZlKHJlcXVlc3RD
YWxsYmFjayksIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4TmFtZSwgV1RG
Ojptb3ZlKGlkYktleVJhbmdlKSwgc2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KIAogICAg
IHZpcnR1YWwgfkRhdGFMb2FkZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2U+IHBycERhdGFiYXNlKSBvdmVycmlkZQorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlKFJlZlB0cjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBwcnBEYXRhYmFz
ZTsKLSAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS0+aXNBY3RpdmUoKSkKKyAgICAgICAg
aWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uID0gdHJhbnNhY3Rp
b25Gb3JEYXRhYmFzZShjb250ZXh0KCksIGlkYkRhdGFiYXNlLmdldCgpLCBtX29iamVjdFN0b3Jl
TmFtZSk7CisgICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24gPSB0
cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgZGF0YWJhc2UuZ2V0KCksIG1fb2JqZWN0
U3RvcmVOYW1lKTsKICAgICAgICAgaWYgKCFpZGJUcmFuc2FjdGlvbikgewogICAgICAgICAgICAg
bV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHRyYW5zYWN0aW9u
Iik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTIsNyArNTI2LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPE9wZW5DdXJzb3JD
YWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNrID0gT3BlbkN1cnNvckNhbGxiYWNrOjpjcmVhdGUo
bV9pbmplY3RlZFNjcmlwdCwgbV9yZXF1ZXN0Q2FsbGJhY2ssIG1fc2tpcENvdW50LCBtX3BhZ2VT
aXplKTsKKyAgICAgICAgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNr
ID0gT3BlbkN1cnNvckNhbGxiYWNrOjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdCwgbV9yZXF1ZXN0
Q2FsbGJhY2suY29weVJlZigpLCBtX3NraXBDb3VudCwgbV9wYWdlU2l6ZSk7CiAKICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBpZGJSZXF1
ZXN0OwpAQCAtNTIzLDIzICs1MzcsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlkYkluZGV4LT5v
cGVuQ3Vyc29yKGNvbnRleHQoKSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4obV9pZGJLZXlSYW5n
ZSksIGVjKTsKKyAgICAgICAgICAgIGlkYlJlcXVlc3QgPSBpZGJJbmRleC0+b3BlbkN1cnNvcihj
b250ZXh0KCksIG1faWRiS2V5UmFuZ2UuY29weVJlZigpLCBlYyk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlkYk9iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKGNvbnRl
eHQoKSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4obV9pZGJLZXlSYW5nZSksIGVjKTsKLSAgICAg
ICAgaWRiUmVxdWVzdC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50
LCBvcGVuQ3Vyc29yQ2FsbGJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIGlkYlJlcXVlc3QgPSBp
ZGJPYmplY3RTdG9yZS0+b3BlbkN1cnNvcihjb250ZXh0KCksIG1faWRiS2V5UmFuZ2UuY29weVJl
ZigpLCBlYyk7CisgICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLnN1Y2Nlc3NFdmVudCwgV1RGOjptb3ZlKG9wZW5DdXJzb3JDYWxsYmFjayksIGZhbHNlKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayogcmVxdWVzdENhbGxiYWNrKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KLSAgICBEYXRhTG9h
ZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBhc3NS
ZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3Rl
ZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBj
b25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFu
Z2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIHZpcnR1YWwgUmVxdWVz
dENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RD
YWxsYmFjay5nZXQoKTsgfQorICAgIERhdGFMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElE
QktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUp
CiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
KQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKICAgICAgICAg
LCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0KQogICAgICAgICAsIG1fb2JqZWN0U3Rv
cmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAgLCBtX2luZGV4TmFtZShpbmRleE5hbWUp
Ci0gICAgICAgICwgbV9pZGJLZXlSYW5nZShpZGJLZXlSYW5nZSkKKyAgICAgICAgLCBtX2lkYktl
eVJhbmdlKFdURjo6bW92ZShpZGJLZXlSYW5nZSkpCiAgICAgICAgICwgbV9za2lwQ291bnQoc2tp
cENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpIHsgfQotICAgIFJlZlB0cjxS
ZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8UmVxdWVzdERh
dGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmpl
Y3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RTdG9yZU5hbWU7CiAgICAgU3RyaW5nIG1f
aW5kZXhOYW1lOwpAQCAtNjA1LDcgKzYxOSw3IEBAIHN0YXRpYyBJREJGYWN0b3J5KiBhc3NlcnRJ
REJGYWN0b3J5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50CiAg
ICAgcmV0dXJuIGlkYkZhY3Rvcnk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6
OnJlcXVlc3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxi
YWNrPiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1
ZXN0RGF0YWJhc2VOYW1lcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
c2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVl
c3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1l
V2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjIzLDEwICs2Mzcs
MTAgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVu
dCwgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpjcmVhdGUocmVxdWVzdENhbGxiYWNrLCBkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSksIGZhbHNlKTsKKyAgICBpZGJS
ZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIEdldERh
dGFiYXNlTmFtZXNDYWxsYmFjazo6Y3JlYXRlKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSksIGZhbHNlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+IHJlcXVl
c3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFz
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5m
aW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9yU3RyaW5nLCBmcmFtZSk7CkBAIC02Mzcs
MTEgKzY1MSwxMSBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJh
c2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgIGlmICghaWRiRmFjdG9y
eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPERhdGFiYXNlTG9hZGVyPiBkYXRhYmFz
ZUxvYWRlciA9IERhdGFiYXNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQsIHJlcXVlc3RDYWxsYmFj
ayk7CisgICAgUmVmPERhdGFiYXNlTG9hZGVyPiBkYXRhYmFzZUxvYWRlciA9IERhdGFiYXNlTG9h
ZGVyOjpjcmVhdGUoZG9jdW1lbnQsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKTsKICAgICBk
YXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJl
cXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0
eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBh
Z2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pioga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJ
bmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29u
c3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQg
c2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
a2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3Jp
Z2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1
bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjU0LDIyICs2NjgsMjIgQEAgdm9pZCBJbnNw
ZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0
ZShmcmFtZSkpOwogCi0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IGtleVJh
bmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UtPmdldCgpKSA6IG51bGxwdHI7
CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IGtleVJhbmdlID8gaWRiS2V5
UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UuZ2V0KCkpIDogbnVsbHB0cjsKICAgICBpZiAoa2V5
UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRl
cmFsKCJDYW4gbm90IHBhcnNlIGtleSByYW5nZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFJlZlB0cjxEYXRhTG9hZGVyPiBkYXRhTG9hZGVyID0gRGF0YUxvYWRlcjo6Y3JlYXRl
KGRvY3VtZW50LCByZXF1ZXN0Q2FsbGJhY2ssIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5h
bWUsIGluZGV4TmFtZSwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUpOworICAgIFJl
ZjxEYXRhTG9hZGVyPiBkYXRhTG9hZGVyID0gRGF0YUxvYWRlcjo6Y3JlYXRlKGRvY3VtZW50LCBX
VEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0ZWRTY3JpcHQsIG9iamVjdFN0b3JlTmFt
ZSwgaW5kZXhOYW1lLCBXVEY6Om1vdmUoaWRiS2V5UmFuZ2UpLCBza2lwQ291bnQsIHBhZ2VTaXpl
KTsKICAgICBkYXRhTG9hZGVyLT5zdGFydChpZGJGYWN0b3J5LCBkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAogY2xhc3MgQ2xlYXJPYmplY3RTdG9yZUxpc3Rl
bmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0
b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0
U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVl
c3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xlYXJPYmpl
Y3RTdG9yZUxpc3RlbmVyKHJlcXVlc3RDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFj
aykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5DbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoKSB7
IH0KQEAgLTY5MSwzNiArNzA1LDM1IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJh
Y2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDbGVhck9iamVjdFN0b3Jl
TGlzdGVuZXIoUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxs
YmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPENsZWFyT2JqZWN0U3RvcmVD
YWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVu
dExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgLCBtX3JlcXVlc3RDYWxs
YmFjayhyZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjpt
b3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxDbGVhck9i
amVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxDbGVhck9iamVj
dFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogCiBjbGFzcyBDbGVhck9i
amVjdFN0b3JlIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUGFzc1Jl
ZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0
aWMgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3Rv
cmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENsZWFyT2JqZWN0U3RvcmUoY29udGV4dCwgb2JqZWN0U3RvcmVOYW1lLCByZXF1
ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RT
dG9yZShjb250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2sp
KSk7CiAgICAgfQogCi0gICAgQ2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUGFzc1JlZlB0cjxDbGVh
ck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0
b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0aERhdGFiYXNlKGNvbnRleHQpCiAgICAgICAgICwg
bV9vYmplY3RTdG9yZU5hbWUob2JqZWN0U3RvcmVOYW1lKQotICAgICAgICAsIG1fcmVxdWVzdENh
bGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6
Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gcHJwRGF0YWJhc2UpIG92ZXJyaWRlCisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9
IHBycERhdGFiYXNlOwotICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLT5pc0FjdGl2ZSgp
KQorICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLmlzQWN0aXZlKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24g
PSB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgaWRiRGF0YWJhc2UuZ2V0KCksIG1f
b2JqZWN0U3RvcmVOYW1lLCBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgpKTsKKyAgICAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uRm9y
RGF0YWJhc2UoY29udGV4dCgpLCBkYXRhYmFzZS5nZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUsIElE
QlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRlKCkpOwogICAgICAgICBpZiAoIWlkYlRyYW5zYWN0
aW9uKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxk
IG5vdCBnZXQgdHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTczOCwxNiAr
NzUxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kRmFp
bHVyZShTdHJpbmc6OmZvcm1hdCgiQ291bGQgbm90IGNsZWFyIG9iamVjdCBzdG9yZSAnJXMnOiAl
ZCIsIG1fb2JqZWN0U3RvcmVOYW1lLnV0ZjgoKS5kYXRhKCksIGVjKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWRiVHJhbnNhY3Rpb24tPmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6
Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrKSwgZmFsc2UpOworICAgICAgICBpZGJUcmFuc2FjdGlv
bi0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgQ2xlYXJPYmpl
Y3RTdG9yZUxpc3RlbmVyOjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSwgZmFs
c2UpOwogICAgIH0KIAotICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJh
Y2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQorICAgIHZp
cnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVy
biBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQogcHJpdmF0ZToKICAgICBjb25zdCBTdHJpbmcg
bV9vYmplY3RTdG9yZU5hbWU7Ci0gICAgUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9y
ZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpjbGVh
ck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gcmVxdWVz
dENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6Y2xlYXJPYmplY3RTdG9y
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdp
bihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9jdW1l
bnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTc1Nyw3ICs3NzAsNyBAQCB2b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgUwogICAgIGlmICghaWRiRmFjdG9yeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPENsZWFyT2JqZWN0U3RvcmU+IGNsZWFyT2JqZWN0U3RvcmUgPSBDbGVhck9iamVjdFN0
b3JlOjpjcmVhdGUoZG9jdW1lbnQsIG9iamVjdFN0b3JlTmFtZSwgcmVxdWVzdENhbGxiYWNrKTsK
KyAgICBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY2xlYXJPYmplY3RTdG9yZSA9IENsZWFyT2JqZWN0
U3RvcmU6OmNyZWF0ZShkb2N1bWVudCwgb2JqZWN0U3RvcmVOYW1lLCBXVEY6Om1vdmUocmVxdWVz
dENhbGxiYWNrKSk7CiAgICAgY2xlYXJPYmplY3RTdG9yZS0+c3RhcnQoaWRiRmFjdG9yeSwgZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKaW5kZXggOGFm
NGUxNy4uM2IwZTlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmgKQEAgLTU4LDEwICs1OCwxMCBAQCBwdWJsaWM6CiAgICAgLy8g
Q2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBQYXNzUmVmUHRyPFJlcXVlc3RE
YXRhYmFzZU5hbWVzQ2FsbGJhY2s+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dERhdGFiYXNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJh
Y2s+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGEoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
ZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1l
LCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIGtleVJhbmdlLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgaW5fc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgaW5fZGF0
YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIGluX29iamVjdFN0b3JlTmFtZSwgUGFzc1JlZlB0cjxD
bGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERh
dGFiYXNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0
YShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGluX3NlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmIGluX2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RTdG9yZU5hbWUsIFJl
ZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKaW5kZXggMzU4OWVmZi4uODM5OTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTY4OSwx
MCArNjg5LDEwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkb2N1bWVudFRocmVh
ZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudEltCiAgICAgICAgIHJlc291cmNlQWdl
bnQtPmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KGlkZW50
aWZpZXIsIGNsaWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3Qg
VVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKK3ZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFJlZlB0
cjxGb3JtRGF0YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9v
bCBpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CiAgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKLSAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbExvYWRYSFIoY2xpZW50LCBtZXRob2Qs
IHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOworICAg
ICAgICByZXNvdXJjZUFnZW50LT53aWxsTG9hZFhIUihjbGllbnQsIG1ldGhvZCwgdXJsLCBhc3lu
YywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZhaWxYSFJMb2FkaW5nSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50KiBjbGllbnQpCkBAIC05MTYsNyArOTE2LDcgQEAgc3RhdGljIGJvb2wgaXNDb25zb2xl
QXNzZXJ0TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSkKIH0K
IAogLy8gRklYTUU6IERyb3AgdGhpcyBvbmNlIHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mg
b3V0c2lkZSBvZiBJbnNwZWN0b3IuCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRk
TWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ssIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dElkZW50aWZpZXIpCiB7CiAgICAgaWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFn
ZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNh
bGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOwpAQCAtOTI3LDcgKzkyNyw3IEBAIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0CiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVz
c2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBs
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0
cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVu
dGlmaWVyKQogewogICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+
YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzdGF0ZSwg
YXJndW1lbnRzLCByZXF1ZXN0SWRlbnRpZmllcik7CkBAIC05NDksNyArOTQ5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3QKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+
IGFyZ3VtZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAgICAg
aWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53
ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5jb3VudChzdGF0ZSwgYXJn
dW1lbnRzKTsKQEAgLTk2Myw3ICs5NjMsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cgogICAg
ICAgICBjb25zb2xlQWdlbnQtPnN0YXJ0VGltaW5nKHRpdGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0
bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFjaykKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmIHN0YWNrKQogewogICAgIGlmIChXZWJDb25zb2xlQWdl
bnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkp
CiAgICAgICAgIGNvbnNvbGVBZ2VudC0+c3RvcFRpbWluZyh0aXRsZSwgc3RhY2spOwpAQCAtOTcx
LDcgKzk3MSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRp
bWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1CiAgICAgICAgIHRpbWVsaW5lQWdl
bnQtPnRpbWVFbmQoZnJhbWUsIHRpdGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1w
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJh
bWUsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewogICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7CkBAIC05
ODYsNyArOTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJvZmls
aW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW4KICAgICAgICAgdGltZWxpbmVB
Z2VudC0+c3RhcnRGcm9tQ29uc29sZShleGVjLCB0aXRsZSk7CiB9CiAKLVBhc3NSZWZQdHI8SlND
OjpQcm9maWxlPiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmdJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQorUmVmUHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0
aXRsZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkK
ICAgICAgICAgcmV0dXJuIHRpbWVsaW5lQWdlbnQtPnN0b3BGcm9tQ29uc29sZShleGVjLCB0aXRs
ZSk7CkBAIC05OTQsNyArOTk0LDcgQEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZ0ltcGwoSW5zdHJ1bWVudGkKIH0KIAogI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
T3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPERhdGFiYXNlPiYmIGRhdGFiYXNlLCBjb25zdCBT
dHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
CiB7CiAgICAgaWYgKCFpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckVudmlyb25tZW50KCku
ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTA3LDQwICsx
MTA3LDQwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTZW5kV2ViU29ja2V0
RnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluCiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
RUJfUkVQTEFZKQotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRy
PFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2Vzc2lvbkNyZWF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAgICAgaWYgKEluc3BlY3Rv
clJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
UmVwbGF5QWdlbnQoKSkKLSAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25DcmVhdGVkKHNlc3Np
b24pOworICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbkNyZWF0ZWQoV1RGOjptb3ZlKHNlc3Np
b24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Mb2FkZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZXNzaW9uTG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewogICAgIGlmIChJbnNwZWN0b3JS
ZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJl
cGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTG9hZGVkKHNlc3Npb24p
OworICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbkxvYWRlZChXVEY6Om1vdmUoc2Vzc2lvbikp
OwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJl
cGxheVNlc3Npb24+IHNlc3Npb24pCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vz
c2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewogICAgIGlmIChJbnNwZWN0b3JS
ZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJl
cGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTW9kaWZpZWQoc2Vzc2lv
bik7CisgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTW9kaWZpZWQoV1RGOjptb3ZlKHNlc3Np
b24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRy
PFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKIHsKICAg
ICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVu
dENyZWF0ZWQoc2VnbWVudCk7CisgICAgICAgIHJlcGxheUFnZW50LT5zZWdtZW50Q3JlYXRlZChX
VEY6Om1vdmUoc2VnbWVudCkpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+
JiYgc2VnbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAgICAgICBy
ZXBsYXlBZ2VudC0+c2VnbWVudENvbXBsZXRlZChzZWdtZW50KTsKKyAgICAgICAgcmVwbGF5QWdl
bnQtPnNlZ21lbnRDb21wbGV0ZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+
IHNlZ21lbnQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxh
eVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7CiAgICAgaWYgKEluc3BlY3RvclJlcGxheUFn
ZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdl
bnQoKSkKLSAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRMb2FkZWQoc2VnbWVudCk7CisgICAg
ICAgIHJlcGxheUFnZW50LT5zZWdtZW50TG9hZGVkKFdURjo6bW92ZShzZWdtZW50KSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50VW5sb2FkZWRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggZDdjYWE1OS4u
MzIyMTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaApAQCAtMTg2LDcgKzE4Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICBzdGF0aWMgdm9pZCBkaWRG
YWlsTG9hZGluZyhGcmFtZSosIERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgc3RhdGljIHZvaWQgZG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQoRG9jdW1lbnQmLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqKTsKLSAgICBzdGF0aWMgdm9p
ZCB3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGJvb2wsIFBhc3NSZWZQdHI8Rm9ybURh
dGE+LCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgd2lsbExv
YWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBib29sLCBSZWZQdHI8Rm9ybURhdGE+JiYsIGNvbnN0
IEhUVFBIZWFkZXJNYXAmLCBib29sKTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsWEhSTG9hZGlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwogICAg
IHN0YXRpYyB2b2lkIGRpZEZpbmlzaFhIUkxvYWRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBz
ZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlciwgdW5zaWduZWQgc2VuZENvbHVtbk51bWJl
cik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVhIUlJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpAQCAtMjEzLDE4ICsyMTMsMTgg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpZFdyaXRlSFRNTChjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmLCB1bnNpZ25lZCBlbmRMaW5lKTsKIAogICAgIC8vIEZJWE1F
OiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJhdGUgc3RhY2tzIG91dHNpZGUgb2YgSW5z
cGVjdG9yLgotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYsIE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25z
b2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsK
KyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBNZXNzYWdlU291cmNl
LCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYs
IE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVu
dHM+JiYsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKICAgICBzdGF0aWMg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpF
eGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDAp
OwogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdG8gU2NyaXB0QXJndW1lbnRzIHRvIG1hdGNoIG5v
bi13b3JrZXIgY29udGV4dC4KLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdv
cmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHN0YXRp
YyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291
cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllciA9IDApOwogICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29y
a2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVs
bHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogCi0gICAgc3RhdGlj
IHZvaWQgY29uc29sZUNvdW50KFBhZ2UmLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnQo
UGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
PiYmKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNvbGVUaW1pbmcoRnJhbWUmLCBjb25zdCBT
dHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYs
IGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s+KTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wKEZyYW1lJiwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOworICAgIHN0YXRpYyB2b2lkIHN0b3BDb25z
b2xlVGltaW5nKEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0Q2FsbFN0YWNrPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wKEZy
YW1lJiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKIAogICAgIHN0YXRp
YyB2b2lkIGRpZFJlcXVlc3RBbmltYXRpb25GcmFtZShEb2N1bWVudCosIGludCBjYWxsYmFja0lk
KTsKICAgICBzdGF0aWMgdm9pZCBkaWRDYW5jZWxBbmltYXRpb25GcmFtZShEb2N1bWVudCosIGlu
dCBjYWxsYmFja0lkKTsKQEAgLTIzMiwxMCArMjMyLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBkaWRGaXJlQW5pbWF0aW9uRnJhbWUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBzdGFydFByb2ZpbGluZyhQYWdlJiwgSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxK
U0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmcoUGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSk7CisgICAgc3RhdGljIFJlZlB0cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9m
aWxpbmcoUGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAKICNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHN0YXRpYyB2b2lkIGRpZE9wZW5EYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBS
ZWZQdHI8RGF0YWJhc2U+JiYsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5kaWYKIAogICAgIHN0YXRpYyB2b2lkIGRp
ZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlP
cmlnaW4qLCBQYWdlKik7CkBAIC0yNDYsMTMgKzI0NiwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgd2lsbEV2YWx1YXRlV29ya2VyU2NyaXB0KFdvcmtlckdsb2JhbFNjb3BlKiwgaW50IHdv
cmtlclRocmVhZFN0YXJ0TW9kZSk7CiAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBzdGF0
aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7
Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlT
ZXNzaW9uPik7Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkKFBhZ2UmLCBQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb24+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdl
JiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2Fk
ZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZXNz
aW9uTW9kaWZpZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKIAotICAgIHN0YXRp
YyB2b2lkIHNlZ21lbnRDcmVhdGVkKFBhZ2UmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50Pik7Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudENvbXBsZXRlZChQYWdlJiwgUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOwotICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRMb2FkZWQo
UGFnZSYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICBzdGF0aWMgdm9p
ZCBzZWdtZW50Q3JlYXRlZChQYWdlJiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsK
KyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q29tcGxldGVkKFBhZ2UmLCBSZWZQdHI8UmVwbGF5U2Vz
c2lvblNlZ21lbnQ+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRMb2FkZWQoUGFnZSYsIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJik7CiAgICAgc3RhdGljIHZvaWQgc2VnbWVudFVu
bG9hZGVkKFBhZ2UmKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhcHR1cmVTdGFydGVkKFBhZ2UmKTsK
QEAgLTM4Niw3ICszODYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExv
YWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IERvY3VtZW50TG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpOwogICAgIHN0YXRpYyB2b2lkIGRp
ZEZhaWxMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICBzdGF0
aWMgdm9pZCBkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCopOwotICAgIHN0YXRpYyB2b2lkIHdpbGxMb2FkWEhSSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFVSTCYsIGJvb2wsIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBIVFRQSGVhZGVy
TWFwJiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgd2lsbExvYWRYSFJJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
VVJMJiwgYm9vbCwgUmVmUHRyPEZvcm1EYXRhPiYmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9v
bCk7CiAgICAgc3RhdGljIHZvaWQgZGlkRmFpbFhIUkxvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkRmlu
aXNoWEhSTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFRocmVhZGFibGVMb2FkZXJD
bGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBz
ZW5kTGluZU51bWJlciwgdW5zaWduZWQgc2VuZENvbHVtbk51bWJlcik7CiAgICAgc3RhdGljIHZv
aWQgZGlkUmVjZWl2ZVhIUlJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTQxMiwxNiArNDEyLDE2IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsV3JpdGVIVE1MSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgc3RhcnRMaW5lLCBGcmFtZSopOwogICAgIHN0
YXRpYyB2b2lkIGRpZFdyaXRlSFRNTEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJiwgdW5zaWduZWQgZW5kTGluZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdl
VG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+LCB1bnNpZ25lZCBsb25n
IHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllcik7CiAgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNl
IHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3IuCi0gICAg
c3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYs
IE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVk
IGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0Nv
bnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CiAK
LSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBK
U0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsK
KyAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBK
U0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CiAg
ICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29u
c29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pOwotICAgIHN0
YXRpYyB2b2lkIGNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFt
ZSYsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMg
dm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYm
KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiwgRnJhbWUmLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwogCiAg
ICAgc3RhdGljIHZvaWQgZGlkUmVxdWVzdEFuaW1hdGlvbkZyYW1lSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiwgaW50IGNhbGxiYWNrSWQsIEZyYW1lKik7CiAgICAgc3RhdGljIHZvaWQgZGlkQ2Fu
Y2VsQW5pbWF0aW9uRnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBpbnQgY2FsbGJhY2tJ
ZCwgRnJhbWUqKTsKQEAgLTQyOSwxMCArNDI5LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgZGlkRmlyZUFuaW1hdGlvbkZyYW1lSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUmKTsKIAogICAgIHN0YXRpYyB2b2lkIHN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmdJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwor
ICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpQcm9maWxlPiBzdG9wUHJvZmlsaW5nSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0
cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7
CisgICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogI2VuZGlmCiAKICAgICBzdGF0aWMgdm9p
ZCBkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CkBAIC00NDIsMTMg
KzQ0MiwxMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlVGVy
bWluYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFdvcmtlckdsb2JhbFNjb3BlUHJveHkq
KTsKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVh
dGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7
Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYs
IFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOwotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Nb2Rp
ZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4p
OworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2Fk
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJik7Cisg
ICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwg
UmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOwogCi0gICAgc3RhdGljIHZvaWQgc2VnbWVudENyZWF0
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50Pik7Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKLSAgICBzdGF0aWMg
dm9pZCBzZWdtZW50TG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDcmVhdGVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsK
KyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q29tcGxldGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZWdt
ZW50TG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiYmKTsKICAgICBzdGF0aWMgdm9pZCBzZWdtZW50VW5sb2FkZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhcHR1cmVTdGFydGVkSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJik7CkBAIC0xMzg2LDExICsxMzg2LDExIEBAIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExv
YWRpbmdGb3JDCiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwm
IHVybCwgYm9vbCBhc3luYywgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQoraW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1EYXRh
PiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVD
cmVkZW50aWFscykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dCkpCi0gICAgICAgIHdpbGxMb2FkWEhSSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgY2xpZW50LCBtZXRob2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNs
dWRlQ3JlZGVudGlhbHMpOworICAgICAgICB3aWxsTG9hZFhIUkltcGwoKmluc3RydW1lbnRpbmdB
Z2VudHMsIGNsaWVudCwgbWV0aG9kLCB1cmwsIGFzeW5jLCBXVEY6Om1vdmUoZm9ybURhdGEpLCBo
ZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGNsaWVudCk7CkBAIC0xNzk2LDcyICsxNzk2LDcyIEBA
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZy
YW1lKERvY3VtZW50KiBkb2N1bWVudCwKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
Ci1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVkKFBh
Z2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK2lubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkNyZWF0ZWQoUGFnZSYgcGFnZSwgUmVm
UHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UocGFnZSkpCi0gICAgICAgIHNlc3Npb25DcmVhdGVkSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgc2Vzc2lvbik7CisgICAgICAgIHNlc3Npb25DcmVhdGVkSW1wbCgqaW5zdHJ1bWVudGlu
Z0FnZW50cywgV1RGOjptb3ZlKHNlc3Npb24pKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBh
Z2UpOwogICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Mb2FkZWQoUGFnZSYgcGFnZSwgUGFz
c1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNz
aW9uPiYmIHNlc3Npb24pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQot
ICAgICAgICBzZXNzaW9uTG9hZGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc2Vzc2lvbik7
CisgICAgICAgIHNlc3Npb25Mb2FkZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1v
dmUoc2Vzc2lvbikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNlc3Npb24pOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKFBhZ2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5
U2Vzc2lvbj4gc2Vzc2lvbikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2Vzc2lvbk1vZGlmaWVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Np
b24pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBzZXNz
aW9uTW9kaWZpZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZXNzaW9uKTsKKyAgICAgICAg
c2Vzc2lvbk1vZGlmaWVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjptb3ZlKHNlc3Np
b24pKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShz
ZXNzaW9uKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnNlZ21lbnRDcmVhdGVkKFBhZ2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNl
Z21lbnQ+IHNlZ21lbnQpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
Z21lbnRDcmVhdGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBz
ZWdtZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAg
c2VnbWVudENyZWF0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZWdtZW50KTsKKyAgICAg
ICAgc2VnbWVudENyZWF0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1vdmUoc2Vn
bWVudCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHNlZ21lbnQpOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6c2VnbWVudENvbXBsZXRlZChQYWdlJiBwYWdlLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Np
b25TZWdtZW50PiBzZWdtZW50KQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpzZWdtZW50Q29tcGxldGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVu
dD4mJiBzZWdtZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAg
ICAgICAgc2VnbWVudENvbXBsZXRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNlZ21lbnQp
OworICAgICAgICBzZWdtZW50Q29tcGxldGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RG
Ojptb3ZlKHNlZ21lbnQpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVO
VVNFRF9QQVJBTShzZWdtZW50KTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWQoUGFnZSYgcGFnZSwgUGFzc1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c2VnbWVudExvYWRlZChQYWdlJiBwYWdlLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNl
Z21lbnQ+JiYgc2VnbWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEZBU1RfUkVU
VVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkp
Ci0gICAgICAgIHNlZ21lbnRMb2FkZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZWdtZW50
KTsKKyAgICAgICAgc2VnbWVudExvYWRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIFdURjo6
bW92ZShzZWdtZW50KSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVT
RURfUEFSQU0oc2VnbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCA2Y2IyMTI0Li40NTU1ZGIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5j
cHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRo
ZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5nJgogICAgICAgICBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5kZXJM
YXllciwgbGF5ZXJzKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXll
cihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK1Jl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
bmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
JnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2lu
ZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0xNjYsMTMgKzE2NiwxNCBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpidWlsZAogICAgICAgICBub2RlID0gcmVuZGVyZXItPnBhcmVudCgpLT5lbGVt
ZW50KCk7CiAKICAgICAvLyBCYXNpYyBzZXQgb2YgcHJvcGVydGllcy4KLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gbGF5ZXJPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQorICAgIGF1dG8gbGF5ZXJP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0TGF5ZXJJZChiaW5kKHJlbmRlckxheWVyKSkKICAgICAgICAgLnNldE5vZGVJ
ZChpZEZvck5vZGUoZXJyb3JTdHJpbmcsIG5vZGUpKQogICAgICAgICAuc2V0Qm91bmRzKGJ1aWxk
T2JqZWN0Rm9ySW50UmVjdChyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpCiAg
ICAgICAgIC5zZXRNZW1vcnkoYmFja2luZy0+YmFja2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUoKSkK
ICAgICAgICAgLnNldENvbXBvc2l0ZWRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QoYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpKSkpCi0gICAgICAgIC5zZXRQ
YWludENvdW50KGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+cmVwYWludENvdW50KCkpOworICAg
ICAgICAuc2V0UGFpbnRDb3VudChiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnJlcGFpbnRDb3Vu
dCgpKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+c2hhZG93
SG9zdCgpKQogICAgICAgICBsYXllck9iamVjdC0+c2V0SXNJblNoYWRvd1RyZWUodHJ1ZSk7CkBA
IC0yMDEsNyArMjAyLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGQKICAgICAgICAgICAgIGxh
eWVyT2JqZWN0LT5zZXRQc2V1ZG9FbGVtZW50KCJmaXJzdC1saW5lIik7CiAgICAgfQogCi0gICAg
cmV0dXJuIGxheWVyT2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUobGF5ZXJPYmplY3QpOwog
fQogCiBpbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCkBAIC0yMTgsMTYgKzIxOSwxNyBAQCBpbnQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5v
ZGUqIG5vZGUpCiAgICAgcmV0dXJuIG5vZGVJZDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpi
dWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK1JlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpi
dWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0OjpjcmVhdGUoKQogICAgICAg
ICAuc2V0WChyZWN0LngoKSkKICAgICAgICAgLnNldFkocmVjdC55KCkpCiAgICAgICAgIC5zZXRX
aWR0aChyZWN0LndpZHRoKCkpCi0gICAgICAgIC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSkucmVs
ZWFzZSgpOworICAgICAgICAuc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIC5yZWxl
YXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21w
b3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBsYXll
cklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1Jl
YXNvbnM+JiBjb21wb3NpdGluZ1JlYXNvbnMpCit2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYgY29tcG9zaXRpbmdSZWFzb25zUmVzdWx0KQogewogICAg
IGNvbnN0IFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklk
KTsKIApAQCAtMjM3LDcgKzIzOSw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJl
YXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgfQog
CiAgICAgQ29tcG9zaXRpbmdSZWFzb25zIHJlYXNvbnNCaXRtYXNrID0gcmVuZGVyTGF5ZXItPmNv
bXBvc2l0b3IoKS5yZWFzb25zRm9yQ29tcG9zaXRpbmcoKnJlbmRlckxheWVyKTsKLSAgICBjb21w
b3NpdGluZ1JlYXNvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0
aW5nUmVhc29uczo6Y3JlYXRlKCk7CisgICAgYXV0byBjb21wb3NpdGluZ1JlYXNvbnMgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29uczo6Y3JlYXRlKCku
cmVsZWFzZSgpOwogCiAgICAgaWYgKHJlYXNvbnNCaXRtYXNrICYgQ29tcG9zaXRpbmdSZWFzb24z
RFRyYW5zZm9ybSkKICAgICAgICAgY29tcG9zaXRpbmdSZWFzb25zLT5zZXRUcmFuc2Zvcm0zRCh0
cnVlKTsKQEAgLTMxMCw2ICszMTIsOCBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpy
ZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogCiAgICAg
aWYgKHJlYXNvbnNCaXRtYXNrICYgQ29tcG9zaXRpbmdSZWFzb25Sb290KQogICAgICAgICBjb21w
b3NpdGluZ1JlYXNvbnMtPnNldFJvb3QodHJ1ZSk7CisgICAgCisgICAgY29tcG9zaXRpbmdSZWFz
b25zUmVzdWx0ID0gV1RGOjptb3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CiB9CiAKIFN0cmluZyBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5o
CmluZGV4IDY2MzM5MzIuLjI3NGUyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC03NSw4ICs3NSw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0
cmluZyYsIFJlbmRlck9iamVjdCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mKTsKICAgICB2b2lkIGdhdGhl
ckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXll
ciosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpMYXllclRyZWU6OkxheWVyPj4mKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYs
IFJlbmRlckxheWVyKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0Jik7Cisg
ICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0
Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciopOworICAgIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25z
dCBJbnRSZWN0Jik7CiAKICAgICBpbnQgaWRGb3JOb2RlKEVycm9yU3RyaW5nJiwgTm9kZSopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXgg
Yzg0NzQ1Yy4uMjk0YzA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmNwcApAQCAtMzMxLDUwICszMzEsNTAgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5
Ojp1cGRhdGUoKQogICAgIGZvcmNlUGFpbnQoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG9iamVjdC0+c2V0RG91Ymxl
KEFTQ0lJTGl0ZXJhbCgieCIpLCBwb2ludC54KCkpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgieSIpLCBwb2ludC55KCkpOwotICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgp
OworICAgIHJldHVybiBXVEY6Om1vdmUob2JqZWN0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgieCIpLCByZWN0LngoKSk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJ5IiksIHJlY3QueSgpKTsKICAgICBvYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVy
YWwoIndpZHRoIiksIHJlY3Qud2lkdGgoKSk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJoZWlnaHQiKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIG9iamVjdC5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShvYmplY3QpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclF1YWQoY29uc3QgRmxvYXRRdWFkJiBx
dWFkKQorc3RhdGljIFJlZjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclF1YWQoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBhcnJheSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9i
amVjdEZvclBvaW50KHF1YWQucDEoKSkpOwogICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2Jq
ZWN0Rm9yUG9pbnQocXVhZC5wMigpKSk7CiAgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmpl
Y3RGb3JQb2ludChxdWFkLnAzKCkpKTsKICAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVj
dEZvclBvaW50KHF1YWQucDQoKSkpOwotICAgIHJldHVybiBhcnJheS5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIFdURjo6bW92ZShhcnJheSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQoY29uc3QgSGlnaGxpZ2h0JiBoaWdobGln
aHQpCitzdGF0aWMgUmVmPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQo
Y29uc3QgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5zaXplKCk7ICsraSkKICAgICAg
ICAgYXJyYXktPnB1c2hBcnJheShidWlsZEFycmF5Rm9yUXVhZChoaWdobGlnaHQucXVhZHNbaV0p
KTsKLSAgICBvYmplY3QtPnNldEFycmF5KCJxdWFkcyIsIGFycmF5LnJlbGVhc2UoKSk7CisgICAg
b2JqZWN0LT5zZXRBcnJheSgicXVhZHMiLCBXVEY6Om1vdmUoYXJyYXkpKTsKICAgICBvYmplY3Qt
PnNldFN0cmluZygiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvci5zZXJpYWxp
emVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGln
aGxpZ2h0LmNvbnRlbnRPdXRsaW5lQ29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBvYmplY3QtPnNl
dFN0cmluZygicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvci5zZXJpYWxpemVk
KCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodC5ib3Jk
ZXJDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJtYXJnaW5Db2xv
ciIsIGhpZ2hsaWdodC5tYXJnaW5Db2xvci5zZXJpYWxpemVkKCkpOwotICAgIHJldHVybiBvYmpl
Y3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUob2JqZWN0KTsKIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdo
dChGcmFtZVZpZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK3N0YXRpYyBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodChGcmFtZVZp
ZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKIHsKICAgICBGcmFtZVZpZXcqIGNv
bnRhaW5pbmdWaWV3ID0gcmVnaW9uLT5mcmFtZSgpLnZpZXcoKTsKICAgICBpZiAoIWNvbnRhaW5p
bmdWaWV3KQpAQCAtNDA2LDIwICs0MDYsMjAgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodChGcmFtZVZpZXcqIG1haW4KICAg
ICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBpbmNvbWluZ1Jl
Y3RRdWFkKTsKICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3
LCBvdXRnb2luZ1JlY3RRdWFkKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lv
bk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKIAogICAgIHJl
Z2lvbk9iamVjdC0+c2V0QXJyYXkoImJvcmRlclF1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChib3Jk
ZXJSZWN0UXVhZCkpOwogICAgIHJlZ2lvbk9iamVjdC0+c2V0QXJyYXkoImluY29taW5nUXVhZCIs
IGJ1aWxkQXJyYXlGb3JRdWFkKGluY29taW5nUmVjdFF1YWQpKTsKICAgICByZWdpb25PYmplY3Qt
PnNldEFycmF5KCJvdXRnb2luZ1F1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChvdXRnb2luZ1JlY3RR
dWFkKSk7CiAKLSAgICByZXR1cm4gcmVnaW9uT2JqZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGOjptb3ZlKHJlZ2lvbk9iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQoUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCitzdGF0aWMgUmVmPEluc3BlY3Rv
ckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQoUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiB7CiAgICAgRnJhbWVWaWV3KiBt
YWluRnJhbWVWaWV3ID0gcmVnaW9uLT5kb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpOwogCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogCiAgICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCA9
IGZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsKICAgICBmb3IgKGF1dG8mIGl0ZXJSZWdp
b24gOiByZWdpb25MaXN0KSB7CkBAIC00MzUsMTggKzQzNSwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KFJlbmRl
clJlZ2lvbgogICAgICAgICBhcnJheS0+cHVzaE9iamVjdChyZWdpb25IaWdobGlnaHRPYmplY3Qu
cmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gYXJyYXkucmVsZWFzZSgpOworICAgIHJl
dHVybiBXVEY6Om1vdmUoYXJyYXkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorc3RhdGljIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNldEludGVnZXIoIndpZHRoIiwgc2l6ZS53
aWR0aCgpKTsKICAgICByZXN1bHQtPnNldEludGVnZXIoImhlaWdodCIsIHNpemUuaGVpZ2h0KCkp
OwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVz
dWx0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvckNTU1JlZ2lvbkNvbnRlbnRDbGlwKFJlbmRlclJlZ2lvbiogcmVnaW9uKQorc3RhdGljIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAo
UmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IHJl
Z2lvbi0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghY29udGFpbmluZ0ZyYW1lKQpAQCAt
NDY2LDkgKzQ2Niw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRP
YmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChSZW5kZXJSZWdpCiAgICAgRmxvYXRRdWFkIGNs
aXBRdWFkID0gcmVnaW9uLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChmbGlwcGVkUmVn
aW9uUmVjdCkpOwogICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1Zp
ZXcsIGNsaXBRdWFkKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lvbk9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZWdpb25PYmpl
Y3QtPnNldEFycmF5KCJxdWFkIiwgYnVpbGRBcnJheUZvclF1YWQoY2xpcFF1YWQpKTsKLSAgICBy
ZXR1cm4gcmVnaW9uT2JqZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlZ2lv
bk9iamVjdCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvd2luZ1BhaW50UmVj
dHMoYm9vbCBzaG93aW5nUGFpbnRSZWN0cykKQEAgLTUyNiwxMSArNTI2LDExIEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6dXBkYXRlUGFpbnRSZWN0c1RpbWVyRmlyZWQoKQogCiB2b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OmRyYXdQYWludFJlY3RzKCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGZyYWdtZW50c0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJ
bnNwZWN0b3JBcnJheT4gZnJhZ21lbnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogbV9wYWludFJlY3RzKQogICAgICAgICBmcmFn
bWVudHNBcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclJlY3QocGFpci5zZWNvbmQpKTsK
IAotICAgIGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJTGl0ZXJhbCgidXBkYXRlUGFpbnRSZWN0cyIp
LCBmcmFnbWVudHNBcnJheS5yZWxlYXNlKCkpOworICAgIGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJ
TGl0ZXJhbCgidXBkYXRlUGFpbnRSZWN0cyIpLCBXVEY6Om1vdmUoZnJhZ21lbnRzQXJyYXkpKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3V0dGVyKCkKQEAgLTUzOCw5ICs1Mzgs
OSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHdXR0ZXIoKQogICAgIGV2YWx1YXRlSW5P
dmVybGF5KEFTQ0lJTGl0ZXJhbCgiZHJhd0d1dHRlciIpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9yUmVuZGVyZXJGcmFnbWVudHMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBjb25maWcpCitzdGF0aWMg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvclJlbmRlcmVyRnJhZ21lbnRzKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgY29uZmlnKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZnJhZ21lbnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBmcmFnbWVudHNBcnJheSA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGNvbnRhaW5p
bmdGbG93VGhyZWFkID0gcmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAg
ICBpZiAoIWNvbnRhaW5pbmdGbG93VGhyZWFkKSB7CkBAIC01NjIsMTggKzU2MiwxOCBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JSZW5kZXJlckZyYWdt
ZW50cyhSZW5kZXJPYmplY3QqCiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgaGlnaGxp
Z2h0IG9mIHRoZSBmcmFnbWVudCBpbnNpZGUgdGhlIGN1cnJlbnQgcmVnaW9uLgogICAgICAgICAg
ICAgICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CiAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJl
ckhpZ2hsaWdodChyZW5kZXJlciwgcmVnaW9uLCBjb25maWcsICZoaWdobGlnaHQsIEluc3BlY3Rv
ck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXcpOwotICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGZyYWdtZW50T2JqZWN0ID0gYnVpbGRPYmplY3RGb3JIaWdobGln
aHQoaGlnaGxpZ2h0KTsKKyAgICAgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBmcmFn
bWVudE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CiAKICAgICAg
ICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjbGlwcGluZyBhcmVhIG9mIHRoZSByZWdpb24uCiAg
ICAgICAgICAgICAgICAgZnJhZ21lbnRPYmplY3QtPnNldE9iamVjdCgicmVnaW9uIiwgYnVpbGRP
YmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChyZWdpb24pKTsKLSAgICAgICAgICAgICAgICBm
cmFnbWVudHNBcnJheS0+cHVzaE9iamVjdChmcmFnbWVudE9iamVjdC5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgICAgIGZyYWdtZW50c0FycmF5LT5wdXNoT2JqZWN0KFdURjo6bW92ZShmcmFnbWVu
dE9iamVjdCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRS
ZWdpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gZnJhZ21lbnRzQXJyYXkucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZnJh
Z21lbnRzQXJyYXkpOwogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCkBAIC02MzMsMTMgKzYz
MywxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRQYXRoU2VnbWVudCh2b2lkKiBpbmZvLCBjb25zdCBQ
YXRoRWxlbWVudCogcGF0aEVsZW1lbnQpCiAgICAgfQogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2hhcGVPdXRzaWRlKEZyYW1lKiBjb250YWlu
aW5nRnJhbWUsIFJlbmRlckJveCogcmVuZGVyZXIpCitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUoRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSwg
UmVuZGVyQm94KiByZW5kZXJlcikKIHsKICAgICBjb25zdCBTaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGVJbmZvID0gcmVuZGVyZXItPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoIXNo
YXBlT3V0c2lkZUluZm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc2hhcGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBMYXlvdXRSZWN0IHNoYXBlQm91bmRzID0gc2hhcGVPdXRzaWRlSW5mby0+
Y29tcHV0ZWRTaGFwZVBoeXNpY2FsQm91bmRpbmdCb3goKTsKICAgICBGbG9hdFF1YWQgc2hhcGVR
dWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHNoYXBlQm91bmRz
KSk7CiAgICAgY29udGVudHNRdWFkVG9QYWdlKGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWlu
RnJhbWUoKS52aWV3KCksIGNvbnRhaW5pbmdGcmFtZS0+dmlldygpLCBzaGFwZVF1YWQpOwpAQCAt
NjQ5LDM5ICs2NDksMzkgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvclNoYXBlT3V0c2lkZShGcmFtZSogY29udGFpbmluZ0YKICAgICBzaGFwZU91dHNp
ZGVJbmZvLT5jb21wdXRlZFNoYXBlKCkuYnVpbGREaXNwbGF5UGF0aHMocGF0aHMpOwogCiAgICAg
aWYgKHBhdGhzLnNoYXBlLmxlbmd0aCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5z
cGVjdG9yQXJyYXk+IHNoYXBlUGF0aCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICAgUGF0aEFwcGx5SW5mbyBpbmZvOwogICAgICAgICBpbmZvLnJvb3RWaWV3ID0gY29udGFpbmlu
Z0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKICAgICAgICAgaW5mby52aWV3ID0g
Y29udGFpbmluZ0ZyYW1lLT52aWV3KCk7Ci0gICAgICAgIGluZm8uYXJyYXkgPSBzaGFwZVBhdGgu
Z2V0KCk7CisgICAgICAgIGluZm8uYXJyYXkgPSAmc2hhcGVQYXRoLmdldCgpOwogICAgICAgICBp
bmZvLnJlbmRlcmVyID0gcmVuZGVyZXI7CiAgICAgICAgIGluZm8uc2hhcGVPdXRzaWRlSW5mbyA9
IHNoYXBlT3V0c2lkZUluZm87CiAKICAgICAgICAgcGF0aHMuc2hhcGUuYXBwbHkoJmluZm8sICZh
cHBlbmRQYXRoU2VnbWVudCk7CiAKLSAgICAgICAgc2hhcGVPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgic2hhcGUiKSwgc2hhcGVQYXRoLnJlbGVhc2UoKSk7CisgICAgICAgIHNoYXBlT2Jq
ZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoInNoYXBlIiksIHNoYXBlUGF0aC5jb3B5UmVmKCkp
OwogCiAgICAgICAgIGlmIChwYXRocy5tYXJnaW5TaGFwZS5sZW5ndGgoKSkgewogICAgICAgICAg
ICAgc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgaW5m
by5hcnJheSA9IHNoYXBlUGF0aC5nZXQoKTsKKyAgICAgICAgICAgIGluZm8uYXJyYXkgPSAmc2hh
cGVQYXRoLmdldCgpOwogCiAgICAgICAgICAgICBwYXRocy5tYXJnaW5TaGFwZS5hcHBseSgmaW5m
bywgJmFwcGVuZFBhdGhTZWdtZW50KTsKIAotICAgICAgICAgICAgc2hhcGVPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgibWFyZ2luU2hhcGUiKSwgc2hhcGVQYXRoLnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICBzaGFwZU9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJtYXJnaW5TaGFw
ZSIpLCBzaGFwZVBhdGguY29weVJlZigpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBzaGFwZU9iamVjdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShzaGFwZU9iamVj
dCk7CiB9CiAjZW5kaWYKIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUpCitzdGF0aWMgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogewogICAgIEFT
U0VSVChub2RlKTsKICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSB8fCAhbm9kZS0+ZG9jdW1l
bnQoKS5mcmFtZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
OwogICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc1hIVE1MRG9jdW1lbnQo
KTsKQEAgLTc0NiwxMCArNzQ2LDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogICAgICAgICAgICAgZWxl
bWVudEluZm8tPnNldFN0cmluZygicm9sZSIsIGF4T2JqZWN0LT5jb21wdXRlZFJvbGVTdHJpbmco
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGVsZW1lbnRJbmZvLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKGVsZW1lbnRJbmZvKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29u
c3QKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0
Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NjMsNyArNzYzLDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0
ZWROb2RlKCkgY28KICAgICBpZiAoIWhpZ2hsaWdodEZyYWdtZW50cykKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaWdobGlnaHRPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGhp
Z2hsaWdodE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAKICAgICAvLyBUaGUg
bWFpbiB2aWV3J3Mgc2Nyb2xsIG9mZnNldCBpcyBzaGFyZWQgYWNyb3NzIGFsbCBxdWFkcy4KICAg
ICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKTsKQEAgLTc3
Nyw3ICs3NzcsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT3Zlcmxh
eTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjbwogICAgICAgICAgICAgaGlnaGxp
Z2h0T2JqZWN0LT5zZXRPYmplY3QoImVsZW1lbnRJbmZvIiwgZWxlbWVudEluZm8ucmVsZWFzZSgp
KTsKICAgICB9CiAgICAgICAgIAotICAgIHJldHVybiBoaWdobGlnaHRPYmplY3QucmVsZWFzZSgp
OworICAgIHJldHVybiBXVEY6Om1vdmUoaGlnaGxpZ2h0T2JqZWN0KTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCgpCkBAIC04NTksMzMgKzg1OSwzMyBAQCB2
b2lkIEluc3BlY3Rvck92ZXJsYXk6OmZvcmNlUGFpbnQoKQogCiB2b2lkIEluc3BlY3Rvck92ZXJs
YXk6OnJlc2V0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgZnJh
bWVWaWV3RnVsbFNpemUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzZXREYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNldERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc2V0RGF0YS0+c2V0
RG91YmxlKCJkZXZpY2VTY2FsZUZhY3RvciIsIG1fcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
ICAgICByZXNldERhdGEtPnNldE9iamVjdCgidmlld3BvcnRTaXplIiwgYnVpbGRPYmplY3RGb3JT
aXplKHZpZXdwb3J0U2l6ZSkpOwogICAgIHJlc2V0RGF0YS0+c2V0T2JqZWN0KCJmcmFtZVZpZXdG
dWxsU2l6ZSIsIGJ1aWxkT2JqZWN0Rm9yU2l6ZShmcmFtZVZpZXdGdWxsU2l6ZSkpOwotICAgIGV2
YWx1YXRlSW5PdmVybGF5KCJyZXNldCIsIHJlc2V0RGF0YS5yZWxlYXNlKCkpOworICAgIGV2YWx1
YXRlSW5PdmVybGF5KCJyZXNldCIsIFdURjo6bW92ZShyZXNldERhdGEpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKICAgICBvdmVy
bGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2Rl
KG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNPTlN0cmluZygpLCAnKScpKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3Ry
aW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJ
bnNwZWN0b3JBcnJheT4gY29tbWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBj
b21tYW5kLT5wdXNoU3RyaW5nKG1ldGhvZCk7CiAgICAgY29tbWFuZC0+cHVzaFN0cmluZyhhcmd1
bWVudCk7CiAgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXZhbHVhdGUo
U2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05T
dHJpbmcoKSwgJyknKSkpOwogfQogCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5P
dmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBh
cmd1bWVudCkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiBhcmd1bWVudCkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKLSAgICBjb21tYW5kLT5w
dXNoVmFsdWUoYXJndW1lbnQpOworICAgIGNvbW1hbmQtPnB1c2hWYWx1ZShXVEY6Om1vdmUoYXJn
dW1lbnQpKTsKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0
ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNP
TlN0cmluZygpLCAnKScpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5oCmluZGV4IDRlZmI0NTguLmU1Y2ZlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpOwogCi0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHRl
ZE5vZGUoKSBjb25zdDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1
aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIGZyZWVQYWdl
KCk7CiBwcml2YXRlOgpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNl
dChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGZyYW1lVmlld0Z1
bGxTaXplKTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9k
KTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KTsKLSAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGFyZ3Vt
ZW50KTsKKyAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiBhcmd1bWVudCk7CiAKICAgICBQYWdl
JiBtX3BhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggN2UyY2JkYi4uMTBk
ZWY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgYm9vbCBoYXNUZXh0Q29udGVudChDYWNo
ZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgcmV0dXJuIHR5cGUgPT0gSW5zcGVjdG9y
UGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50
OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlw
dFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKIH0K
IAotc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlWEhSVGV4dERl
Y29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdO
YW1lKQorc3RhdGljIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGVYSFJUZXh0RGVj
b2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05h
bWUpCiB7CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXI7CiAgICAgaWYg
KCF0ZXh0RW5jb2RpbmdOYW1lLmlzRW1wdHkoKSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGVYSFJUZXh0RGVjb2Rlcihjb25z
dCBTdHJpbmcmIG1pbWVUeQogICAgICAgICBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y3JlYXRlKCJ0ZXh0L2h0bWwiLCAiVVRGLTgiKTsKICAgICBlbHNlCiAgICAgICAgIGRlY29kZXIg
PSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCAiVVRGLTgiKTsKLSAg
ICByZXR1cm4gZGVjb2RlcjsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRlY29kZXIpOwogfQogCiBi
b29sIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hlZFJlc291
cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQp
CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgZnJhbWUubG9hZGVyKCkuY2hhbmdl
TG9jYXRpb24oZnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUuZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3
YXJkTGlzdDo6Tm8pOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2ll
KQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2Jq
ZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQogewogICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXROYW1lKGNv
b2tpZS5uYW1lKQpAQCAtNDM1LDE0ICs0MzUsMTQgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdAog
ICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFy
cmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKK3N0YXRpYyBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2ll
c0xpc3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGNvb2tpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGNvb2tpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKIAotICAgIGZvciAoYXV0byYgY29va2ll
IDogY29va2llc0xpc3QpCisgICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBjb29raWVzTGlz
dCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNvb2tpZShjb29raWUp
KTsKIAotICAgIHJldHVybiBjb29raWVzOworICAgIHJldHVybiBXVEY6Om1vdmUoY29va2llcyk7
CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JG
cmFtZShGcmFtZSogZnJhbWUpCkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIGMKICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0
QnlMaW5lcyhjb250ZW50LCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4g
YnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBT
dHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQog
ewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwodXJsKQpAQCAtODUxLDEzICs4NTEsMTMgQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IExheW91dFJlY3QmIHJlY3QKIAogICAgIExheW91dFJlY3QgYWJzb2x1dGVSZWN0ID0gTGF5b3V0
UmVjdChyZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVjdCkpLmJvdW5k
aW5nQm94KCkpOwogICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLnZp
ZXcoKTsKLSAgICAKKwogICAgIExheW91dFJlY3Qgcm9vdFJlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAg
ICAgaWYgKCF2aWV3LT5mcmFtZSgpLmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgSW50UmVjdCBy
b290Vmlld1JlY3QgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoc25hcHBlZEludFJlY3QoYWJz
b2x1dGVSZWN0KSk7CiAgICAgICAgIHJvb3RSZWN0ID0gdmlldy0+ZnJhbWUoKS5tYWluRnJhbWUo
KS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhyb290Vmlld1JlY3QpOwogICAgIH0KLSAgICAK
KwogICAgIGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSkgewogICAgICAg
ICBtX2NsaWVudC0+c2hvd1BhaW50UmVjdChyb290UmVjdCk7CiAgICAgICAgIHJldHVybjsKQEAg
LTg5OCwxNCArODk4LDE1IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzY3JpcHRzRW5hYmxl
ZChib29sIGlzRW5hYmxlZCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0c0VuYWJs
ZWQoaXNFbmFibGVkKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBm
cmFtZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0
SWQoZnJhbWVJZChmcmFtZSkpCiAgICAgICAgIC5zZXRMb2FkZXJJZChsb2FkZXJJZChmcmFtZS0+
bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpCiAgICAgICAgIC5zZXRVcmwoZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpKQogICAgICAgICAuc2V0TWltZVR5cGUoZnJhbWUtPmxvYWRl
cigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSkKLSAgICAgICAgLnNldFNl
Y3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0
cmluZygpKTsKKyAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0cmluZygpKQorICAgICAgICAucmVsZWFzZSgpOwogICAg
IGlmIChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKQogICAgICAgICBmcmFtZU9iamVjdC0+c2V0UGFy
ZW50SWQoZnJhbWVJZChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKSk7CiAgICAgaWYgKGZyYW1lLT5v
d25lckVsZW1lbnQoKSkgewpAQCAtOTE1LDIyICs5MTYsMjQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVj
dEZvckYKICAgICAgICAgZnJhbWVPYmplY3QtPnNldE5hbWUobmFtZSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIGZyYW1lT2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUoZnJhbWVPYmplY3QpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBm
cmFtZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4g
SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZnJhbWUp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9i
amVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNl
Pj4gc3VicmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCi0gICAgICAg
ICAuc2V0RnJhbWUoZnJhbWVPYmplY3QpCi0gICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJlc291
cmNlcyk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9i
amVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIGF1dG8gc3VicmVzb3VyY2Vz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRG
cmFtZShXVEY6Om1vdmUoZnJhbWVPYmplY3QpKQorICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJl
c291cmNlcy5jb3B5UmVmKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBmb3IgKGF1dG8q
IGNhY2hlZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPiByZXNv
dXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNy
ZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFVybChjYWNo
ZWRSZXNvdXJjZS0+dXJsKCkpCiAgICAgICAgICAgICAuc2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5
cGVKc29uKCpjYWNoZWRSZXNvdXJjZSkpCi0gICAgICAgICAgICAuc2V0TWltZVR5cGUoY2FjaGVk
UmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7CisgICAgICAgICAgICAuc2V0TWltZVR5
cGUoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSkKKyAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkKICAg
ICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRDYW5jZWxlZCh0cnVlKTsKICAgICAgICAgZWxz
ZSBpZiAoY2FjaGVkUmVzb3VyY2UtPnN0YXR1cygpID09IENhY2hlZFJlc291cmNlOjpMb2FkRXJy
b3IpCkBAIC05MzgsNyArOTQxLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWkKICAgICAgICAg
U3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVS
TEZvclJlc291cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICAgICAgaWYgKCFzb3VyY2VNYXBwaW5n
VVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRTb3VyY2VNYXBV
Ukwoc291cmNlTWFwcGluZ1VSTCk7Ci0gICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShyZXNv
dXJjZU9iamVjdCk7CisgICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShXVEY6Om1vdmUocmVz
b3VyY2VPYmplY3QpKTsKICAgICB9CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBjaGls
ZHJlbkFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oCmluZGV4IDUzNDNhZjguLmJmMjY0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTE2Niw4ICsxNjYsOCBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBib29sIG1haW5SZXNvdXJjZUNvbnRlbnQoRnJhbWUqLCBib29sIHdpdGhCYXNlNjRF
bmNvZGUsIFN0cmluZyogcmVzdWx0KTsKICAgICBzdGF0aWMgYm9vbCBkYXRhQ29udGVudChjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05h
bWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpOwogCi0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gYnVpbGRPYmplY3RGb3JGcmFt
ZShGcmFtZSopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJh
bWVSZXNvdXJjZVRyZWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKik7CisgICAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBidWlsZE9iamVjdEZvckZyYW1lKEZy
YW1lKik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiBidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSopOwogICAgIFBhZ2UqIG1fcGFnZTsK
ICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclBhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRj
aGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxh
eUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2Vu
dC5jcHAKaW5kZXggNzc5YmU2Mi4uOGZjNDQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCkBAIC01NCw0MCArNTQsMzYgQEAgdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiBi
dWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3Np
dGlvbikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3Np
dGlvbj4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlv
biYgcG9zaXRpb24pCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6
UmVwbGF5UG9zaXRpb24+IHBvc2l0aW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlZ21l
bnRPZmZzZXQocG9zaXRpb24uc2VnbWVudE9mZnNldCkKLSAgICAgICAgLnNldElucHV0T2Zmc2V0
KHBvc2l0aW9uLmlucHV0T2Zmc2V0KTsKLQotICAgIHJldHVybiBwb3NpdGlvbk9iamVjdC5yZWxl
YXNlKCk7CisgICAgICAgIC5zZXRJbnB1dE9mZnNldChwb3NpdGlvbi5pbnB1dE9mZnNldCkKKyAg
ICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dChj
b25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90IG9mZnNldCkKK3N0
YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBp
bnB1dCwgc2l6ZV90IG9mZnNldCkKIHsKICAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZElucHV0ID0g
RW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46OmVuY29kZVZhbHVlKGlu
cHV0KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1
dD4gaW5wdXRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0
OjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxh
eUlucHV0OjpjcmVhdGUoKQogICAgICAgICAuc2V0VHlwZShpbnB1dC50eXBlKCkpCiAgICAgICAg
IC5zZXRPZmZzZXQob2Zmc2V0KQotICAgICAgICAuc2V0RGF0YShlbmNvZGVkSW5wdXQuYXNPYmpl
Y3QoKSk7Ci0KLSAgICByZXR1cm4gaW5wdXRPYmplY3QucmVsZWFzZSgpOworICAgICAgICAuc2V0
RGF0YShlbmNvZGVkSW5wdXQuYXNPYmplY3QoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNz
aW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24oUGFzc1JlZlB0cjxSZXBsYXlTZXNz
aW9uPiBwcnBTZXNzaW9uKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6
OlJlcGxheVNlc3Npb24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihSZWZQdHI8UmVw
bGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewotICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNz
aW9uID0gcHJwU2Vzc2lvbjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U2VnbWVudElkZW50aWZpZXI+PiBzZWdtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFNlZ21lbnRJZGVudGlmaWVyPjo6Y3JlYXRlKCk7CisgICAgYXV0byBzZWdtZW50cyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFNlZ21lbnRJZGVudGlmaWVyPjo6Y3JlYXRlKCk7CiAKICAg
ICBmb3IgKGF1dG8gaXQgPSBzZXNzaW9uLT5iZWdpbigpOyBpdCAhPSBzZXNzaW9uLT5lbmQoKTsg
KytpdCkKICAgICAgICAgc2VnbWVudHMtPmFkZEl0ZW0oKCppdCktPmlkZW50aWZpZXIoKSk7CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBz
ZXNzaW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9u
OjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxh
eVNlc3Npb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChzZXNzaW9uLT5pZGVudGlmaWVyKCkp
CiAgICAgICAgIC5zZXRUaW1lc3RhbXAoc2Vzc2lvbi0+dGltZXN0YW1wKCkpCi0gICAgICAgIC5z
ZXRTZWdtZW50cyhzZWdtZW50cy5yZWxlYXNlKCkpOwotCi0gICAgcmV0dXJuIHNlc3Npb25PYmpl
Y3QucmVsZWFzZSgpOworICAgICAgICAuc2V0U2VnbWVudHMoV1RGOjptb3ZlKHNlZ21lbnRzKSkK
KyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
cGxheTo6U2Vzc2lvblN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdl
YkNvcmU6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCkBAIC0xMTEsNyArMTA3LDcgQEAgc3Rh
dGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9yU2VnbWVudFMKIAogY2xhc3MgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9y
IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5
cGU7CisgICAgdHlwZWRlZiBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5cGU7CiAKICAgICBT
ZXJpYWxpemVJbnB1dFRvSlNPTkZ1bmN0b3IoKQogICAgICAgICA6IG1faW5wdXRzKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5w
dXQ+OjpjcmVhdGUoKSkgeyB9CkBAIC0xMzAsMzAgKzEyNiwyOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBs
YXk6OlJlcGxheUlucHV0Pj4gbV9pbnB1dHM7CiB9OwogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiBidWlsZEluc3BlY3Rvck9i
amVjdEZvclNlZ21lbnQoUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gcHJwU2VnbWVu
dCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVu
dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KFJlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4mJiBzZWdtZW50KQogewotICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2Vn
bWVudCA9IHBycFNlZ21lbnQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXRRdWV1ZT4+IHF1ZXVlc09i
amVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
cGxheTo6UmVwbGF5SW5wdXRRdWV1ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcXVldWVzT2JqZWN0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5
OjpSZXBsYXlJbnB1dFF1ZXVlPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHNpemVfdD4oSW5wdXRRdWV1ZTo6Q291bnQpOyBpKyspIHsKICAgICAg
ICAgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yIGNvbGxlY3RvcjsKICAgICAgICAgSW5wdXRR
dWV1ZSBxdWV1ZSA9IHN0YXRpY19jYXN0PElucHV0UXVldWU+KGkpOwotICAgICAgICBSZWZQdHI8
RnVuY3RvcklucHV0Q3Vyc29yPiBmdW5jdG9yQ3Vyc29yID0gRnVuY3RvcklucHV0Q3Vyc29yOjpj
cmVhdGUoc2VnbWVudCk7CisgICAgICAgIFJlZlB0cjxGdW5jdG9ySW5wdXRDdXJzb3I+IGZ1bmN0
b3JDdXJzb3IgPSBGdW5jdG9ySW5wdXRDdXJzb3I6OmNyZWF0ZShzZWdtZW50LmNvcHlSZWYoKSk7
CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gcXVldWVJbnB1dHMgPSBmdW5jdG9yQ3Vyc29y
LT5mb3JFYWNoSW5wdXRJblF1ZXVlKHF1ZXVlLCBjb2xsZWN0b3IpOwogCi0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU+IHF1ZXVlT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVh
dGUoKQorICAgICAgICBhdXRvIHF1ZXVlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFR5cGUoRW5j
b2RpbmdUcmFpdHM8SW5wdXRRdWV1ZT46OmVuY29kZVZhbHVlKHF1ZXVlKS5jb252ZXJ0VG88U3Ry
aW5nPigpKQotICAgICAgICAgICAgLnNldElucHV0cyhxdWV1ZUlucHV0cyk7Ci0KLSAgICAgICAg
cXVldWVzT2JqZWN0LT5hZGRJdGVtKHF1ZXVlT2JqZWN0LnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICAuc2V0SW5wdXRzKHF1ZXVlSW5wdXRzKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAg
ICAgcXVldWVzT2JqZWN0LT5hZGRJdGVtKFdURjo6bW92ZShxdWV1ZU9iamVjdCkpOwogICAgIH0K
IAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50
PiBzZWdtZW50T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2Vn
bWVudDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpT
ZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKHNlZ21lbnQtPmlkZW50aWZp
ZXIoKSkKICAgICAgICAgLnNldFRpbWVzdGFtcChzZWdtZW50LT50aW1lc3RhbXAoKSkKLSAgICAg
ICAgLnNldFF1ZXVlcyhxdWV1ZXNPYmplY3QucmVsZWFzZSgpKTsKLQotICAgIHJldHVybiBzZWdt
ZW50T2JqZWN0LnJlbGVhc2UoKTsKKyAgICAgICAgLnNldFF1ZXVlcyhXVEY6Om1vdmUocXVldWVz
T2JqZWN0KSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
Okluc3BlY3RvclJlcGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQpAQCAtMzM3LDcgKzMzMSw3IEBA
IHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc3RvcENhcHR1cmluZygp
OwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHBvc2l0
aW9uT2JqZWN0LCBib29sIGZhc3RSZXBsYXkpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpy
ZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBwb3NpdGlvbk9iamVjdCwgYm9vbCBmYXN0UmVwbGF5KQogewogICAg
IFJlcGxheVBvc2l0aW9uIHBvc2l0aW9uOwogICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldElu
dGVnZXIoQVNDSUlMaXRlcmFsKCJzZWdtZW50T2Zmc2V0IiksIHBvc2l0aW9uLnNlZ21lbnRPZmZz
ZXQpKSB7CkBAIC01MDcsNyArNTAxLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0
U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlAKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rv
ck9iamVjdEZvclNlc3Npb24oc2Vzc2lvbik7CisgICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQogCiB2b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXIgaWRl
bnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21l
bnQ+JiBzZXJpYWxpemVkT2JqZWN0KQpAQCAtNTE4LDcgKzUxMiw3IEBAIHZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OmdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5z
cGVjdG9yOjpQCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXJpYWxpemVkT2JqZWN0
ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KHNlZ21lbnQpOworICAgIHNlcmlhbGl6
ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnQoV1RGOjptb3ZlKHNlZ21l
bnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAppbmRleCAxNzNhZWE3Li45NDI5NTExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaApA
QCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0Q2FwdHVyaW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BDYXB0dXJpbmco
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUb1Bvc2l0
aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYsIGJvb2wgc2hvdWxkRmFzdEZvcndhcmQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBy
ZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYmLCBib29sIHNob3VsZEZhc3RGb3J3YXJkKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRG
YXN0Rm9yd2FyZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUGxheWJhY2soRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGxheWJhY2soRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAppbmRleCBlMjY0NTYwLi41YzJkYjk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
CkBAIC0xOTAsMTYgKzE5MCwxNiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZQogICAgIGRpc2Fi
bGUodW51c2VkKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRl
ck1hcCYgaGVhZGVycykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3Qt
PnNldFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBoZWFkZXJz
T2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUoaGVhZGVyc09iamVjdCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5n
PiBidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBSZXNvdXJjZUxvYWRUaW1pbmcmIHRpbWluZywg
RG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IFJlc291
cmNlTG9hZFRpbWluZyYgdGltaW5nLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRl
KCkKICAgICAgICAgLnNldE5hdmlnYXRpb25TdGFydChsb2FkZXItPnRpbWluZygpLT5uYXZpZ2F0
aW9uU3RhcnQoKSkKQEAgLTIxMyw1NiArMjEzLDU4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWlsZE9iamVjdEZvclRp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAg
ICAgICAuc2V0VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2Qo
cmVxdWVzdC5odHRwTWV0aG9kKCkpCi0gICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpOworICAgICAgICAuc2V0SGVhZGVy
cyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQorICAg
ICAgICAucmVsZWFzZSgpOwogICAgIGlmIChyZXF1ZXN0Lmh0dHBCb2R5KCkgJiYgIXJlcXVlc3Qu
aHR0cEJvZHkoKS0+aXNFbXB0eSgpKQogICAgICAgICByZXF1ZXN0T2JqZWN0LT5zZXRQb3N0RGF0
YShyZXF1ZXN0Lmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVx
dWVzdE9iamVjdDsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlcXVlc3RPYmplY3QpOwogfQogCi1z
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4g
YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogewogICAgIGlmIChyZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBkb3VibGUgc3RhdHVzID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJz
KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
aGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRz
KCkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
PiByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
OjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXNwb25zZS51
cmwoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhzdGF0dXMpCiAgICAgICAgIC5zZXRT
dGF0dXNUZXh0KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCi0gICAgICAgIC5zZXRIZWFkZXJz
KGhlYWRlcnMpCisgICAgICAgIC5zZXRIZWFkZXJzKFdURjo6bW92ZShoZWFkZXJzKSkKICAgICAg
ICAgLnNldE1pbWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCiAgICAgICAgIC5zZXRDb25uZWN0
aW9uUmV1c2VkKHJlc3BvbnNlLmNvbm5lY3Rpb25SZXVzZWQoKSkKLSAgICAgICAgLnNldENvbm5l
Y3Rpb25JZChyZXNwb25zZS5jb25uZWN0aW9uSUQoKSk7CisgICAgICAgIC5zZXRDb25uZWN0aW9u
SWQocmVzcG9uc2UuY29ubmVjdGlvbklEKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBy
ZXNwb25zZU9iamVjdC0+c2V0RnJvbURpc2tDYWNoZShyZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNv
dXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZSB8fCByZXNwb25zZS5zb3VyY2UoKSA9PSBS
ZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZUFmdGVyVmFsaWRhdGlvbik7CiAgICAg
cmVzcG9uc2VPYmplY3QtPnNldFRpbWluZyhidWlsZE9iamVjdEZvclRpbWluZyhyZXNwb25zZS5y
ZXNvdXJjZUxvYWRUaW1pbmcoKSwgbG9hZGVyKSk7CiAKLSAgICByZXR1cm4gcmVzcG9uc2VPYmpl
Y3Q7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXNwb25zZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiBi
dWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJj
ZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJj
ZT4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRS
ZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRV
cmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpKQogICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3JQYWdl
QWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24oKmNhY2hlZFJlc291cmNlKSkKLSAgICAgICAg
LnNldEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5lbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAgLnNl
dEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5lbmNvZGVkU2l6ZSgpKQorICAgICAgICAucmVsZWFz
ZSgpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
PiByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hl
ZFJlc291cmNlLT5yZXNwb25zZSgpLCBsb2FkZXIpOwotICAgIGlmIChyZXNvdXJjZVJlc3BvbnNl
KQotICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZSk7
CisgICAgYXV0byByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCBsb2FkZXIpOworICAgIHJlc291cmNlT2Jq
ZWN0LT5zZXRSZXNwb25zZShXVEY6Om1vdmUocmVzb3VyY2VSZXNwb25zZSkpOwogCiAgICAgU3Ry
aW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZv
clJlc291cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNF
bXB0eSgpKQogICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0U291cmNlTWFwVVJMKHNvdXJjZU1h
cHBpbmdVUkwpOwogCi0gICAgcmV0dXJuIHJlc291cmNlT2JqZWN0OworICAgIHJldHVybiBXVEY6
Om1vdmUocmVzb3VyY2VPYmplY3QpOwogfQogCiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp+SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudCgpCkBAIC00ODQsOSArNDg2LDkgQEAgdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50Ojpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNs
aWVudCh1bnMKICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFhIUlJlcGxheURhdGEocmVxdWVzdElk
LCB4aHJSZXBsYXlEYXRhKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxs
TG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9y
bURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRp
YWxzKQordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUihUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVy
bCwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1EYXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVh
ZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKIHsKLSAgICBSZWZQdHI8
WEhSUmVwbGF5RGF0YT4geGhyUmVwbGF5RGF0YSA9IFhIUlJlcGxheURhdGE6OmNyZWF0ZShtZXRo
b2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOwor
ICAgIFJlZlB0cjxYSFJSZXBsYXlEYXRhPiB4aHJSZXBsYXlEYXRhID0gWEhSUmVwbGF5RGF0YTo6
Y3JlYXRlKG1ldGhvZCwgdXJsLCBhc3luYywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywg
aW5jbHVkZUNyZWRlbnRpYWxzKTsKIAogICAgIG1fcGVuZGluZ1hIUlJlcGxheURhdGEuc2V0KGNs
aWVudCwgV1RGOjptb3ZlKHhoclJlcGxheURhdGEpKTsKIH0KQEAgLTU1MiwyMiArNTU0LDI0IEBA
IHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRp
b24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgICAgICBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRp
YXRvciA9IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KCZkb2N1bWVudCk7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQpCitSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSA9IGNyZWF0ZVNjcmlwdENhbGxTdGFj
ayhKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpLCBTY3JpcHRDYWxsU3RhY2s6
Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpOwogICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNr
VHJhY2UtPnNpemUoKSA+IDApIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpOworICAg
ICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQorICAgICAgICAgICAgLnJl
bGVhc2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRTdGFja1RyYWNlKHN0YWNrVHJh
Y2UtPmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSk7Ci0gICAgICAgIHJldHVybiBpbml0aWF0b3JPYmpl
Y3Q7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUoaW5pdGlhdG9yT2JqZWN0KTsKICAgICB9CiAK
ICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigp
KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRp
YXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6UGFyc2VyKTsKKyAgICAgICAgYXV0byBpbml0aWF0
b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0
ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJ
bml0aWF0b3I6OlR5cGU6OlBhcnNlcikKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAg
IGluaXRpYXRvck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CiAgICAg
ICAgIGluaXRpYXRvck9iamVjdC0+c2V0TGluZU51bWJlcihkb2N1bWVudC0+c2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZS5vbmVCYXNlZEludCgpKTsKLSAg
ICAgICAgcmV0dXJuIGluaXRpYXRvck9iamVjdDsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShp
bml0aWF0b3JPYmplY3QpOwogICAgIH0KIAogICAgIGlmIChtX2lzUmVjYWxjdWxhdGluZ1N0eWxl
ICYmIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQpAQCAtNTg3LDE4ICs1OTEsMjAgQEAg
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdAogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Ondp
bGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4gcmVxdWVzdE9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCi0g
ICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFk
ZXJGaWVsZHMoKSkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRXaWxsU2Vu
ZEhhbmRzaGFrZVJlcXVlc3QoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmll
ciksIHRpbWVzdGFtcCgpLCByZXF1ZXN0T2JqZWN0KTsKKyAgICBhdXRvIHJlcXVlc3RPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUo
KQorICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRw
SGVhZGVyRmllbGRzKCkpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoSWRlbnRpZmllcnNGYWN0
b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBXVEY6Om1vdmUocmVxdWVz
dE9iamVjdCkpOwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4gcmVzcG9uc2VPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKKyAg
ICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0YXR1
c1RleHQoKSkKLSAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVz
dElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgcmVzcG9uc2VPYmplY3QpOworICAgICAgICAu
c2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVl
c3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShyZXNwb25zZU9iamVjdCkp
OwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZENsb3NlV2ViU29ja2V0KHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcikKQEAgLTYwOCwyMCArNjE0LDIyIEBAIHZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRG
cmFtZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0
RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29j
a2V0RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bj
b2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAg
ICAuc2V0UGF5bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpKTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVSZWNlaXZlZChJ
ZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIGZy
YW1lT2JqZWN0KTsKKyAgICAgICAgLnNldFBheWxvYWREYXRhKFN0cmluZyhmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6
OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShmcmFtZU9iamVj
dCkpOwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFNlbmRXZWJTb2NrZXRG
cmFtZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0
RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29j
a2V0RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bj
b2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAg
ICAuc2V0UGF5bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpKTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVTZW50KElkZW50
aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgZnJhbWVP
YmplY3QpOworICAgICAgICAuc2V0UGF5bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZy
YW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT53ZWJTb2NrZXRGcmFtZVNlbnQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0
SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBXVEY6Om1vdmUoZnJhbWVPYmplY3QpKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVF
cnJvcih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KQpAQCAtNjUyLDkgKzY2MCw5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlzYWJs
ZShFcnJvclN0cmluZyYpCiAgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzLmNsZWFyKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoZWFkZXJzKQordm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoZWFkZXJzKQogewotICAgIG1fZXh0cmFSZXF1
ZXN0SGVhZGVycyA9IGhlYWRlcnM7CisgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzID0gaGVhZGVy
cy5jb3B5UmVmKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Z2V0UmVzcG9u
c2VCb2R5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKQEAgLTc0MSw3ICs3NDksNyBA
QCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldENhY2hlRGlzYWJsZWQoRXJyb3JTdHJp
bmcmLCBib29sIGNhY2hlRGlzYWJsZWQpCiAgICAgICAgIG1lbW9yeUNhY2hlKCkuZXZpY3RSZXNv
dXJjZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpsb2FkUmVzb3VyY2Uo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nLCBQYXNzUmVmUHRyPExvYWRSZXNvdXJjZUNhbGxiYWNrPiBwcnBDYWxs
YmFjaykKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIEZy
YW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJ
ZCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTc1Myw4ICs3NjEsNiBAQCB2b2lkIEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPExvYWRSZXNvdXJj
ZUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNrOwotCiAgICAgVVJMIHVybCA9IGRvY3Vt
ZW50LT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KHVybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKEFTQ0lJTGl0ZXJhbCgiR0VUIikpOwpA
QCAtNzY2LDcgKzc3Miw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291
cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgb3B0aW9ucy5j
cm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CiAKICAg
ICAvLyBJbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IGRlbGV0ZXMgaXRzZWxmIHdoZW4g
dGhlIGxvYWQgY29tcGxldGVzLgotICAgIEluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQq
IGluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQgPSBuZXcgSW5zcGVjdG9yVGhyZWFkYWJs
ZUxvYWRlckNsaWVudChjYWxsYmFjayk7CisgICAgSW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNs
aWVudCogaW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCA9IG5ldyBJbnNwZWN0b3JUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KFdURjo6bW92ZShjYWxsYmFjaykpOwogCiAgICAgUmVmUHRyPERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUoKmRvY3VtZW50LCAqaW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgcmVx
dWVzdCwgb3B0aW9ucyk7CiAgICAgaWYgKCFsb2FkZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCmluZGV4IDljMzEzM2IuLjcwMGNm
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuaApAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGYWlsTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyJiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOwogICAgIHZvaWQgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3Vt
ZW50TG9hZGVyJiwgQ2FjaGVkUmVzb3VyY2UmKTsKICAgICB2b2lkIGRvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwotICAgIHZvaWQgd2lsbExvYWRYSFIoVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFz
eW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBib2R5LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFk
ZXJzLCBib29sIGluY2x1ZGVDcmVuZGVudGlhbHMpOworICAgIHZvaWQgd2lsbExvYWRYSFIoVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmLCBi
b29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgYm9keSwgY29uc3QgSFRUUEhlYWRlck1hcCYg
aGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlbmRlbnRpYWxzKTsKICAgICB2b2lkIGRpZEZhaWxYSFJM
b2FkaW5nKFRocmVhZGFibGVMb2FkZXJDbGllbnQqKTsKICAgICB2b2lkIGRpZEZpbmlzaFhIUkxv
YWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVhIUlJlc3Bv
bnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC0xMTgsMTIgKzExOCwxMiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50Jik7
CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRv
cj4gYnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1
bWVudCopOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gZnJvbnRlbmQuCiAgICAgdmlydHVhbCB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhl
YWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJy
b3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNv
ZGVkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5WEhSKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjYW5D
bGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmluZyYsIGJvb2wqKSBvdmVycmlkZTsKQEAgLTEzMSw3
ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNhbkNsZWFyQnJvd3NlckNvb2tp
ZXMoRXJyb3JTdHJpbmcmLCBib29sKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
QnJvd3NlckNvb2tpZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2FjaGVEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgY2FjaGVEaXNhYmxlZCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8TG9hZFJlc291cmNl
Q2FsbGJhY2s+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPExv
YWRSZXNvdXJjZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGVu
YWJsZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwCmluZGV4IDcwZjA4ZDIuLmE0M2EzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRGF0YS5nZXQoKTsgfQogICAgIHZvaWQgc2V0U291cmNlRGF0YShzdGQ6OnVuaXF1ZV9w
dHI8UnVsZVNvdXJjZURhdGFMaXN0Pik7CiAgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VEYXRhICE9IG51bGxwdHI7IH0KLSAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkKSBjb25zdDsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhQXQo
dW5zaWduZWQpIGNvbnN0OwogCiBwcml2YXRlOgogCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBQ
YXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKHN0ZDo6dW5pcXVlX3B0cjxSdWxlU291cmNl
RGF0YUxpc3Q+IHNvdXJjZUQKICAgICBmbGF0dGVuU291cmNlRGF0YShzb3VyY2VEYXRhLmdldCgp
LCBtX3NvdXJjZURhdGEuZ2V0KCkpOwogfQogCi1QYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVT
b3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHls
ZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlm
ICghaGFzU291cmNlRGF0YSgpIHx8IGluZGV4ID49IG1fc291cmNlRGF0YS0+c2l6ZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0NCw3ICsxNDQsNyBAQCBlbnVtIE1lZGlhTGlzdFNv
dXJjZSB7CiAgICAgTWVkaWFMaXN0U291cmNlSW1wb3J0UnVsZQogfTsKIAotc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIFZlY3RvcjxzaXplX3Q+KiBsaW5l
RW5kaW5ncykKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VS
YW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIFZl
Y3RvcjxzaXplX3Q+KiBsaW5lRW5kaW5ncykKIHsKICAgICBpZiAoIWxpbmVFbmRpbmdzKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdl
T2JqZWN0KAogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhPiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1l
ZGlhTGlzdCogbWVkaWEsIE1lZGlhTGlzdFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U01lZGlhPiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1lZGlhTGlzdCogbWVkaWEsIE1lZGlhTGlz
dFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewogICAg
IC8vIE1ha2UgY2VydGFpbiBjb21waWxlcnMgaGFwcHkgYnkgaW5pdGlhbGl6aW5nIHxzb3VyY2V8
IHVwLWZyb250LgogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE6OlNvdXJj
ZSBzb3VyY2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6Oklu
bGluZVNoZWV0OwpAQCAtMTc4LDE4ICsxNzgsMTkgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChjb25zdCBNZWQK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTTWVkaWE+IG1lZGlhT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NNZWRpYTo6Y3JlYXRlKCkKKyAgICBhdXRvIG1lZGlhT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NNZWRpYTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRleHQobWVkaWEtPm1l
ZGlhVGV4dCgpKQotICAgICAgICAuc2V0U291cmNlKHNvdXJjZSk7CisgICAgICAgIC5zZXRTb3Vy
Y2Uoc291cmNlKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKCFzb3VyY2VVUkwuaXNF
bXB0eSgpKSB7CiAgICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTb3VyY2VVUkwoc291cmNlVVJMKTsK
ICAgICAgICAgbWVkaWFPYmplY3QtPnNldFNvdXJjZUxpbmUobWVkaWEtPnF1ZXJpZXMoKS0+bGFz
dExpbmUoKSk7CiAgICAgfQotICAgIHJldHVybiBtZWRpYU9iamVjdC5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIFdURjo6bW92ZShtZWRpYU9iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCitzdGF0
aWMgUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQpCiB7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTIwMiwxMCArMjAzLDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NT
U1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgbGlzdFJ1bGVzLmFwcGVuZChpdGVtKTsKICAgICB9Ci0gICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUobGlzdCk7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCitzdGF0
aWMgUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiB7CiAg
ICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIyMiw3ICsyMjMsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBy
dWxlKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0
Q2hhaW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NN
ZWRpYT4qIG1lZGlhQXJyYXkpCitzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVs
ZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4mIG1lZGlh
QXJyYXkpCiB7CiAgICAgTWVkaWFMaXN0KiBtZWRpYUxpc3Q7CiAgICAgQ1NTUnVsZSogcGFyZW50
UnVsZSA9IHJ1bGU7CkBAIC0yNTAsNyArMjUxLDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlz
dENoYWluKENTU1J1bGUqIHJ1bGUsIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MK
ICAgICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwogCiAgICAgICAgIGlmIChtZWRpYUxpc3QgJiYg
bWVkaWFMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1lZGlhQXJyYXktPmFkZEl0ZW0oYnVp
bGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIGlzTWVkaWFSdWxlID8gTWVkaWFMaXN0U291cmNlTWVk
aWFSdWxlIDogTWVkaWFMaXN0U291cmNlSW1wb3J0UnVsZSwgc291cmNlVVJMKSk7CisgICAgICAg
ICAgICBtZWRpYUFycmF5LmFkZEl0ZW0oYnVpbGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIGlzTWVk
aWFSdWxlID8gTWVkaWFMaXN0U291cmNlTWVkaWFSdWxlIDogTWVkaWFMaXN0U291cmNlSW1wb3J0
UnVsZSwgc291cmNlVVJMKSk7CiAKICAgICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUo
KSkKICAgICAgICAgICAgIHBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCk7CkBA
IC0yNjYsNyArMjY3LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUq
IHJ1bGUsIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuYmFzZVVSTCgpOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VV
UkwgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFBcnJheS0+YWRkSXRlbShidWlsZE1l
ZGlhT2JqZWN0KG1lZGlhTGlzdCwgc3R5bGVTaGVldC0+b3duZXJOb2RlKCkgPyBNZWRpYUxpc3RT
b3VyY2VMaW5rZWRTaGVldCA6IE1lZGlhTGlzdFNvdXJjZUlubGluZVNoZWV0LCBzb3VyY2VVUkwp
KTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFBcnJheS5hZGRJdGVtKGJ1aWxkTWVkaWFPYmpl
Y3QobWVkaWFMaXN0LCBzdHlsZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxp
bmtlZFNoZWV0IDogTWVkaWFMaXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwYXJlbnRSdWxlID0gc3R5bGVTaGVldC0+
b3duZXJSdWxlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFJ1bGUpCkBAIC0yODIsMTIg
KzI4MywxMiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlcj4gY3JlYXRlQ1NTUGFy
c2VyKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDU1NQ
YXJzZXI+KGRvY3VtZW50ID8gQ1NTUGFyc2VyQ29udGV4dCgqZG9jdW1lbnQpIDogc3RyaWN0Q1NT
UGFyc2VyQ29udGV4dCgpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OmNyZWF0ZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFzc1JlZlB0
cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50
U3R5bGVTaGVldCkKK1JlZjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShj
b25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+
JiYgc3R5bGUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZShzdHlsZUlkLCBzdHlsZSwgcGFyZW50
U3R5bGVTaGVldCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclN0eWxlKHN0
eWxlSWQsIFdURjo6bW92ZShzdHlsZSksIHBhcmVudFN0eWxlU2hlZXQpKTsKIH0KIAotSW5zcGVj
dG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQ
YXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0KQorSW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0
IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4mJiBz
dHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCkKICAgICA6IG1fc3R5
bGVJZChzdHlsZUlkKQogICAgICwgbV9zdHlsZShzdHlsZSkKICAgICAsIG1fcGFyZW50U3R5bGVT
aGVldChwYXJlbnRTdHlsZVNoZWV0KQpAQCAtMzAwLDkgKzMwMSw5IEBAIEluc3BlY3RvclN0eWxl
Ojp+SW5zcGVjdG9yU3R5bGUoKQogewogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkg
Y29uc3QKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0
b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJlc3VsdCA9IHN0eWxlV2l0aFByb3BlcnRp
ZXMoKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0
ID0gc3R5bGVXaXRoUHJvcGVydGllcygpOwogICAgIGlmICghbV9zdHlsZUlkLmlzRW1wdHkoKSkK
ICAgICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZUlkPigpKTsKIApAQCAtMzEzLDI0ICszMTQs
MjUgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHkKICAgICBpZiAoc291cmNlRGF0YSkKICAgICAg
ICAgcmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1
bGVCb2R5UmFuZ2UsIG1fcGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKS5nZXQoKSkpOwog
Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1
bHQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gSW5zcGVjdG9yU3R5
bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1JlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQ
cm9wZXJ0eT4+IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNv
bnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gcmVzdWx0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRl
ZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHls
ZVByb3BlcnR5Pjo6Y3JlYXRlKCk7CiAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+
IHByb3BlcnRpZXM7CiAgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKIAog
ICAgIGZvciAoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVyYXRvciBpdCA9IHBy
b3BlcnRpZXMuYmVnaW4oKSwgaXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBpdCAhPSBpdEVuZDsg
KytpdCkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50
cnkgPSBpdC0+c291cmNlRGF0YTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShwcm9wZXJ0eUVudHJ5Lm5hbWUpCi0g
ICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSk7Ci0gICAgICAgIHJlc3Vs
dC0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOworICAgICAgICAgICAgLnNldFZhbHVlKHByb3Bl
cnR5RW50cnkudmFsdWUpCisgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICByZXN1bHQt
PmFkZEl0ZW0oV1RGOjptb3ZlKGVudHJ5KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCiAvLyBUaGlzIG1l
dGhvZCBkb2VzIHRoZSBmb2xsb3dpbmcgcHJlcHJvY2Vzc2luZyBvZiB8cHJvcGVydHlUZXh0fCB3
aXRoIHxvdmVyd3JpdGV8ID09IGZhbHNlIGFuZCB8aW5kZXh8IHBhc3QgdGhlIGxhc3QgYWN0aXZl
IHByb3BlcnR5OgpAQCAtNTAzLDEzICs1MDUsMTMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6cG9w
dWxhdGVBbGxQcm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWwK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0
CitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6
OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIFZlY3RvcjxJbnNwZWN0b3JTdHls
ZVByb3BlcnR5PiBwcm9wZXJ0aWVzOwogICAgIHBvcHVsYXRlQWxsUHJvcGVydGllcygmcHJvcGVy
dGllcyk7CiAKLSAgICBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eT4+IHByb3BlcnRpZXNPYmplY3QgPSBBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+PiBzaG9ydGhhbmRFbnRyaWVzID0gQXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgpOworICAg
IGF1dG8gcHJvcGVydGllc09iamVjdCA9IEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhhc2hT
ZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3RyaW5nIHByZXZpb3VzUHJpb3JpdHk7
CkBAIC01MzIsOSArNTM0LDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpCiAKICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgIC5zZXROYW1lKG5hbWUubG93ZXIoKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0
eUVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVl
KQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5h
ZGRJdGVtKHByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllc09iamVjdC0+YWRkSXRlbShwcm9w
ZXJ0eS5jb3B5UmVmKCkpOwogCiAgICAgICAgIC8vIERlZmF1bHQgInBhcnNlZE9rIiA9PSB0cnVl
LgogICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkucGFyc2VkT2spCkBAIC02MDAsMTAgKzYwMywx
MSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aQogICAgICAgICAgICAgICAgIGlmICghc2hvcnRo
YW5kLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU2hvcnRoYW5k
cy5jb250YWlucyhzaG9ydGhhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFNo
b3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT4gZW50cnkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRo
YW5kRW50cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUo
c2hvcnRoYW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9ydGhh
bmRWYWx1ZShzaG9ydGhhbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZEVu
dHJpZXMtPmFkZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuc2V0VmFsdWUoc2hvcnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRo
YW5kRW50cmllcy0+YWRkSXRlbShXVEY6Om1vdmUoZW50cnkpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTYxNSwxMiArNjE5LDEy
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpCiAgICAgfQogCiAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRDc3NQcm9w
ZXJ0aWVzKHByb3BlcnRpZXNPYmplY3QucmVsZWFzZSgpKQotICAgICAgICAuc2V0U2hvcnRoYW5k
RW50cmllcyhzaG9ydGhhbmRFbnRyaWVzLnJlbGVhc2UoKSkKKyAgICAgICAgLnNldENzc1Byb3Bl
cnRpZXMoV1RGOjptb3ZlKHByb3BlcnRpZXNPYmplY3QpKQorICAgICAgICAuc2V0U2hvcnRoYW5k
RW50cmllcyhXVEY6Om1vdmUoc2hvcnRoYW5kRW50cmllcykpCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlOjpleHRy
YWN0U291cmNlRGF0YSgpIGNvbnN0CitSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3Rv
clN0eWxlOjpleHRyYWN0U291cmNlRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhcmVudFN0
eWxlU2hlZXQgfHwgIW1fcGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzQ5LDkgKzc1Myw5IEBAIE5ld0xpbmVBbmRX
aGl0ZXNwYWNlJiBJbnNwZWN0b3JTdHlsZTo6bmV3TGluZUFuZFdoaXRlc3BhY2VEZWxpbWl0ZXJz
KCkgY29uc3QKICAgICByZXR1cm4gbV9mb3JtYXQ7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
U3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIp
CitSZWY8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NT
U3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVu
ZXIqIGxpc3RlbmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVT
aGVldChwYWdlQWdlbnQsIGlkLCBwYWdlU3R5bGVTaGVldCwgb3JpZ2luLCBkb2N1bWVudFVSTCwg
bGlzdGVuZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0
KHBhZ2VBZ2VudCwgaWQsIFdURjo6bW92ZShwYWdlU3R5bGVTaGVldCksIG9yaWdpbiwgZG9jdW1l
bnRVUkwsIGxpc3RlbmVyKSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNzYyLDEwICs3NjYsMTAgQEAg
U3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUluc3BlY3Rv
clN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0
eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3Bl
Y3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VT
dHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAg
OiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQotICAgICwgbV9wYWdlU3R5
bGVTaGVldChwYWdlU3R5bGVTaGVldCkKKyAgICAsIG1fcGFnZVN0eWxlU2hlZXQoV1RGOjptb3Zl
KHBhZ2VTdHlsZVNoZWV0KSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAsIG1fZG9jdW1l
bnRVUkwoZG9jdW1lbnRVUkwpCiAgICAgLCBtX2lzUmV2YWxpZGF0aW5nKGZhbHNlKQpAQCAtOTUz
LDcgKzk1Nyw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUZvcklk
KGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKIAogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFn
ZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCkBAIC05NjEsMTkgKzk2NSwyMCBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aQogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NS
dWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qoc3R5bGVTaGVldCk7CiAKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gcmVzdWx0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJl
c3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKLSAgICAgICAgLnNldFJ1bGVzKGJ1
aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpOworICAgICAgICAuc2V0UnVs
ZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgpKSkKKyAgICAgICAgLnJl
bGVhc2UoKTsKIAogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKICAgICBib29sIHN1Y2Nlc3Mg
PSBnZXRUZXh0KCZzdHlsZVNoZWV0VGV4dCk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJl
c3VsdC0+c2V0VGV4dChzdHlsZVNoZWV0VGV4dCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCkKK1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKQEAgLTk5
MSwzMCArOTk2LDMxIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpiCiAgICAgICAgIC5yZWxlYXNl
KCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxwZXIoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvclRleHQsIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvcikKK3N0YXRpYyBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvckhl
bHBlcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVj
dG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
PiBpbnNwZWN0b3JTZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0
b3I6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRUZXh0KHNlbGVjdG9yVGV4dCk7CisgICAgYXV0byBp
bnNwZWN0b3JTZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6
OmNyZWF0ZSgpCisgICAgICAgIC5zZXRUZXh0KHNlbGVjdG9yVGV4dCkKKyAgICAgICAgLnJlbGVh
c2UoKTsKIAogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkgPSBzZWxlY3Rv
ci5zdGF0aWNTcGVjaWZpY2l0eShvayk7CiAKICAgICBpZiAob2spIHsKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+IHR1cGxlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gdHVwbGUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICAgICAgdHVwbGUtPmFkZEl0
ZW0oc3RhdGljX2Nhc3Q8aW50Pigoc3BlY2lmaWNpdHkgJiBDU1NTZWxlY3Rvcjo6aWRNYXNrKSA+
PiAxNikpOwogICAgICAgICB0dXBsZS0+YWRkSXRlbShzdGF0aWNfY2FzdDxpbnQ+KChzcGVjaWZp
Y2l0eSAmIENTU1NlbGVjdG9yOjpjbGFzc01hc2spID4+IDgpKTsKICAgICAgICAgdHVwbGUtPmFk
ZEl0ZW0oc3RhdGljX2Nhc3Q8aW50PihzcGVjaWZpY2l0eSAmIENTU1NlbGVjdG9yOjplbGVtZW50
TWFzaykpOwotICAgICAgICBpbnNwZWN0b3JTZWxlY3Rvci0+c2V0U3BlY2lmaWNpdHkodHVwbGUu
cmVsZWFzZSgpKTsKKyAgICAgICAgaW5zcGVjdG9yU2VsZWN0b3ItPnNldFNwZWNpZmljaXR5KFdU
Rjo6bW92ZSh0dXBsZSkpOwogICAgIH0KIAotICAgIHJldHVybiBpbnNwZWN0b3JTZWxlY3Rvci5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShpbnNwZWN0b3JTZWxlY3Rvcik7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENT
U1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29u
c3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCitzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBz
ZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENTU1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBj
b25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxp
c3QpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEpTQzo6WWFycjo6UmVn
dWxhckV4cHJlc3Npb24sIGNvbW1lbnQsICgiL1xcKlteXSo/XFwqLyIsIFRleHRDYXNlU2Vuc2l0
aXZlLCBKU0M6OllhcnI6Ok11bHRpbGluZUVuYWJsZWQpKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rv
cj46OmNyZWF0ZSgpOwogICAgIGNvbnN0IFNlbGVjdG9yUmFuZ2VMaXN0JiByYW5nZXMgPSBzb3Vy
Y2VEYXRhLT5zZWxlY3RvclJhbmdlczsKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ig
PSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJh
bmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKQEAgLTEwMjcsMTUgKzEwMzMsMTUgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTZWxlY3QKIAogICAgICAgICBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzZWxlY3Rvcik7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK1JlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWls
ZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBy
ZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0b3JUZXh0
KCksICpzZWxlY3Rvcik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0
b3JMaXN0KENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMDUz
LDI2ICsxMDU5LDI3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxl
Y3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqCiAgICAgICAgIGZvciAoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAgICAgICAgICAg
ICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxlY3RvcikpOwog
ICAgIH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+
IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUo
KQorICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxp
c3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWxlY3RvcnMoc2VsZWN0b3JzLnJlbGVhc2UoKSkK
ICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFu
Z2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygpLmdldCgp
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShy
ZXN1bHQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSog
cnVsZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAg
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYg
KCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlbGVjdG9yTGlz
dChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlKSkKICAgICAgICAgLnNldFNvdXJjZUxp
bmUocnVsZS0+c3R5bGVSdWxlKCkuc291cmNlTGluZSgpKQogICAgICAgICAuc2V0T3JpZ2luKG1f
b3JpZ2luKQotICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5
bGUoKSkpOworICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5
bGUoKSkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAvLyAic291cmNlVVJMIiBpcyBwcmVz
ZW50IG9ubHkgZm9yIHJlZ3VsYXIgcnVsZXMsIG90aGVyd2lzZSAib3JpZ2luIiBzaG91bGQgYmUg
dXNlZCBpbiB0aGUgZnJvbnRlbmQuCiAgICAgaWYgKG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcikKQEAgLTEwODQsMTYgKzEwOTEs
MTYgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm8KICAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVs
ZUlkKGlkLmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJ
ZD4oKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTTWVkaWE+PiBtZWRpYUFycmF5ID0gQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NNZWRpYT46OmNyZWF0ZSgpOworICAgIGF1dG8gbWVkaWFBcnJheSA9IEFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE+OjpjcmVhdGUoKTsKIAogICAgIGZpbGxNZWRp
YUxpc3RDaGFpbihydWxlLCBtZWRpYUFycmF5LmdldCgpKTsKICAgICBpZiAobWVkaWFBcnJheS0+
bGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0TWVkaWEobWVkaWFBcnJheS5yZWxlYXNlKCkp
OworICAgICAgICByZXN1bHQtPnNldE1lZGlhKFdURjo6bW92ZShtZWRpYUFycmF5KSk7CiAKLSAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7
CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKICAg
ICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMTE5LDcgKzExMjYsNyBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0RgogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCiBib29sIElu
c3BlY3RvclN0eWxlU2hlZXQ6OnNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJiBlYykK
QEAgLTExNjQsNyArMTE3MSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJv
cGVydHkoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCB1bnNpZ25lZCBwcm9wCiAgICAgYm9vbCBz
dWNjZXNzID0gaW5zcGVjdG9yU3R5bGUtPnRvZ2dsZVByb3BlcnR5KHByb3BlcnR5SW5kZXgsIGRp
c2FibGUsIGVjKTsKICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICBpZiAoZGlzYWJsZSkKLSAg
ICAgICAgICAgIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUpOworICAgICAg
ICAgICAgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShpbnNwZWN0b3JTdHlsZS5jb3B5UmVmKCkpOwog
ICAgICAgICBlbHNlIGlmICghaW5zcGVjdG9yU3R5bGUtPmhhc0Rpc2FibGVkUHJvcGVydGllcygp
KQogICAgICAgICAgICAgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUtPmNzc1N0
eWxlKCkpOwogICAgICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKQEAgLTExOTUsNyArMTIw
Miw3IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCkK
ICAgICAgICAgbV9saXN0ZW5lci0+c3R5bGVTaGVldENoYW5nZWQodGhpcyk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxl
Rm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQorUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNT
U0lkJiBpZCkKIHsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQo
aWQpOwogICAgIGlmICghc3R5bGUpCkBAIC0xMjA3LDcgKzEyMTQsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNv
bnN0IEluc3BlYwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5
bGVTaGVldDo6cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGlu
c3BlY3RvclN0eWxlKQordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3Rv
clN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4mJiBpbnNwZWN0b3JTdHlsZSkKIHsKICAgICBt
X2luc3BlY3RvclN0eWxlcy5zZXQoaW5zcGVjdG9yU3R5bGUtPmNzc1N0eWxlKCksIGluc3BlY3Rv
clN0eWxlKTsKIH0KQEAgLTE0MTcsMjMgKzE0MjQsMjMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWls
ZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQorUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxp
c3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFydWxlTGlzdCkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0
KTsKIAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcmVmUnVsZUxpc3QgPSBydWxlTGlzdDsKICAg
ICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7Ci0gICAgY29sbGVjdEZsYXRSdWxlcyhyZWZSdWxl
TGlzdCwgJnJ1bGVzKTsKKyAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURjo6bW92ZShyZWZSdWxlTGlz
dCksICZydWxlcyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JSdWxlKHJ1bGVzLmF0KGkpLmdldCgpKSk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5
bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlz
dCwgQ1NTU3R5bGVSdWxlVmVjdG9yKiByZXN1bHQpCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmNvbGxlY3RGbGF0UnVsZXMoUmVmUHRyPENTU1J1bGVMaXN0PiYmIHJ1bGVMaXN0LCBDU1NTdHls
ZVJ1bGVWZWN0b3IqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAgICAgICByZXR1
cm47CkBAIC0xNDQ2LDE5ICsxNDUzLDE5IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29s
bGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCwgQ1NTCiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjaGlsZFJ1bGVMaXN0
ID0gYXNDU1NSdWxlTGlzdChydWxlKTsKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVMaXN0KQot
ICAgICAgICAgICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoY2hpbGRSdWxlTGlzdCwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURjo6bW92ZShjaGlsZFJ1bGVMaXN0
KSwgcmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlk
LCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcm
IGlkLCBSZWZQdHI8RWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFn
ZW50LCBpZCwgZWxlbWVudCwgb3JpZ2luLCBsaXN0ZW5lcikpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShwYWdlQWdlbnQsIGlkLCBX
VEY6Om1vdmUoZWxlbWVudCksIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUo
SW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9y
UGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYm
IGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFn
ZW50LCBpZCwgbnVsbHB0ciwgb3JpZ2luLCAiIiwgbGlzdGVuZXIpCi0gICAgLCBtX2VsZW1lbnQo
ZWxlbWVudCkKKyAgICAsIG1fZWxlbWVudChXVEY6Om1vdmUoZWxlbWVudCkpCiAgICAgLCBtX3J1
bGVTb3VyY2VEYXRhKG51bGxwdHIpCiAgICAgLCBtX2lzU3R5bGVUZXh0VmFsaWQoZmFsc2UpCiB7
CkBAIC0xNTMxLDEwICsxNTM4LDEwIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU6Omluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQorUmVmUHRy
PEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3Bl
Y3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQogewogICAgIEFTU0VSVF9V
TlVTRUQoaWQsICFpZC5vcmRpbmFsKCkpOwotICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlOwor
ICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlLmNvcHlSZWYoKTsKIH0KIAogQ1NTU3R5bGVEZWNs
YXJhdGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbmxpbmVTdHlsZSgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
aAppbmRleCBmZGJmNzhkLi5kZWNkMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTY0LDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KIAotICAgIGV4cGxpY2l0IEluc3BlY3RvckNTU0lkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCF2YWx1ZS0+Z2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJZCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IG9yZGluYWxWYWx1ZSA9IHZhbHVlLT5nZXQoIm9yZGluYWwiKTsKLSAgICAgICAgaWYg
KCFvcmRpbmFsVmFsdWUgfHwgIW9yZGluYWxWYWx1ZS0+YXNJbnRlZ2VyKG1fb3JkaW5hbCkpCisg
ICAgICAgIGludCBvcmRpbmFsVmFsdWU7CisgICAgICAgIGlmICghdmFsdWUtPmdldEludGVnZXIo
Im9yZGluYWwiLCBvcmRpbmFsVmFsdWUpKQogICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSAi
IjsKICAgICB9CiAKQEAgLTg3LDE1ICs4NiwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJRCB0eXBl
IGlzIGVpdGhlciBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQgb3IgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlSWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSUQ+
Ci0gICAgUGFzc1JlZlB0cjxJRD4gYXNQcm90b2NvbFZhbHVlKCkgY29uc3QKKyAgICBSZWZQdHI8
SUQ+IGFzUHJvdG9jb2xWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgUmVmUHRyPElEPiByZXN1
bHQgPSBJRDo6Y3JlYXRlKCkKKyAgICAgICAgcmV0dXJuIElEOjpjcmVhdGUoKQogICAgICAgICAg
ICAgLnNldFN0eWxlU2hlZXRJZChtX3N0eWxlU2hlZXRJZCkKLSAgICAgICAgICAgIC5zZXRPcmRp
bmFsKG1fb3JkaW5hbCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgICAg
ICAgICAgLnNldE9yZGluYWwobV9vcmRpbmFsKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAg
ICB9CiAKIHByaXZhdGU6CkBAIC0xMzYsMTIgKzEzNSwxMiBAQCBzdHJ1Y3QgSW5zcGVjdG9yU3R5
bGVQcm9wZXJ0eSB7CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlIGZpbmFsIDogcHVibGljIFJlZkNv
dW50ZWQ8SW5zcGVjdG9yU3R5bGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4gY3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNz
UmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBw
YXJlbnRTdHlsZVNoZWV0KTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlPiBjcmVhdGUo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9u
PiYmLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKICAgICB+SW5zcGVj
dG9yU3R5bGUoKTsKIAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiBidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHls
ZSgpIGNvbnN0OworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdDsKICAgICBib29sIGhhc0Rp
c2FibGVkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuICFtX2Rpc2FibGVkUHJvcGVydGllcy5p
c0VtcHR5KCk7IH0KICAgICBib29sIHNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleCwgYm9vbCBk
aXNhYmxlLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNTAsMTUgKzE0OSwxNSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0
ZToKLSAgICBJbnNwZWN0b3JTdHlsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFz
c1JlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldCk7CisgICAgSW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NT
SWQmIHN0eWxlSWQsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiYmLCBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2Ug
YWxpYXNlcyBhbmQgdXBkYXRlIGFsbCB0aGUgY3VycmVudCBjYWxsIHNpdGVzIHRvIHVzZSB0aGUg
bmV3IHB1YmxpYyBtZXRob2RzLgogICAgIGJvb2wgc3R5bGVUZXh0KFN0cmluZyogcmVzdWx0KSBj
b25zdCB7IHJldHVybiBnZXRUZXh0KHJlc3VsdCk7IH0KICAgICBib29sIGFwcGx5U3R5bGVUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkgeyBFeGNlcHRpb25Db2RlIGVjID0gMDsgcmV0dXJuIHNldFRl
eHQodGV4dCwgZWMpOyB9CiAKICAgICBib29sIHBvcHVsYXRlQWxsUHJvcGVydGllcyhWZWN0b3I8
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBzdHlsZVdpdGhQcm9wZXJ0aWVzKCkg
Y29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gZXh0cmFjdFNvdXJjZURh
dGEoKSBjb25zdDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4g
c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0OworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gZXh0cmFjdFNvdXJjZURhdGEoKSBjb25zdDsKICAgICBTdHJpbmcgc2hvcnRoYW5kVmFsdWUo
Y29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CiAgICAgU3RyaW5nIHNob3J0
aGFuZFByaW9yaXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0OwogICAg
IFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFu
ZFByb3BlcnR5KSBjb25zdDsKQEAgLTE4Miw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPEluc3BlY3Rv
clN0eWxlPj4gSW5zcGVjdG9yU3R5bGVNYXA7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYg
aWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVS
TCwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0
ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogICAgIHN0
YXRpYyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCk7
CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0xOTcsMTAgKzE5Niwx
MCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGRlbGV0ZVJ1bGUoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlRm9ySWQo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVl
dCgpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShD
U1NTdHlsZVJ1bGUqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBidWls
ZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
KTsKICAgICBib29sIHNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYsIGNvbnN0IFN0
cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBz
ZXRQcm9wZXJ0eVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUlu
ZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9sZFByb3Bl
cnR5VGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgdG9nZ2xlUHJvcGVydHkoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIEV4
Y2VwdGlvbkNvZGUmKTsKQEAgLTIxMywxNyArMjEyLDE3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0
b3JDU1NJZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVy
biBydWxlT3JTdHlsZUlkKHN0eWxlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5
bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRy
PENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7
CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJp
bmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50
VVJMLCBMaXN0ZW5lciopOwogCiAgICAgYm9vbCBjYW5CaW5kKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2Vy
QWdlbnQgJiYgbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luOjpVc2VyOyB9Ci0gICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5bGVJZChDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CisgICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5
bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAgICAgdmlydHVhbCBEb2N1bWVudCog
b3duZXJEb2N1bWVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7
CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9y
KENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJ
bmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBlbnN1cmVQYXJzZWREYXRhUmVhZHkoKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yU3R5bGU+IGluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5
bGU+IGluc3BlY3RvclN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOworICAgIHZpcnR1YWwgUmVmUHRyPEluc3Bl
Y3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0
eWxlPiYmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiopOwogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5z
cGVjdG9yU3R5bGUuCiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xh
cmF0aW9uKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMjMzLDcgKzIzMiw3
IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENTU1N0eWxlUnVsZT4+IENT
U1N0eWxlUnVsZVZlY3RvcjsKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGU7CiAKLSAg
ICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+LCBD
U1NTdHlsZVJ1bGVWZWN0b3IqIHJlc3VsdCk7CisgICAgc3RhdGljIHZvaWQgY29sbGVjdEZsYXRS
dWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+JiYsIENTU1N0eWxlUnVsZVZlY3RvciogcmVzdWx0KTsK
ICAgICBib29sIGNoZWNrUGFnZVN0eWxlU2hlZXQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IGJvb2wgZW5zdXJlVGV4dCgpIGNvbnN0OwogICAgIGJvb2wgZW5zdXJlU291cmNlRGF0YSgpOwpA
QCAtMjQzLDkgKzI0Miw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBvcmlnaW5hbFN0eWxlU2hlZXRU
ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICBib29sIHJlc291cmNlU3R5bGVTaGVldFRl
eHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgaW5saW5lU3R5bGVTaGVldFRleHQo
U3RyaW5nKiByZXN1bHQpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gYnVpbGRBcnJheUZv
clJ1bGVMaXN0KENTU1J1bGVMaXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1Nl
bGVjdG9yKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVj
dG9yTGlzdD4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4+IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCopOworICAgIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0PiBidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUq
KTsKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgU3RyaW5nIG1f
aWQ7CkBAIC0yNjEsMjEgKzI2MCwyMSBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGUgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwg
UGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVmUHRyPEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0
ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoaWQsICFp
ZC5vcmRpbmFsKCkpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNv
bnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwg
UmVmUHRyPEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
cnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IG92ZXJy
aWRlIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVy
biBtX3J1bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CiAg
ICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25z
dCBJbnNwZWN0b3JDU1NJZCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZW1lbWJlcklu
c3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4pIG92ZXJyaWRlIHsgfQorICAgIHZp
cnR1YWwgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IElu
c3BlY3RvckNTU0lkJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVj
dG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiYmKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIG92ZXJy
aWRlIHsgfQogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5zcGVjdG9y
U3R5bGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5jcHAKaW5kZXggYmQzMjc4ZS4uOWFiOGYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtMTk3LDkgKzE5
Nyw5IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nCiAKICAgICAvLyBVc2UgYW4gaW5kZXBlbmRl
bnQgc3RvcHdhdGNoIGZvciBjb25zb2xlLWluaXRpYXRlZCBwcm9maWxpbmcsIHNpbmNlIHRoZSB1
c2VyIHdpbGwgZXhwZWN0IGl0CiAgICAgLy8gdG8gYmUgcmVsYXRpdmUgdG8gd2hlbiB0aGVpciBj
b21tYW5kIHdhcyBpc3N1ZWQuCi0gICAgUmVmUHRyPFN0b3B3YXRjaD4gcHJvZmlsZXJTdG9wd2F0
Y2ggPSBTdG9wd2F0Y2g6OmNyZWF0ZSgpOworICAgIFJlZjxTdG9wd2F0Y2g+IHByb2ZpbGVyU3Rv
cHdhdGNoID0gU3RvcHdhdGNoOjpjcmVhdGUoKTsKICAgICBwcm9maWxlclN0b3B3YXRjaC0+c3Rh
cnQoKTsKLSAgICBzdGFydFByb2ZpbGluZyhleGVjLCB0aXRsZSwgcHJvZmlsZXJTdG9wd2F0Y2gu
cmVsZWFzZSgpKTsKKyAgICBzdGFydFByb2ZpbGluZyhleGVjLCB0aXRsZSwgV1RGOjptb3ZlKHBy
b2ZpbGVyU3RvcHdhdGNoKSk7CiAKICAgICBtX3BlbmRpbmdDb25zb2xlUHJvZmlsZVJlY29yZHMu
YXBwZW5kKGNyZWF0ZVJlY29yZEVudHJ5KFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29u
c29sZVByb2ZpbGVEYXRhKHRpdGxlKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpDb25zb2xlUHJvZmls
ZSwgdHJ1ZSwgZnJhbWVGcm9tRXhlY1N0YXRlKGV4ZWMpKSk7CiB9CkBAIC0yMTcsNyArMjE3LDcg
QEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BG
cm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSoKICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSB8
fCByZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTQzo6UHJvZmls
ZT4gcHJvZmlsZSA9IHN0b3BQcm9maWxpbmcoZXhlYywgdGl0bGUpOwogICAgICAgICAgICAgaWYg
KHByb2ZpbGUpCi0gICAgICAgICAgICAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRQ
cm9maWxlKHJlY29yZC5kYXRhLmdldCgpLCBwcm9maWxlKTsKKyAgICAgICAgICAgICAgICBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUocmVjb3JkLmRhdGEuZ2V0KCksIHByb2Zp
bGUuY29weVJlZigpKTsKIAogICAgICAgICAgICAgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShyZWNv
cmQpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSoKICAgICAg
ICAgICAgIGlmICghbV9lbmFibGVkRnJvbUZyb250ZW5kICYmIG1fcGVuZGluZ0NvbnNvbGVQcm9m
aWxlUmVjb3Jkcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaW50ZXJuYWxTdG9wKCk7CiAK
LSAgICAgICAgICAgIHJldHVybiBwcm9maWxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om1vdmUocHJvZmlsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY0NywxNyArNjQ3
LDE3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlIHRv
UHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwcnBSZWNvcmQsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQordm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKLSAgICBwcnBSZWNvcmQt
PnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZh
bHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKKyAgICByZWNvcmQtPnNldFN0cmluZygidHlwZSIsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkp
KTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVF
dmVudD4gcmVjb3JkID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KHBycFJlY29yZCk7CisgICAgYXV0byByZWNv
cmRPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpU
aW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGOjptb3ZlKHJlY29yZCkpOwogCiAgICAgaWYg
KG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKQotICAgICAgICBzZW5kRXZlbnQocmVjb3JkLnJlbGVh
c2UoKSk7CisgICAgICAgIHNlbmRFdmVudChXVEY6Om1vdmUocmVjb3JkT2JqZWN0KSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHBhcmVudCA9IG1fcmVj
b3JkU3RhY2subGFzdCgpOwotICAgICAgICBwYXJlbnQuY2hpbGRyZW4tPnB1c2hPYmplY3QocmVj
b3JkLnJlbGVhc2UoKSk7CisgICAgICAgIHBhcmVudC5jaGlsZHJlbi0+cHVzaE9iamVjdChXVEY6
Om1vdmUocmVjb3JkKSk7CiAgICAgfQogfQogCkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5l
UmVjb3JkRW50cnkmIGUKICAgICBlbnRyeS5yZWNvcmQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
ImRhdGEiKSwgZW50cnkuZGF0YSk7CiAgICAgZW50cnkucmVjb3JkLT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImNoaWxkcmVuIiksIGVudHJ5LmNoaWxkcmVuKTsKICAgICBlbnRyeS5yZWNvcmQtPnNl
dERvdWJsZShBU0NJSUxpdGVyYWwoImVuZFRpbWUiKSwgdGltZXN0YW1wKCkpOwotICAgIGFkZFJl
Y29yZFRvVGltZWxpbmUoZW50cnkucmVjb3JkLCBlbnRyeS50eXBlKTsKKyAgICBhZGRSZWNvcmRU
b1RpbWVsaW5lKGVudHJ5LnJlY29yZC5jb3B5UmVmKCksIGVudHJ5LnR5cGUpOwogfQogCiB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGlu
ZVJlY29yZFR5cGUgdHlwZSkKQEAgLTcwNSwzNCArNzA1LDM0IEBAIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3Jk
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxs
U3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7Ci0gICAgcmVjb3JkLT5zZXRPYmplY3Qo
ImRhdGEiLCBkYXRhKTsKLSAgICBzZXRGcmFtZUlkZW50aWZpZXIocmVjb3JkLmdldCgpLCBmcmFt
ZSk7Ci0gICAgYWRkUmVjb3JkVG9UaW1lbGluZShyZWNvcmQucmVsZWFzZSgpLCB0eXBlKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENh
bGxTdGFja0RlcHRoIDogMCk7CisgICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEiLCBXVEY6Om1v
dmUoZGF0YSkpOworICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7
CisgICAgYWRkUmVjb3JkVG9UaW1lbGluZShXVEY6Om1vdmUocmVjb3JkKSwgdHlwZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBldmVudCkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZXZlbnQpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5k
RGlzcGF0Y2hlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IHJ1bnRpbWVDYXN0
IGlzIGEgaGFjay4gV2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1lbGluZUV2ZW50
IGRpcmVjdGx5IG5vdy4KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6
OlRpbWVsaW5lRXZlbnQ+IHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoZXZlbnQpOwot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKHJlY29yZENoZWNrZWQucmVs
ZWFzZSgpKTsKKyAgICBhdXRvIHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGOjpt
b3ZlKGV2ZW50KSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQoV1RG
Ojptb3ZlKHJlY29yZENoZWNrZWQpKTsKIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGlt
ZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRy
eShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQorSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVh
dGVSZWNvcmRFbnRyeShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6
OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21h
eENhbGxTdGFja0RlcHRoIDogMCk7Ci0gICAgc2V0RnJhbWVJZGVudGlmaWVyKHJlY29yZC5nZXQo
KSwgZnJhbWUpOwotICAgIHJldHVybiBUaW1lbGluZVJlY29yZEVudHJ5KHJlY29yZC5yZWxlYXNl
KCksIGRhdGEsIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSwgdHlwZSk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmlj
UmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJlQ2FsbFN0YWNrID8gbV9tYXhDYWxsU3RhY2tEZXB0
aCA6IDApOworICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7Cisg
ICAgcmV0dXJuIFRpbWVsaW5lUmVjb3JkRW50cnkoV1RGOjptb3ZlKHJlY29yZCksIFdURjo6bW92
ZShkYXRhKSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxT
dGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3Vy
cmVudFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3Jk
VHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBw
dXNoQ3VycmVudFJlY29yZChjcmVhdGVSZWNvcmRFbnRyeShkYXRhLCB0eXBlLCBjYXB0dXJlQ2Fs
bFN0YWNrLCBmcmFtZSkpOworICAgIHB1c2hDdXJyZW50UmVjb3JkKGNyZWF0ZVJlY29yZEVudHJ5
KFdURjo6bW92ZShkYXRhKSwgdHlwZSwgY2FwdHVyZUNhbGxTdGFjaywgZnJhbWUpKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjbGVhclJlY29yZFN0YWNrKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IDM1
MmExZjUuLjNlOGUxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuaApAQCAtMjI0LDE5ICsyMjQsMTkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGludGVybmFsU3RvcCgpOwogICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKIAotICAgIHZvaWQg
c2VuZEV2ZW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KTsKLSAgICB2
b2lkIGFwcGVuZFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBk
YXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsK
LSAgICB2b2lkIHB1c2hDdXJyZW50UmVjb3JkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+LCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJh
bWUqKTsKKyAgICB2b2lkIHNlbmRFdmVudChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiYpOworICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFj
aywgRnJhbWUqKTsKKyAgICB2b2lkIHB1c2hDdXJyZW50UmVjb3JkKFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxs
U3RhY2ssIEZyYW1lKik7CiAgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChjb25zdCBUaW1lbGlu
ZVJlY29yZEVudHJ5JiByZWNvcmQpIHsgbV9yZWNvcmRTdGFjay5hcHBlbmQocmVjb3JkKTsgfQog
Ci0gICAgVGltZWxpbmVSZWNvcmRFbnRyeSBjcmVhdGVSZWNvcmRFbnRyeShQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wg
Y2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0
ZVJlY29yZEVudHJ5KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBkYXRhLCBU
aW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKIAogICAg
IHZvaWQgc2V0RnJhbWVJZGVudGlmaWVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiByZWNv
cmQsIEZyYW1lKik7CiAKICAgICB2b2lkIGRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGlt
ZWxpbmVSZWNvcmRFbnRyeSYpOwogICAgIHZvaWQgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRp
bWVsaW5lUmVjb3JkVHlwZSk7CiAKLSAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4sIFRpbWVsaW5lUmVjb3JkVHlwZSk7Cisg
ICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKICAgICB2b2lkIGNsZWFyUmVjb3JkU3RhY2so
KTsKIAogICAgIHZvaWQgbG9jYWxUb1BhZ2VRdWFkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IExheW91dFJlY3QmLCBGbG9hdFF1YWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4IDUyYThjMDcuLmNhNjllYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcApA
QCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2Nvbm5lY3RG
cm9tV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkCiAgICAgICAgIGVycm9y
ID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIgaXMgZ29uZSIpOwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdv
cmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbWVzc2FnZSkKK3ZvaWQgSW5z
cGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9y
LCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkK
IHsKICAgICBXb3JrZXJGcm9udGVuZENoYW5uZWwqIGNoYW5uZWwgPSBtX2lkVG9DaGFubmVsLmdl
dCh3b3JrZXJJZCk7CiAgICAgaWYgKGNoYW5uZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCmluZGV4IDM5YmU2ZDAuLjY4NjlkNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCkBAIC02
OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FuSW5zcGVjdFdvcmtlcnMo
RXJyb3JTdHJpbmcmLCBib29sKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3RU
b1dvcmtlcihFcnJvclN0cmluZyYsIGludCB3b3JrZXJJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGRpc2Nvbm5lY3RGcm9tV29ya2VyKEVycm9yU3RyaW5nJiwgaW50IHdvcmtlcklkKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmlu
ZyYsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9Xb3Jr
ZXIoRXJyb3JTdHJpbmcmLCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJpbmcmLCBib29sIHZhbHVlKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3Jr
UmVzb3VyY2VzRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291
cmNlc0RhdGEuY3BwCmluZGV4IGRlZDY1NGIuLmU0YTI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtNTEsMTcgKzUxLDE3
IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAot
UGFzc1JlZlB0cjxYSFJSZXBsYXlEYXRhPiBYSFJSZXBsYXlEYXRhOjpjcmVhdGUoY29uc3QgU3Ry
aW5nICZtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1E
YXRhPiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRl
Q3JlZGVudGlhbHMpCitSZWY8WEhSUmVwbGF5RGF0YT4gWEhSUmVwbGF5RGF0YTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyAmbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZv
cm1EYXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGlu
Y2x1ZGVDcmVkZW50aWFscykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhIUlJlcGxheURh
dGEobWV0aG9kLCB1cmwsIGFzeW5jLCBmb3JtRGF0YSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRp
YWxzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgWEhSUmVwbGF5RGF0YShtZXRob2QsIHVy
bCwgYXN5bmMsIFdURjo6bW92ZShmb3JtRGF0YSksIGhlYWRlcnMsIGluY2x1ZGVDcmVkZW50aWFs
cykpOwogfQogCiAKLVhIUlJlcGxheURhdGE6OlhIUlJlcGxheURhdGEoY29uc3QgU3RyaW5nICZt
ZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBm
b3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVu
dGlhbHMpCitYSFJSZXBsYXlEYXRhOjpYSFJSZXBsYXlEYXRhKGNvbnN0IFN0cmluZyAmbWV0aG9k
LCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1EYXRhPiYmIGZvcm1EYXRh
LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykK
ICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKICAgICAsIG1fdXJsKHVybCkKICAgICAsIG1fYXN5bmMo
YXN5bmMpCi0gICAgLCBtX2Zvcm1EYXRhKGZvcm1EYXRhKQorICAgICwgbV9mb3JtRGF0YShXVEY6
Om1vdmUoZm9ybURhdGEpKQogICAgICwgbV9oZWFkZXJzKGhlYWRlcnMpCiAgICAgLCBtX2luY2x1
ZGVDcmVkZW50aWFscyhpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oCmluZGV4IGMyMzY5NWQuLjUzOTM4ODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5o
CkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiAKIGNsYXNzIFhI
UlJlcGxheURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxYSFJSZXBsYXlEYXRhPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WEhSUmVwbGF5RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyAmbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwg
Y29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpOwor
ICAgIHN0YXRpYyBSZWY8WEhSUmVwbGF5RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmluZyAmbWV0aG9k
LCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYsIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKTsKIAogICAgIGNvbnN0
IFN0cmluZyYgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KICAgICBjb25zdCBV
UkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9o
ZWFkZXJzOyB9CiAgICAgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMoKSBjb25zdCB7IHJldHVybiBt
X2luY2x1ZGVDcmVkZW50aWFsczsgfQogcHJpdmF0ZToKLSAgICBYSFJSZXBsYXlEYXRhKGNvbnN0
IFN0cmluZyAmbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1E
YXRhPiwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlh
bHMpOworICAgIFhIUlJlcGxheURhdGEoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYs
IGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVh
ZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpOwogCiAgICAgU3RyaW5nIG1fbWV0aG9kOwog
ICAgIFVSTCBtX3VybDsKQEAgLTEwNywxMSArMTA3LDExIEBAIHB1YmxpYzoKICAgICAgICAgU3Ry
aW5nIHRleHRFbmNvZGluZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7
IH0KICAgICAgICAgdm9pZCBzZXRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgdGV4dEVu
Y29kaW5nTmFtZSkgeyBtX3RleHRFbmNvZGluZ05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lOyB9CiAK
LSAgICAgICAgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNvZGVyOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVjb2RlcihQYXNzUmVmUHRy
PFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIpIHsgbV9kZWNvZGVyID0gZGVjb2RlcjsgfQor
ICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVjb2Rlci5jb3B5UmVmKCk7IH0KKyAgICAgICAgdm9pZCBzZXREZWNvZGVyKFJlZlB0
cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiYmIGRlY29kZXIpIHsgbV9kZWNvZGVyID0gV1RGOjptb3Zl
KGRlY29kZXIpOyB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgICAgIHZvaWQgc2V0QnVmZmVyKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpIHsgbV9idWZmZXIgPSBidWZmZXI7IH0KKyAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIu
Y29weVJlZigpOyB9CisgICAgICAgIHZvaWQgc2V0QnVmZmVyKFJlZlB0cjxTaGFyZWRCdWZmZXI+
JiYgYnVmZmVyKSB7IG1fYnVmZmVyID0gV1RGOjptb3ZlKGJ1ZmZlcik7IH0KIAogICAgICAgICBD
YWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJl
c291cmNlOyB9CiAgICAgICAgIHZvaWQgc2V0Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlKSB7IG1fY2FjaGVkUmVzb3VyY2UgPSBjYWNoZWRSZXNvdXJjZTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNw
cAppbmRleCA4MTliZmRiLi43ZTI0MDRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKQEAgLTUyLDkgKzUyLDkgQEAgdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVj
b3JkKGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCkKK1JlZjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChkb3Vi
bGUgc3RhcnRUaW1lLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVjb3JkID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHJlY29yZC0+c2V0RG91YmxlKCJzdGFydFRpbWUiLCBzdGFydFRpbWUpOwogCiAgICAgaWYgKG1h
eENhbGxTdGFja0RlcHRoKSB7CkBAIC02MiwxODUgKzYyLDE4NSBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKGRv
dWJsZSBzdAogICAgICAgICBpZiAoc3RhY2tUcmFjZSAmJiBzdGFja1RyYWNlLT5zaXplKCkpCiAg
ICAgICAgICAgICByZWNvcmQtPnNldFZhbHVlKCJzdGFja1RyYWNlIiwgc3RhY2tUcmFjZS0+YnVp
bGRJbnNwZWN0b3JBcnJheSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlY29yZC5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShyZWNvcmQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVCYWNrZ3JvdW5kUmVjb3JkKGRv
dWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkTmFtZSkKK1JlZjxJbnNwZWN0b3JP
YmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQmFja2dyb3VuZFJlY29yZChkb3Vi
bGUgc3RhcnRUaW1lLCBjb25zdCBTdHJpbmcmIHRocmVhZE5hbWUpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVjb3JkID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIHJlY29yZC0+c2V0RG91YmxlKCJzdGFydFRpbWUiLCBzdGFydFRpbWUpOwogICAgIHJlY29y
ZC0+c2V0U3RyaW5nKCJ0aHJlYWQiLCB0aHJlYWROYW1lKTsKLSAgICByZXR1cm4gcmVjb3JkLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlY29yZCk7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdDRXZlbnREYXRh
KGNvbnN0IHNpemVfdCB1c2VkSGVhcFNpemVEZWx0YSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90IHVzZWRI
ZWFwU2l6ZURlbHRhKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIoInVzZWRIZWFw
U2l6ZURlbHRhIiwgdXNlZEhlYXBTaXplRGVsdGEpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNv
bnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpCitSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3Qg
U3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRh
LT5zZXRTdHJpbmcoInNjcmlwdE5hbWUiLCBzY3JpcHROYW1lKTsKICAgICBkYXRhLT5zZXRJbnRl
Z2VyKCJzY3JpcHRMaW5lIiwgc2NyaXB0TGluZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgp
OworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShj
b25zdCBTdHJpbmcmIHRpdGxlKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVDb25zb2xlUHJvZmlsZURhdGEoY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInRpdGxlIiwgdGl0bGUpOwotICAgIHJldHVy
biBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9i
ZVNhbXBsZURhdGEoY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25l
ZCBzYW1wbGVJZCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlv
biwgdW5zaWduZWQgc2FtcGxlSWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcihB
U0NJSUxpdGVyYWwoInByb2JlSWQiKSwgYWN0aW9uLmlkZW50aWZpZXIpOwogICAgIGRhdGEtPnNl
dEludGVnZXIoQVNDSUlMaXRlcmFsKCJzYW1wbGVJZCIpLCBzYW1wbGVJZCk7Ci0gICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50
RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50JiBldmVudCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZlbnREaXNwYXRjaERhdGEoY29uc3QgRXZlbnQm
IGV2ZW50KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygidHlwZSIsIGV2ZW50LnR5
cGUoKS5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBX
VEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1lckRhdGEoaW50IHRpbWVySWQpCitSZWY8
SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1l
ckRhdGEoaW50IHRpbWVySWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidGlt
ZXJJZCIsIHRpbWVySWQpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQg
dGltZW91dCwgYm9vbCBzaW5nbGVTaG90KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQgdGlt
ZW91dCwgYm9vbCBzaW5nbGVTaG90KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIo
InRpbWVySWQiLCB0aW1lcklkKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0aW1lb3V0IiwgdGlt
ZW91dCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigic2luZ2xlU2hvdCIsIHNpbmdsZVNob3QpOwot
ICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwgaW50IHJlYWR5
U3RhdGUpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICAgZGF0
YS0+c2V0SW50ZWdlcigicmVhZHlTdGF0ZSIsIHJlYWR5U3RhdGUpOwotICAgIHJldHVybiBkYXRh
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVYSFJMb2FkRGF0
YShjb25zdCBTdHJpbmcmIHVybCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwotICAgIHJldHVybiBkYXRhLnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlwdERh
dGEoY29uc3QgU3RyaW5nJiB1cmwsIGRvdWJsZSBsaW5lTnVtYmVyKQorUmVmPEluc3BlY3Rvck9i
amVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlwdERhdGEoY29u
c3QgU3RyaW5nJiB1cmwsIGRvdWJsZSBsaW5lTnVtYmVyKQogewotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEt
PnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJsaW5lTnVtYmVy
IiwgbGluZU51bWJlcik7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBX
VEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1l
U3RhbXBEYXRhKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5z
ZXRTdHJpbmcoIm1lc3NhZ2UiLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVl
c3REYXRhKGNvbnN0IFN0cmluZyYgdXJsKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwot
ICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YShjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIGRhdGEtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgICBkYXRh
LT5zZXRTdHJpbmcoInVybCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOwogICAgIGRhdGEtPnNl
dFN0cmluZygicmVxdWVzdE1ldGhvZCIsIHJlcXVlc3QuaHR0cE1ldGhvZCgpKTsKLSAgICByZXR1
cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVz
b3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICAg
ZGF0YS0+c2V0SW50ZWdlcigic3RhdHVzQ29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkp
OwogICAgIGRhdGEtPnNldFN0cmluZygibWltZVR5cGUiLCByZXNwb25zZS5taW1lVHlwZSgpKTsK
LSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBib29sIGRp
ZEZhaWwsIGRvdWJsZSBmaW5pc2hUaW1lKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZUZpbmlzaERhdGEoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGJvb2wgZGlkRmFpbCwgZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldEJv
b2xlYW4oImRpZEZhaWwiLCBkaWRGYWlsKTsKICAgICBpZiAoZmluaXNoVGltZSkKICAgICAgICAg
ZGF0YS0+c2V0RG91YmxlKCJuZXR3b3JrVGltZSIsIGZpbmlzaFRpbWUpOwotICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZl
UmVzb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKQorUmVmPElu
c3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZlUmVzb3Vy
Y2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKQogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIGRhdGEtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgICBkYXRhLT5z
ZXRJbnRlZ2VyKCJlbmNvZGVkRGF0YUxlbmd0aCIsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGRhdGEu
cmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUxheW91dERhdGEo
dW5zaWduZWQgZGlydHlPYmplY3RzLCB1bnNpZ25lZCB0b3RhbE9iamVjdHMsIGJvb2wgcGFydGlh
bExheW91dCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0
cywgYm9vbCBwYXJ0aWFsTGF5b3V0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIo
ImRpcnR5T2JqZWN0cyIsIGRpcnR5T2JqZWN0cyk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidG90
YWxPYmplY3RzIiwgdG90YWxPYmplY3RzKTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJwYXJ0aWFs
TGF5b3V0IiwgcGFydGlhbExheW91dCk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAg
IHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9Ci0gICAgCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3Qg
U3RyaW5nJiBpbWFnZVR5cGUpCisKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygiaW1hZ2VUeXBlIiwgaW1hZ2VUeXBlKTsK
LSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUpCitSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc2l6ZUltYWdlRGF0YShib29sIHNo
b3VsZENhY2hlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oImNhY2hlZCIsIHNo
b3VsZENhY2hlKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6
bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlTWFya0RhdGEoYm9vbCBpc01haW5GcmFtZSkKK1JlZjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTWFya0RhdGEoYm9vbCBpc01h
aW5GcmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJpc01haW5GcmFtZSIs
IGlzTWFpbkZyYW1lKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdU
Rjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YSh1bnNpZ25lZCBzdGFydExpbmUpCitS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhcnNlSFRN
TERhdGEodW5zaWduZWQgc3RhcnRMaW5lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVn
ZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQg
Y2FsbGJhY2tJZCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRhKGludCBjYWxsYmFja0lkKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IGRhdGEtPnNldEludGVnZXIoImlkIiwgY2FsbGJhY2tJZCk7Ci0gICAgcmV0dXJuIGRhdGEucmVs
ZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBjcmVhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKQEAg
LTI1NCwxNCArMjU0LDE0IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjcmVh
dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICBhcnJheS0+cHVzaERvdWJsZShxdWFk
LnAzKCkueSgpKTsKICAgICBhcnJheS0+cHVzaERvdWJsZShxdWFkLnA0KCkueCgpKTsKICAgICBh
cnJheS0+cHVzaERvdWJsZShxdWFkLnA0KCkueSgpKTsKLSAgICByZXR1cm4gYXJyYXkucmVsZWFz
ZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYXJyYXkpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIGRhdGEtPnNldEFycmF5KCJjbGlwIiwgY3JlYXRlUXVhZChxdWFkKSk7Ci0gICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKIHZvaWQg
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290KEluc3BlY3Rvck9iamVjdCog
ZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQpAQCAtMjY5LDIzICsyNjksMjQgQEAgdm9pZCBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yT2JqZWN0KiBk
YXRhLCBjb25zdCBGbG9hdFEKICAgICBkYXRhLT5zZXRBcnJheSgicm9vdCIsIGNyZWF0ZVF1YWQo
cXVhZCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVBy
b2ZpbGVOb2RlQ2FsbD4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9k
ZTo6Q2FsbCYgY2FsbCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxl
Tm9kZUNhbGw+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6UHJvZmlsZU5vZGU6OkNh
bGwmIGNhbGwpCiB7Ci0gICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5v
ZGVDYWxsPiByZXN1bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbDo6
Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNh
bGw6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGFydFRpbWUoY2FsbC5zdGFydFRpbWUoKSkKLSAg
ICAgICAgLnNldFRvdGFsVGltZShjYWxsLmVsYXBzZWRUaW1lKCkpOwotICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOworICAgICAgICAuc2V0VG90YWxUaW1lKGNhbGwuZWxhcHNlZFRpbWUoKSkK
KyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlRp
bWVsaW5lOjpDUFVQcm9maWxlTm9kZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQ
cm9maWxlTm9kZSogbm9kZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9m
aWxlTm9kZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9kZSogbm9k
ZSkKIHsKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BV
UHJvZmlsZU5vZGVDYWxsPj4gY2FsbHMgPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVs
aW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNhbGxzID0gUHJv
dG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPjo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChjb25zdCBKU0M6OlByb2ZpbGVOb2RlOjpDYWxsJiBjYWxsIDogbm9k
ZS0+Y2FsbHMoKSkKICAgICAgICAgY2FsbHMtPmFkZEl0ZW0oYnVpbGRJbnNwZWN0b3JPYmplY3Qo
Y2FsbCkpOwogCi0gICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+
IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU6OmNyZWF0ZSgpCisg
ICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlOjpjcmVh
dGUoKQogICAgICAgICAuc2V0SWQobm9kZS0+aWQoKSkKLSAgICAgICAgLnNldENhbGxzKGNhbGxz
LnJlbGVhc2UoKSk7CisgICAgICAgIC5zZXRDYWxscyhXVEY6Om1vdmUoY2FsbHMpKQorICAgICAg
ICAucmVsZWFzZSgpOwogCiAgICAgaWYgKCFub2RlLT5mdW5jdGlvbk5hbWUoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJlc3VsdC0+c2V0RnVuY3Rpb25OYW1lKG5vZGUtPmZ1bmN0aW9uTmFtZSgpKTsK
QEAgLTI5NywyOCArMjk4LDI3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpUaW1lbGlu
ZTo6Q1BVUHJvZmlsZU5vZGU+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KGNvbnN0CiAgICAgfQogCiAg
ICAgaWYgKCFub2RlLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+PiBjaGlsZHJl
biA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPjo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9j
b2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKFJl
ZlB0cjxKU0M6OlByb2ZpbGVOb2RlPiBwcm9maWxlTm9kZSA6IG5vZGUtPmNoaWxkcmVuKCkpCiAg
ICAgICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZEluc3BlY3Rvck9iamVjdChwcm9maWxl
Tm9kZS5nZXQoKSkpOwotICAgICAgICByZXN1bHQtPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRDaGlsZHJlbihXVEY6Om1vdmUoY2hpbGRyZW4pKTsKICAgICB9CiAK
LSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3Vs
dCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmls
ZT4gYnVpbGRQcm9maWxlSW5zcGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6UHJvZmlsZSogcHJvZmls
ZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlPiBidWlsZFByb2Zp
bGVJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlKiBwcm9maWxlKQogewotICAgIFJl
ZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4+
IHJvb3ROb2RlcyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2Zp
bGVOb2RlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByb290Tm9kZXMgPSBQcm90b2NvbDo6QXJyYXk8
UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOwogICAgIGZvciAo
UmVmUHRyPEpTQzo6UHJvZmlsZU5vZGU+IHByb2ZpbGVOb2RlIDogcHJvZmlsZS0+cm9vdE5vZGUo
KS0+Y2hpbGRyZW4oKSkKICAgICAgICAgcm9vdE5vZGVzLT5hZGRJdGVtKGJ1aWxkSW5zcGVjdG9y
T2JqZWN0KHByb2ZpbGVOb2RlLmdldCgpKSk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OlRpbWVs
aW5lOjpDUFVQcm9maWxlPiByZXN1bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU6
OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRSb290Tm9kZXMocm9vdE5vZGVzKTsKLQotICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVBy
b2ZpbGU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRSb290Tm9kZXMoV1RGOjptb3ZlKHJvb3ROb2Rl
cykpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjphcHBlbmRQcm9maWxlKEluc3BlY3Rvck9iamVjdCogZGF0YSwgUGFzc1JlZlB0cjxKU0M6OlBy
b2ZpbGU+IHByb2ZpbGUpCit2b2lkIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kUHJvZmls
ZShJbnNwZWN0b3JPYmplY3QqIGRhdGEsIFJlZlB0cjxKU0M6OlByb2ZpbGU+JiYgcHJvZmlsZSkK
IHsKICAgICBkYXRhLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInByb2ZpbGUiKSwgYnVpbGRQcm9m
aWxlSW5zcGVjdG9yT2JqZWN0KHByb2ZpbGUuZ2V0KCkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAppbmRleCBiYjViOWU4Li4wZWY1
NjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oCkBAIC01NSw3NCArNTUsNzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgVGltZWxpbmVSZWNvcmRGYWN0b3J5IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljUmVjb3Jk
KGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCk7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCYWNrZ3JvdW5k
UmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkKTsKKyAgICAgICAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1JlY29y
ZChkb3VibGUgc3RhcnRUaW1lLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpOworICAgICAgICBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCYWNrZ3JvdW5kUmVjb3Jk
KGRvdWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkKTsKIAotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR0NFdmVudERh
dGEoY29uc3Qgc2l6ZV90IHVzZWRIZWFwU2l6ZURlbHRhKTsKKyAgICAgICAgc3RhdGljIFJlZjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90
IHVzZWRIZWFwU2l6ZURlbHRhKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcm
IHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShjb25z
dCBTdHJpbmcmIHRpdGxlKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUs
IGludCBzY3JpcHRMaW5lKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlQ29uc29sZVByb2ZpbGVEYXRhKGNvbnN0IFN0cmluZyYgdGl0bGUpOwog
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVQcm9iZVNhbXBsZURhdGEoY29uc3QgSW5zcGVjdG9yOjpTY3JpcHRCcmVha3BvaW50QWN0
aW9uJiwgdW5zaWduZWQgc2FtcGxlSWQpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9iZVNhbXBsZURhdGEoY29uc3QgSW5zcGVjdG9yOjpT
Y3JpcHRCcmVha3BvaW50QWN0aW9uJiwgdW5zaWduZWQgc2FtcGxlSWQpOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmVudERp
c3BhdGNoRGF0YShjb25zdCBFdmVudCYpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmVudERpc3BhdGNoRGF0YShjb25zdCBFdmVudCYpOwog
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVHZW5lcmljVGltZXJEYXRhKGludCB0aW1lcklkKTsKKyAgICAgICAgc3RhdGljIFJlZjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGlt
ZXJJZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBi
b29sIHNpbmdsZVNob3QpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90KTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlWEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEoY29uc3QgU3Ry
aW5nJiB1cmwsIGludCByZWFkeVN0YXRlKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlWEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEoY29uc3QgU3Ry
aW5nJiB1cmwsIGludCByZWFkeVN0YXRlKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5n
JiB1cmwpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCk7CiAKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2YWx1YXRlU2NyaXB0
RGF0YShjb25zdCBTdHJpbmcmLCBkb3VibGUgbGluZU51bWJlcik7CisgICAgICAgIHN0YXRpYyBS
ZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShj
b25zdCBTdHJpbmcmLCBkb3VibGUgbGluZU51bWJlcik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVRpbWVTdGFtcERhdGEoY29u
c3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3QgU3RyaW5nJik7CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlU2Vu
ZFJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29u
c3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmKTsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlUmVjZWl2ZVJlc3BvbnNlRGF0YShjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZWNlaXZl
UmVzb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKTsKKyAgICAg
ICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVjZWl2ZVJl
c291cmNlRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgaW50IGxlbmd0aCk7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJl
c291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRGYWlsLCBk
b3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgYm9vbCBkaWRGYWlsLCBkb3VibGUgZmluaXNoVGltZSk7CiAKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUxheW91dERhdGEodW5z
aWduZWQgZGlydHlPYmplY3RzLCB1bnNpZ25lZCB0b3RhbE9iamVjdHMsIGJvb2wgcGFydGlhbExh
eW91dCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZUxheW91dERhdGEodW5zaWduZWQgZGlydHlPYmplY3RzLCB1bnNpZ25lZCB0b3RhbE9iamVj
dHMsIGJvb2wgcGFydGlhbExheW91dCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZURlY29kZUltYWdlRGF0YShjb25zdCBTdHJp
bmcmIGltYWdlVHlwZSk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZURlY29kZUltYWdlRGF0YShjb25zdCBTdHJpbmcmIGltYWdlVHlwZSk7CiAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZVJlc2l6ZUltYWdlRGF0YShib29sIHNob3VsZENhY2hlKTsKKyAgICAgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wg
c2hvdWxkQ2FjaGUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKTsKKyAgICAgICAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlTWFya0RhdGEoYm9v
bCBpc01haW5GcmFtZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVBhcnNlSFRNTERhdGEodW5zaWduZWQgc3RhcnRMaW5lKTsK
KyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUGFy
c2VIVE1MRGF0YSh1bnNpZ25lZCBzdGFydExpbmUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVBbmltYXRpb25GcmFtZURhdGEo
aW50IGNhbGxiYWNrSWQpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGVBbmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNrSWQpOwogCi0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQ
YWludERhdGEoY29uc3QgRmxvYXRRdWFkJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAog
ICAgICAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBh
cHBlbmRQcm9maWxlKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiwgUGFzc1JlZlB0cjxKU0M6
OlByb2ZpbGU+KTsKKyAgICAgICAgc3RhdGljIHZvaWQgYXBwZW5kUHJvZmlsZShJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCosIFJlZlB0cjxKU0M6OlByb2ZpbGU+JiYpOwogCiAjaWYgRU5BQkxF
KFdFQl9TT0NLRVRTKQotICAgICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVdlYlNvY2tldENyZWF0ZURhdGEodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKKyAg
ICAgICAgc3RhdGljIGlubGluZSBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0
ZVdlYlNvY2tldENyZWF0ZURhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKICAgICAgICAgewotICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgZGF0YS0+c2V0SW50ZWdlcigiaWRlbnRpZmllciIsIGlkZW50aWZpZXIpOwogICAg
ICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwuc3RyaW5nKCkpOwogICAgICAgICAg
ICAgaWYgKCFwcm90b2NvbC5pc051bGwoKSkKICAgICAgICAgICAgICAgICBkYXRhLT5zZXRTdHJp
bmcoIndlYlNvY2tldFByb3RvY29sIiwgcHJvdG9jb2wpOwotICAgICAgICAgICAgcmV0dXJuIGRh
dGEucmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyKQorICAgICAgICBzdGF0aWMgaW5saW5lIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gY3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGRhdGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJp
ZGVudGlmaWVyIiwgaWRlbnRpZmllcik7Ci0gICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNl
KCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogICAgICAgICB9CiAjZW5k
aWYKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGFiYTk4ZDIuLjBkNWIxM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKQEAgLTE3Miw5ICsxNzIsOSBAQCB2b2lkIFdvcmtlckluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiBzYwogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcHdhdGNoPiBXb3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQorUmVmPFN0b3B3YXRjaD4gV29y
a2VySW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkKIHsKLSAgICByZXR1
cm4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAgcmV0dXJuIG1fZXhlY3V0aW9uU3RvcHdhdGNo
LmNvcHlSZWYoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZDQ5
OWExOS4uZTk0ODIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
ckluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VySW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kSW5pdGlhbGl6ZWQoKSBv
dmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1
dGlvblN0b3B3YXRjaCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmPFdURjo6U3RvcHdhdGNo
PiBleGVjdXRpb25TdG9wd2F0Y2goKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOwpAQCAtODUsNyArODUsNyBAQCBwcml2YXRl
OgogICAgIFdvcmtlclJ1bnRpbWVBZ2VudCogbV9ydW50aW1lQWdlbnQ7CiAgICAgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw+IG1fZnJvbnRlbmRDaGFubmVsOwotICAgIFJlZlB0cjxX
VEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAgUmVmPFdURjo6U3RvcHdh
dGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBWZWN0b3I8SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llLCAyPiBtX2luamVjdGVkU2NyaXB0SW5zdHJ1bWVu
dGF0aW9uQ29va2llczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCmluZGV4IGNlY2FmMWYuLmYwNzI3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwCkBAIC0xMDYsMTggKzEwNiwxOCBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xp
ZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbgogICAgIGFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgdXJsLCBsaW5lLCBj
b2x1bW4sIDAsIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCksIHJlcXVlc3RJ
ZGVudGlmaWVyKTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6YWRkTWVzc2FnZShNZXNz
YWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIFBhZ2VDb25z
b2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBj
YWxsU3RhY2spCiB7Ci0gICAgYWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBTdHJp
bmcoKSwgMCwgMCwgY2FsbFN0YWNrLCAwKTsKKyAgICBhZGRNZXNzYWdlKHNvdXJjZSwgbGV2ZWws
IG1lc3NhZ2UsIFN0cmluZygpLCAwLCAwLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgMCk7CiB9CiAK
LXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHVybCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojph
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3Rh
Y2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
cikKIHsKICAgICBpZiAobXV0ZUNvdW50ICYmIHNvdXJjZSAhPSBNZXNzYWdlU291cmNlOjpDb25z
b2xlQVBJKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY2FsbFN0YWNrKQotICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUobV9wYWdlLCBzb3Vy
Y2UsIE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBjYWxsU3RhY2ssIHJlcXVlc3RJ
ZGVudGlmaWVyKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdl
VG9Db25zb2xlKG1fcGFnZSwgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2Fn
ZSwgV1RGOjptb3ZlKGNhbGxTdGFjayksIHJlcXVlc3RJZGVudGlmaWVyKTsKICAgICBlbHNlCiAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShtX3Bh
Z2UsIHNvdXJjZSwgTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2UsIHVybCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogCkBAIC0xMzYs
MTMgKzEzNiwxMSBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbgogfQogCiAKLXZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cykKK3ZvaWQgUGFnZUNvbnNvbGVDbGll
bnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJn
dW1lbnRzID0gcHJwQXJndW1lbnRzOwotCiAgICAgU3RyaW5nIG1lc3NhZ2U7CiAgICAgYm9vbCBn
b3RNZXNzYWdlID0gYXJndW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcobWVzc2FnZSk7
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKG1fcGFn
ZSwgTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGV4ZWMs
IGFyZ3VtZW50cyk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9D
b25zb2xlKG1fcGFnZSwgTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1l
c3NhZ2UsIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpKTsKIAogICAgIGlmIChtX3BhZ2UudXNl
c0VwaGVtZXJhbFNlc3Npb24oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDEyICsxNTMsMTIg
QEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGwKICAgICB9CiAKICAgICBpZiAobV9wYWdlLnNldHRp
bmdzKCkubG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQoKSB8fCBQYWdlQ29u
c29sZUNsaWVudDo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCi0gICAgICAgIENvbnNvbGVDbGll
bnQ6OnByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1lc3NhZ2VTb3VyY2U6OkNvbnNv
bGVBUEksIHR5cGUsIGxldmVsLCBleGVjLCBhcmd1bWVudHMucmVsZWFzZSgpKTsKKyAgICAgICAg
Q29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNv
dXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMp
KTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6Y291bnQoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIFBhZ2VDb25z
b2xlQ2xpZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25z
b2xlQ291bnQobV9wYWdlLCBleGVjLCBhcmd1bWVudHMpOworICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29uc29sZUNvdW50KG1fcGFnZSwgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cykp
OwogfQogCiB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQpAQCAtMTcxLDcgKzE2OSw3IEBAIHZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
dGl0bGUpCiB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIGlmIChSZWZQdHI8SlNDOjpQcm9m
aWxlPiBwcm9maWxlID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nKG1f
cGFnZSwgZXhlYywgdGl0bGUpKQotICAgICAgICBtX3Byb2ZpbGVzLmFwcGVuZChwcm9maWxlLnJl
bGVhc2UoKSk7CisgICAgICAgIG1fcHJvZmlsZXMuYXBwZW5kKFdURjo6bW92ZShwcm9maWxlKSk7
CiB9CiAKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQpAQCAtMTgyLDEyICsxODAsMTIgQEAgdm9pZCBQYWdlQ29uc29sZUNs
aWVudDo6dGltZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB2b2lkIFBh
Z2VDb25zb2xlQ2xpZW50Ojp0aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIHRpdGxlKQogewogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVh
dGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xlKGV4ZWMsIDEpKTsKLSAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKG1fcGFnZS5tYWluRnJhbWUoKSwgdGl0bGUs
IGNhbGxTdGFjay5yZWxlYXNlKCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3Rv
cENvbnNvbGVUaW1pbmcobV9wYWdlLm1haW5GcmFtZSgpLCB0aXRsZSwgV1RGOjptb3ZlKGNhbGxT
dGFjaykpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAoSlNDOjpFeGVj
U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBQYWdl
Q29uc29sZUNsaWVudDo6dGltZVN0YW1wKEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
b25zb2xlVGltZVN0YW1wKG1fcGFnZS5tYWluRnJhbWUoKSwgYXJndW1lbnRzKTsKKyAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAobV9wYWdlLm1haW5GcmFtZSgp
LCBXVEY6Om1vdmUoYXJndW1lbnRzKSk7CiB9CiAKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmNs
ZWFyUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29s
ZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5oCmluZGV4
IGI2ZjYxOTkuLmIyZDQ3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmgKQEAgLTU2LDIxICs1NiwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgbXV0ZSgpOwog
ICAgIHN0YXRpYyB2b2lkIHVubXV0ZSgpOwogCi0gICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiA9IG51bGxwdHIsIEpTQzo6RXhl
Y1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsK
LSAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsK
KyAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxT
dGFjaz4mJiA9IG51bGxwdHIsIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjaz4mJik7CiAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3RJZGVudGlmaWVyID0gMCwgRG9jdW1lbnQqID0gbnVsbHB0cik7CiAKICAgICBjb25zdCBQ
cm9maWxlc0FycmF5JiBwcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZXM7IH0KICAg
ICB2b2lkIGNsZWFyUHJvZmlsZXMoKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBt
ZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4
ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhl
Y1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwcm9maWxl
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxl
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGltZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB0aW1lRW5kKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3Jp
cHRBcmd1bWVudHM+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEpTQzo6
RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBQYWdlJiBtX3BhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
UmVwbGF5Q29udHJvbGxlci5jcHAKaW5kZXggMTM5ZjA1Yy4uMDQ1N2Y4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIHZv
aWQgUmVwbGF5Q29udHJvbGxlcjo6c3dpdGNoU2Vzc2lvbihQYXNzUmVmUHRyPFJlcGxheVNlc3Np
b24+IHNlc3Npb24pCiAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBSZXBsYXlQb3NpdGlvbigwLCAw
KTsKIAogICAgIExPRyhXZWJSZXBsYXksICIlLTIwc1N3aXRjaGluZyBzZXNzaW9ucyBmcm9tICVw
IHRvICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBtX2xvYWRlZFNlc3Npb24uZ2V0KCksIHNl
c3Npb24uZ2V0KCkpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRl
ZChtX3BhZ2UsIG1fbG9hZGVkU2Vzc2lvbik7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpzZXNzaW9uTG9hZGVkKG1fcGFnZSwgbV9sb2FkZWRTZXNzaW9uLmNvcHlSZWYoKSk7CiB9CiAK
IHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6Y3JlYXRlU2VnbWVudCgpCkBAIC0yMjMsNyArMjIzLDcg
QEAgdm9pZCBSZXBsYXlDb250cm9sbGVyOjpjcmVhdGVTZWdtZW50KCkKICAgICBtX2xvYWRlZFNl
Z21lbnQgPSBSZXBsYXlTZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCk7CiAKICAgICBMT0coV2ViUmVw
bGF5LCAiJS0yMHMgQ3JlYXRlZCBzZWdtZW50OiAlcC5cbiIsICJSZXBsYXlDb250cm9sbGVyIiwg
bV9sb2FkZWRTZWdtZW50LmdldCgpKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
Z21lbnRDcmVhdGVkKG1fcGFnZSwgbV9sb2FkZWRTZWdtZW50KTsKKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkKG1fcGFnZSwgbV9sb2FkZWRTZWdtZW50LmNvcHlS
ZWYoKSk7CiAKICAgICBtX2FjdGl2ZUN1cnNvciA9IENhcHR1cmluZ0lucHV0Q3Vyc29yOjpjcmVh
dGUobV9sb2FkZWRTZWdtZW50KTsKICAgICBtX2FjdGl2ZUN1cnNvci0+YXBwZW5kSW5wdXQ8QmVn
aW5TZWdtZW50U2VudGluZWw+KCk7CkBAIC0yNDcsMTAgKzI0NywxMCBAQCB2b2lkIFJlcGxheUNv
bnRyb2xsZXI6OmNvbXBsZXRlU2VnbWVudCgpCiAgICAgdW5sb2FkU2VnbWVudChzaG91bGRTdXBw
cmVzc05vdGlmaWNhdGlvbnMpOwogCiAgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzIENvbXBsZXRl
ZCBzZWdtZW50OiAlcC5cbiIsICJSZXBsYXlDb250cm9sbGVyIiwgc2VnbWVudC5nZXQoKSk7Ci0g
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKG1fcGFnZSwgc2Vn
bWVudCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKG1f
cGFnZSwgc2VnbWVudC5jb3B5UmVmKCkpOwogCiAgICAgbV9sb2FkZWRTZXNzaW9uLT5hcHBlbmRT
ZWdtZW50KHNlZ21lbnQpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1v
ZGlmaWVkKG1fcGFnZSwgbV9sb2FkZWRTZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlc3Npb25Nb2RpZmllZChtX3BhZ2UsIG1fbG9hZGVkU2Vzc2lvbi5jb3B5UmVmKCkp
OwogfQogCiB2b2lkIFJlcGxheUNvbnRyb2xsZXI6OmxvYWRTZWdtZW50QXRJbmRleChzaXplX3Qg
c2VnbWVudEluZGV4KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6
bG9hZFNlZ21lbnRBdEluZGV4KHNpemVfdCBzZWdtZW50SW5kZXgpCiAgICAgbV9hY3RpdmVDdXJz
b3IgPSBSZXBsYXlpbmdJbnB1dEN1cnNvcjo6Y3JlYXRlKG1fbG9hZGVkU2VnbWVudCwgbV9wYWdl
LCB0aGlzKTsKIAogICAgIExPRyhXZWJSZXBsYXksICIlLTIwc0xvYWRpbmcgc2VnbWVudDogJXAu
XG4iLCAiUmVwbGF5Q29udHJvbGxlciIsIHNlZ21lbnQuZ2V0KCkpOwotICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZChtX3BhZ2UsIHNlZ21lbnQpOworICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZChtX3BhZ2UsIHNlZ21lbnQuY29weVJl
ZigpKTsKIH0KIAogdm9pZCBSZXBsYXlDb250cm9sbGVyOjp1bmxvYWRTZWdtZW50KGJvb2wgc3Vw
cHJlc3NOb3RpZmljYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1Jl
cGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBs
YXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAKaW5kZXggMGVkM2UyMy4uYjRkMWMzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMu
Y3BwCkBAIC00Niw3ICs0Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbml0aWFsTmF2aWdhdGlvbj4g
SW5pdGlhbE5hdmlnYXRpb246OmNyZWF0ZUZyb21QYWdlKGNvbnN0IFBhZ2UmCiAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5Db3B5ID0gbWFpbkZyYW1lLmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPmlzb2xhdGVkQ29weSgpOwogICAgIFVSTCB1cmwgPSBtYWluRnJhbWUuZG9j
dW1lbnQoKS0+dXJsKCk7CiAgICAgU3RyaW5nIHJlZmVycmVyID0gbWFpbkZyYW1lLmxvYWRlcigp
LnJlZmVycmVyKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5pdGlhbE5hdmlnYXRp
b24+KG9yaWdpbkNvcHksIHVybCwgcmVmZXJyZXIpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEluaXRpYWxOYXZpZ2F0aW9uPihXVEY6Om1vdmUob3JpZ2luQ29weSksIHVybCwgcmVmZXJy
ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4IDY3NDYwMzkuLjUzY2I3
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUuY3BwCkBAIC03OSwxMCArNzksMTAgQEAgU2hhcmVkV29ya2VyVGhyZWFkJiBTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZTo6dGhyZWFkKCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhcmVk
V29ya2VyVGhyZWFkJj4oQmFzZTo6dGhyZWFkKCkpOwogfQogCi12b2lkIFNoYXJlZFdvcmtlckds
b2JhbFNjb3BlOjpsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKQor
dm9pZCBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
az4mJiBjYWxsU3RhY2spCiB7Ci0gICAgV29ya2VyR2xvYmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRv
Q29uc29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBjYWxsU3RhY2spOwotICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7CisgICAgV29ya2VyR2xvYmFsU2NvcGU6
OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2suY29weVJlZigpKTsKKyAgICBhZGRNZXNzYWdlVG9X
b3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBlcnJv
ck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2su
Y29weVJlZigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oCmluZGV4IGMzMzViMmYuLjE4
MWEyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLmgKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgU2hhcmVkV29ya2VyVGhyZWFk
Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJl
ciwgaW50IGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
az4pIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xl
KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50
IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENh
bGxTdGFjaz4mJikgb3ZlcnJpZGU7CiAKICAgICAgICAgU3RyaW5nIG1fbmFtZTsKICAgICB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAppbmRleCA0NTJj
ZWI1Li5hMGI0NzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmNwcApAQCAtMjE0LDcgKzIxNCw3IEBAIEV2ZW50VGFyZ2V0KiBXb3JrZXJHbG9iYWxTY29w
ZTo6ZXJyb3JFdmVudFRhcmdldCgpCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgV29ya2Vy
R2xvYmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pCit2b2lkIFdvcmtlckdsb2JhbFNj
b3BlOjpsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJikKIHsKICAgICB0aHJlYWQoKS53b3JrZXJSZXBvcnRp
bmdQcm94eSgpLnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChlcnJvck1lc3NhZ2UsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMKTsKIH0KQEAgLTIzMCw3ICsyMzAsNyBAQCB2
b2lkIFdvcmtlckdsb2JhbFNjb3BlOjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZUxldmVsIGxldgogICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoc291
cmNlLCBsZXZlbCwgbWVzc2FnZSwgU3RyaW5nKCksIDAsIDAsIDAsIDAsIHJlcXVlc3RJZGVudGlm
aWVyKTsKIH0KIAotdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgV29y
a2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25l
ZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmICghaXNDb250ZXh0VGhyZWFkKCkp
IHsKICAgICAgICAgcG9zdFRhc2soQWRkQ29uc29sZU1lc3NhZ2VUYXNrKHNvdXJjZSwgbGV2ZWws
IFN0cmluZ0NhcHR1cmUobWVzc2FnZSkpKTsKQEAgLTIzOCwxNCArMjM4LDE0IEBAIHZvaWQgV29y
a2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uCiAgICAgfQogCiAgICAgdGhyZWFkKCkud29ya2VyUmVwb3J0aW5nUHJv
eHkoKS5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChzb3VyY2UsIGxldmVsLCBtZXNz
YWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCk7Ci0gICAgYWRkTWVzc2Fn
ZVRvV29ya2VyQ29uc29sZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgY2FsbFN0YWNrLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIp
OworICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIFdURjo6bW92ZShjYWxsU3RhY2sp
LCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCi12b2lkIFdvcmtlckdsb2JhbFNjb3Bl
OjphZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRk
TWVzc2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsK
ICAgICBpZiAoY2FsbFN0YWNrKQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFk
ZE1lc3NhZ2VUb0NvbnNvbGUodGhpcywgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwg
bWVzc2FnZSwgY2FsbFN0YWNrLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZSh0aGlzLCBzb3VyY2UsIE1lc3Nh
Z2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVz
dElkZW50aWZpZXIpOwogICAgIGVsc2UKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphZGRNZXNzYWdlVG9Db25zb2xlKHRoaXMsIHNvdXJjZSwgTWVzc2FnZVR5cGU6OkxvZywgbGV2
ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwg
cmVxdWVzdElkZW50aWZpZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9i
YWxTY29wZS5oCmluZGV4IDZmNzQ2ZWIuLjQ4NmFhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTE0Miw4ICsxNDIsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFdvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50LCBXb3JrZXJUaHJlYWQmLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0
b3BPcmlnaW4pOwogICAgICAgICB2b2lkIGFwcGx5Q29udGVudFNlY3VyaXR5UG9saWN5RnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpIZWFkZXJUeXBlKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9u
VG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRDYWxsU3RhY2s+KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZXNzYWdl
VG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0
YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
ciA9IDApOworICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
az4mJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0
ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAKICAgICBwcml2
YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIG92
ZXJyaWRlIHsgcmVmKCk7IH0KQEAgLTE1Miw3ICsxNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsg
cmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlk
ZSBmaW5hbCB7IGRlcmVmKCk7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0
YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSBvdmVycmlkZTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdENhbGxTdGFjaz4mJiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApIG92ZXJyaWRlOwogCiAgICAgICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXQqIGVycm9yRXZlbnRUYXJnZXQoKSBvdmVycmlkZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244125</attachid>
            <date>2015-01-06 19:23:16 -0800</date>
            <delta_ts>2015-01-06 19:52:40 -0800</delta_ts>
            <desc>EWS round 2</desc>
            <filename>140053.patch</filename>
            <type>text/plain</type>
            <size>635275</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDJhOTg2ODUuLmI3YTZhNjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxNS0wMS0wNiAgQnJpYW4gSi4gQnVy
ZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHVy
Z2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZvciB0eXBlZCBh
bmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFz
IEtsaW5nLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdXNlcyBvZiBQYXNzUmVmUHRy
IHdpdGggdXNlcyBvZiBSZWZQdHImJiBhbmQgV1RGOjptb3ZlKCkgaW4gY29kZQorICAgICAgICBy
ZWxhdGVkIHRvIFdlYiBJbnNwZWN0b3IuIEl0IGFsc28gY29udmVydHMgbWFueSB1c2VzIG9mIFJl
ZlB0ciB0byBSZWYgd2hlcmUKKyAgICAgICAgcmVmZXJlbmNlcyBhcmUgYWx3YXlzIG5vbi1udWxs
LiBUaGVzZSB0d28gcmVmYWN0b3JpbmdzIGhhdmUgYmVlbiBjb21iaW5lZCBzaW5jZQorICAgICAg
ICB0aGV5IHRlbmQgdG8gcmVxdWlyZSBzaW1pbGFyIGNoYW5nZXMgdG8gdGhlIGNvZGUuCisKKyAg
ICAgICAgQ3JlYXRpb24gbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyBvZiBJbnNwZWN0b3JWYWx1ZSBu
b3cgcmV0dXJuIGEgUmVmLCBhbmQgY2FsbHNpdGVzCisgICAgICAgIGhhdmUgYmVlbiB1cGRhdGVk
IHRvIHRha2UgYSBSZWYgaW5zdGVhZCBvZiBSZWZQdHIuCisKKyAgICAgICAgQnVpbGRlcnMgZm9y
IHR5cGVkIHByb3RvY29sIG9iamVjdHMgbm93IHJldHVybiBhIFJlZi4gU2luY2UgdGhlcmUgaXMg
bm8gaW1wbGljaXQKKyAgICAgICAgY2FsbCB0byBvcGVyYXRvciYsIGNhbGxzaXRlcyBub3cgbXVz
dCBleHBsaWNpdGx5IGNhbGwgLnJlbGVhc2UoKSB0byBjb252ZXJ0IGEKKyAgICAgICAgYnVpbGRl
ciBvYmplY3QgaW50byB0aGUgY29ycmVzcG9uZGluZyBwcm90b2NvbCBvYmplY3Qgb25jZSByZXF1
aXJlZCBmaWVsZHMgYXJlIHNldC4KKyAgICAgICAgVXBkYXRlIGNhbGxzaXRlcyBhbmQgdXNlIGF1
dG8gdG8gZWxpbWluYXRlIHJlcGV0aXRpb24gb2YgbG9uZ3dpbmRlZCBwcm90b2NvbCB0eXBlcy4K
KworICAgICAgICBUZXN0cyBmb3IgaW5zcGVjdG9yIHByb3RvY29sIGFuZCByZXBsYXkgaW5wdXRz
IGhhdmUgYmVlbiByZWJhc2VsaW5lZC4KKworICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OmpzVG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAg
IChEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICog
YmluZGluZ3MvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpidWlsZE9iamVjdEZvclNl
YXJjaE1hdGNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Q29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlsaXRpZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QpOgorICAgICAgICAoSW5z
cGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNl
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENh
bGwpOiBTcGxpdCB0aGUgZWFybHkgZXhpdHMuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZElm
QWN0aXZlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZW5kUmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcik6CisgICAgICAgIChJbnNwZWN0b3I6Omdl
dFByb3BlcnR5VmFsdWUpOiBBZGQgYSBjb21tZW50IHRvIGNsYXJpZnkgd2hhdCB0aGlzIGNsZXZl
ciBjb2RlIGRvZXMuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOiBVc2UgYSB0eXBlZCBwcm90b2NvbCBv
YmplY3QgdG8gY29sbGVjdAorICAgICAgICBwcm90b2NvbCBlcnJvciBzdHJpbmdzLgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIpOgorICAgICAgICBDb252ZXJ0IHRo
ZSBzdXBwbGVtZW50YWwgZGlzcGF0Y2hlcidzIHJlZmVyZW5jZSB0byBSZWYgc2luY2UgaXQgaXMg
bmV2ZXIgbnVsbC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oOiBHZXQgcmlkIG9m
IEFycmF5SXRlbUhlbHBlciBhbmQKKyAgICAgICAgU3RydWN0SXRlbVRyYWl0cy4gQWRkIG1vcmUg
dmVyc2lvbnMgb2YgYWRkSXRlbSB0byBoYW5kbGUgcHVzaGluZyB2YXJpb3VzIHR5cGVzLgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6Om9wZW5BY2Nlc3NvcnMpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpTdHJ1Y3RJdGVtVHJhaXRzOjpwdXNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkFycmF5PFQ+Pjo6cnVudGltZUNhc3QpOiBBc3Nl
cnQgYXJndW1lbnQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJh
aXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5SXRlbUhlbHBlcjxTdHJpbmc+OjpUcmFpdHM6OnB1c2hSYXcpOiBEZWxldGVkLgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0czo6
cHVzaFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0
ZW1IZWxwZXI8ZG91YmxlPjo6VHJhaXRzOjpwdXNoUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBlcjxib29sPjo6VHJhaXRzOjpwdXNoUmF3
KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBl
cjxJbnNwZWN0b3JWYWx1ZT46OlRyYWl0czo6cHVzaFJlZlB0cik6IERlbGV0ZWQuCisgICAgICAg
IChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0Pjo6
VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT46OlRyYWl0czo6cHVzaFJlZlB0cik6
IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8
UHJvdG9jb2w6OkFycmF5PFQ+Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDogU3RyYWlnaHRlbiBvdXQgZ2V0QXJy
YXkgYW5kIGdldE9iamVjdCB0byBoYXZlCisgICAgICAgIHRoZSBzYW1lIGNhbGwgc2lnbmF0dXJl
IGFzIG90aGVyIGdldHRlcnMuIFVzZSBSZWYgd2hlcmUgcG9zc2libGUuCisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xlYW4pOgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2U6OmdldFZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXlCYXNlOjpnZXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5OjpjcmVhdGUpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6bnVsbCk6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZTo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaE9iamVjdCk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaEFycmF5KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVFbmQp
OgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVT
dGFtcCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxs
RnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkSW5z
cGVjdG9yT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrOjpidWlsZEluc3BlY3RvckFycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2Ny
aXB0Q2FsbFN0YWNrLmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50OjplbmFibGUpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdCk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWluKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2VydCk6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZSk6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZl
QnJlYWtwb2ludCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1ApOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcyk6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291
cmNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtw
b2ludEFjdGlvblByb2JlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmJ1aWxkRXJyb3JSYW5nZU9iamVj
dCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0
aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1
bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdl
bmVyYXRvcik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3luY19oYW5k
bGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9t
YWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQpOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFy
YXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcik6
CisgICAgICAgIChfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJh
aXRzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19m
b3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChP
YmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2
ZW50KToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogcmVwbGF5L0VuY29kZWRWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6YXNPYmplY3QpOgorICAgICAgICAo
SlNDOjpFbmNvZGVkVmFsdWU6OmFzQXJyYXkpOgorICAgICAgICAoSlNDOjpFbmNvZGVkVmFsdWU6
OnB1dDxFbmNvZGVkVmFsdWU+KToKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphcHBlbmQ8
RW5jb2RlZFZhbHVlPik6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRW
YWx1ZT4pOgorICAgICAgICAqIHJlcGxheS9FbmNvZGVkVmFsdWUuaDoKKyAgICAgICAgKiByZXBs
YXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5OgorICAgICAgICAoVHlwZS5i
b3Jyb3dfdHlwZSk6CisgICAgICAgIChUeXBlLmFyZ3VtZW50X3R5cGUpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmdlbmVyYXRlX21lbWJlcl9tb3ZlX2V4cHJlc3Npb24pOgorICAgICAgICAqIHJ1bnRp
bWUvQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OnByaW50
Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVu
dDo6aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6CisgICAgICAgIChKU0M6OkNvbnNv
bGVDbGllbnQ6OmxvZ1dpdGhMZXZlbCk6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OmNs
ZWFyKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6ZGlyKToKKyAgICAgICAgKEpTQzo6
Q29uc29sZUNsaWVudDo6ZGlyWE1MKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6dGFi
bGUpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojp0cmFjZSk6CisgICAgICAgIChKU0M6
OkNvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkNvbnNvbGVD
bGllbnQ6Omdyb3VwKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6Z3JvdXBDb2xsYXBz
ZWQpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojpncm91cEVuZCk6CisgICAgICAgICog
cnVudGltZS9Db25zb2xlQ2xpZW50Lmg6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0LmNwcDoK
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKToKKyAg
ICAgICAgKEpTQzo6VHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0Lmg6CisKIDIwMTUtMDEtMDYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBVc2UgZGV0YWlscyBmb3Igb3BfY3JlYXRlX2FyZ3VtZW50cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQw
NDZhYjIuLjllMjI1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1Nj
cmlwdFZhbHVlLmNwcApAQCAtOTgsNyArOTgsNyBAQCBib29sIFNjcmlwdFZhbHVlOjppc0Z1bmN0
aW9uKCkgY29uc3QKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1zdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3Rh
dGUsIEpTVmFsdWUgdmFsdWUsIGludCBtYXhEZXB0aCkKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU1ZhbHVl
IHZhbHVlLCBpbnQgbWF4RGVwdGgpCiB7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUs
IEpTVgogCiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKGlzSlNBcnJh
eSh2YWx1ZSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5zcGVjdG9y
QXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVj
dG9yQXJyYXk+IGluc3BlY3RvckFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTMxLDExICsxMzEsMTEgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShFeGVjU3RhdGUq
IHNjcmlwdFN0YXRlLCBKU1YKICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgZWxlbWVudCwg
bWF4RGVwdGgpOwogICAgICAgICAgICAgICAgIGlmICghZWxlbWVudFZhbHVlKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpbnNwZWN0b3JBcnJh
eS0+cHVzaFZhbHVlKGVsZW1lbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJy
YXktPnB1c2hWYWx1ZShXVEY6Om1vdmUoZWxlbWVudFZhbHVlKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gaW5zcGVjdG9yQXJyYXk7CisgICAgICAgICAgICByZXR1cm4gV1RG
Ojptb3ZlKGluc3BlY3RvckFycmF5KTsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBpbnNwZWN0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBpbnNwZWN0b3JPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2Jq
ZWN0KCk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoc2NyaXB0U3Rh
dGUpOwogICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBzY3JpcHRTdGF0ZSwgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVy
dGllcyk7CkBAIC0xNDUsMTYgKzE0NSwxNiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVgogICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNw
ZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgcHJvcGVydHlWYWx1ZSwgbWF4RGVwdGgpOwogICAgICAg
ICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIGluc3BlY3Rvck9iamVjdC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwg
aW5zcGVjdG9yVmFsdWUpOworICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5zZXRWYWx1ZShu
YW1lLnN0cmluZygpLCBXVEY6Om1vdmUoaW5zcGVjdG9yVmFsdWUpKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gaW5zcGVjdG9yT2JqZWN0OworICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGlu
c3BlY3Rvck9iamVjdCk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFZh
bHVlOjp0b0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CitSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0
ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7CiAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcihzY3JpcHRT
dGF0ZSk7CiAgICAgcmV0dXJuIGpzVG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgbV92YWx1
ZS5nZXQoKSwgSW5zcGVjdG9yVmFsdWU6Om1heERlcHRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmgKaW5kZXggZDVmYWRlOS4uZmVmNzcwMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmgKQEAgLTY2LDcgKzY2
LDcgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY3JpcHRWYWx1ZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsgfQogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHRvSW5zcGVjdG9yVmFsdWUoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSop
IGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IGY3ZDFlNTUuLjIwMmUxNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwCkBAIC0xODEsMTAgKzE4MSwxMSBAQCBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29u
c29sZTo6Q29uc29sZU1lc3NhZ2U6OkxldmVsIG1lc3NhZ2VMZXZlbFZhbHVlKE1lcwogCiB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKEluc3BlY3RvckNvbnNvbGVGcm9udGVuZERp
c3BhdGNoZXIqIGNvbnNvbGVGcm9udGVuZERpc3BhdGNoZXIsIEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDb25zb2xlTWVz
c2FnZT4ganNvbk9iaiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNvbGVNZXNz
YWdlOjpjcmVhdGUoKQorICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDb25z
b2xlTWVzc2FnZT4ganNvbk9iaiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNv
bGVNZXNzYWdlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U291cmNlKG1lc3NhZ2VTb3VyY2VWYWx1
ZShtX3NvdXJjZSkpCiAgICAgICAgIC5zZXRMZXZlbChtZXNzYWdlTGV2ZWxWYWx1ZShtX2xldmVs
KSkKLSAgICAgICAgLnNldFRleHQobV9tZXNzYWdlKTsKKyAgICAgICAgLnNldFRleHQobV9tZXNz
YWdlKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgLy8gRklYTUU6IG9ubHkgc2VuZCBvdXQg
dHlwZSBmb3IgQ29uc29sZUFQSSBzb3VyY2UgbWVzc2FnZXMuCiAgICAganNvbk9iai0+c2V0VHlw
ZShtZXNzYWdlVHlwZVZhbHVlKG1fdHlwZSkpOwpAQCAtMTk5LDcgKzIwMCw3IEBAIHZvaWQgQ29u
c29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0
Y2hlciogY29uc29sZUZyCiAgICAgaWYgKG1fYXJndW1lbnRzICYmIG1fYXJndW1lbnRzLT5hcmd1
bWVudENvdW50KCkpIHsKICAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBp
bmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1fYXJndW1lbnRzLT5nbG9i
YWxTdGF0ZSgpKTsKICAgICAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBqc29uQXJncyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD46OmNyZWF0ZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IGpzb25BcmdzID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0Pjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpZiAobV90eXBlID09IE1lc3Nh
Z2VUeXBlOjpUYWJsZSAmJiBnZW5lcmF0ZVByZXZpZXcgJiYgbV9hcmd1bWVudHMtPmFyZ3VtZW50
Q291bnQoKSkgewogICAgICAgICAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHRhYmxl
ID0gbV9hcmd1bWVudHMtPmFyZ3VtZW50QXQoMCk7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgY29sdW1ucyA9IG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkgPiAx
ID8gbV9hcmd1bWVudHMtPmFyZ3VtZW50QXQoMSkgOiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSgp
OwpAQCAtMjA4LDcgKzIwOSw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQo
SW5zcGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyCiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGpzb25BcmdzLT5hZGRJdGVt
KGluc3BlY3RvclZhbHVlKTsKKyAgICAgICAgICAgICAgICBqc29uQXJncy0+YWRkSXRlbShpbnNw
ZWN0b3JWYWx1ZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IGluc3BlY3RvclZhbHVlID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdChtX2FyZ3VtZW50cy0+YXJndW1lbnRBdChpKSwgQVNDSUlMaXRlcmFsKCJjb25z
b2xlIiksIGdlbmVyYXRlUHJldmlldyk7CkBAIC0yMTYsMTcgKzIxNywxNyBAQCB2b2lkIENvbnNv
bGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKEluc3BlY3RvckNvbnNvbGVGcm9udGVuZERpc3BhdGNo
ZXIqIGNvbnNvbGVGcgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAganNvbkFyZ3MtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBqc29uQXJncy0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5j
b3B5UmVmKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGpzb25PYmotPnNldFBhcmFtZXRlcnMoanNvbkFyZ3MpOworICAgICAgICAgICAganNvbk9iai0+
c2V0UGFyYW1ldGVycyhXVEY6Om1vdmUoanNvbkFyZ3MpKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIGlmIChtX2NhbGxTdGFjaykKICAgICAgICAganNvbk9iai0+c2V0U3RhY2tUcmFjZShtX2Nh
bGxTdGFjay0+YnVpbGRJbnNwZWN0b3JBcnJheSgpKTsKIAotICAgIGNvbnNvbGVGcm9udGVuZERp
c3BhdGNoZXItPm1lc3NhZ2VBZGRlZChqc29uT2JqKTsKKyAgICBjb25zb2xlRnJvbnRlbmREaXNw
YXRjaGVyLT5tZXNzYWdlQWRkZWQoV1RGOjptb3ZlKGpzb25PYmopKTsKIH0KIAogdm9pZCBDb25z
b2xlTWVzc2FnZTo6dXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9yQ29uc29sZUZy
b250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyb250ZW5kRGlzcGF0Y2hlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRp
ZXMuY3BwCmluZGV4IDhlNTc2MzcuLmY1ZGYwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcApAQCAt
MTIwLDcgKzEyMCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4gbGluZUVuZGlu
Z3MoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+
IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goc2l6ZV90IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgbGluZUNvbnRlbnQpCitzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goc2l6ZV90IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgbGluZUNvbnRlbnQpCiB7CiAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpCkBAIC0xNTMsMTUgKzE1MywxNyBAQCBpbnQgY291
bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVz
c2lvbiYgcmVnZXgsIGNvbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVz
OjpTZWFyY2hNYXRjaD4+IHNlYXJjaEluVGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wg
aXNSZWdleCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2FzZVNlbnNp
dGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
Pj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOwogCiAgICAg
SlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRp
ZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAg
ICBWZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgU3RyaW5nPj4gbWF0Y2hlcyA9IGdldFJlZ3VsYXJF
eHByZXNzaW9uTWF0Y2hlc0J5TGluZXMocmVnZXgsIHRleHQpOwogCi0gICAgZm9yIChjb25zdCBh
dXRvJiBtYXRjaCA6IG1hdGNoZXMpCi0gICAgICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVj
dEZvclNlYXJjaE1hdGNoKG1hdGNoLmZpcnN0LCBtYXRjaC5zZWNvbmQpKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIG1hdGNoIDogbWF0Y2hlcykgeworICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gbWF0Y2hPYmplY3QgPSBidWlsZE9iamVj
dEZvclNlYXJjaE1hdGNoKG1hdGNoLmZpcnN0LCBtYXRjaC5zZWNvbmQpOworICAgICAgICByZXN1
bHQtPmFkZEl0ZW0oV1RGOjptb3ZlKG1hdGNoT2JqZWN0KSk7CisgICAgfQogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
Q29udGVudFNlYXJjaFV0aWxpdGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgKaW5kZXggOTg4YTBmMmQuLmIzYjYxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxp
dGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJj
aFV0aWxpdGllcy5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBDb250ZW50U2VhcmNoVXRp
bGl0aWVzIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lv
biBjcmVhdGVTZWFyY2hSZWdleChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRp
dmUsIGJvb2wgaXNSZWdleCk7CiBKU19FWFBPUlRfUFJJVkFURSBpbnQgY291bnRSZWd1bGFyRXhw
cmVzc2lvbk1hdGNoZXMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIGNvbnN0
IFN0cmluZyYpOwotSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
Pj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYg
cXVlcnksIGNvbnN0IGJvb2wgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KTsKK0pT
X0VYUE9SVF9QUklWQVRFIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5l
cyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KTsKIEpTX0VYUE9SVF9QUklWQVRFIFRleHRQ
b3NpdGlvbiB0ZXh0UG9zaXRpb25Gcm9tT2Zmc2V0KHNpemVfdCBvZmZzZXQsIGNvbnN0IFZlY3Rv
cjxzaXplX3Q+JiBsaW5lRW5kaW5ncyk7CiBKU19FWFBPUlRfUFJJVkFURSBzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPHNpemVfdD4+IGxpbmVFbmRpbmdzKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCmluZGV4
IDk1ZmE3NWQuLjNiODNkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBJbmplY3Rl
ZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKnJlc3VsdCA9IEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46
OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlKTsKKyAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNh
c3QoV1RGOjptb3ZlKHJlc3VsdFZhbHVlKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6Omdl
dFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVj
dElkLCBib29sIG93blByb3BlcnRpZXMsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiogcHJvcGVydGllcykKQEAgLTEyMiw3ICsx
MjIsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgKnByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwor
ICAgICpwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGOjptb3ZlKHJl
c3VsdCkpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2Ny
aXB0b3I+PiogcHJvcGVydGllcykKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFycmF5ID0gQmlu
ZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOworICAgIGF1dG8gYXJyYXkg
PSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KFdURjo6bW92ZShyZXN1bHQpKTsK
ICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID4gMCkKICAgICAgICAgKnByb3BlcnRpZXMgPSBhcnJh
eTsKIH0KIAotUGFzc1JlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzKQorUmVmPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMo
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMpCiB7CiAgICAgQVNTRVJU
KCFoYXNOb1ZhbHVlKCkpOwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoIndyYXBDYWxsRnJhbWVz
IiksIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CkBAIC0x
NTMsMTIgKzE1MywxMiBAQCBQYXNzUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcAogICAgIEFTU0VSVCghaGFk
RXhjZXB0aW9uKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCA9IGNhbGxGcmFt
ZXNWYWx1ZS50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpOwogICAgIGlmIChyZXN1bHQt
PnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpCi0gICAgICAgIHJldHVybiBC
aW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1l
Q2FzdChXVEY6Om1vdmUocmVzdWx0KSkucmVsZWFzZU5vbk51bGwoKTsKIAogICAgIHJldHVybiBB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJldmll
dykgY29uc3QKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
KSBjb25zdAogewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKICAgICBEZXByZWNhdGVkOjpT
Y3JpcHRGdW5jdGlvbkNhbGwgd3JhcEZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFT
Q0lJTGl0ZXJhbCgid3JhcE9iamVjdCIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlv
bkNhbGxIYW5kbGVyKCkpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjCiAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKIH0KIAotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVk
U2NyaXB0Ojp3cmFwVGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3QKK1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3
cmFwVGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3QKIHsKICAgICBBU1NFUlQoIWhhc05v
VmFsdWUoKSk7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIHdyYXBGdW5jdGlv
bihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoIndyYXBUYWJsZSIpLCBpbnNw
ZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDQyYzc5MGQu
LjI5MDkyYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmgKQEAgLTYyLDkgKzYyLDkgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0UHJvcGVy
dGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVy
dGllcywgUmVmUHRyPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4qIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OkFycmF5
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+KiByZXN1bHQp
OwogCi0gICAgUGFzc1JlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OkRlYnVnZ2VyOjpD
YWxsRnJhbWU+PiB3cmFwQ2FsbEZyYW1lcyhjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYp
OwotICAgIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9i
amVjdChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IFN0cmluZyYgZ3JvdXBO
YW1lLCBib29sIGdlbmVyYXRlUHJldmlldyA9IGZhbHNlKSBjb25zdDsKLSAgICBQYXNzUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHdyYXBUYWJsZShjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgdGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBj
b2x1bW5zKSBjb25zdDsKKyAgICBSZWY8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpEZWJ1Z2dl
cjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9i
amVjdChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IFN0cmluZyYgZ3JvdXBO
YW1lLCBib29sIGdlbmVyYXRlUHJldmlldyA9IGZhbHNlKSBjb25zdDsKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcFRhYmxlKGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiB0YWJsZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNvbHVt
bnMpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRFeGNlcHRpb25WYWx1ZShjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYpOwogICAgIHZvaWQgY2xlYXJFeGNlcHRpb25WYWx1ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwCmluZGV4IGRkMTI5OGMuLjdkZTA1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKQEAgLTEzNSwxNSArMTM1
LDIwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSByZXN1bHRQYWlyLT5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSk7Ci0gICAgYm9vbCB3YXNUaHJvd25WYWwg
PSBmYWxzZTsKLSAgICBpZiAoIXJlc3VsdE9iamVjdCB8fCAhcmVzdWx0UGFpci0+Z2V0Qm9vbGVh
bihBU0NJSUxpdGVyYWwoIndhc1Rocm93biIpLCB3YXNUaHJvd25WYWwpKSB7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0OworICAgIGlmICghcmVzdWx0UGFpci0+Z2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHJlc3VsdE9iamVjdCkpIHsKKyAgICAgICAg
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90
IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGJvb2wgd2FzVGhyb3duVmFsdWUgPSBmYWxzZTsKKyAgICBpZiAoIXJlc3Vs
dFBhaXItPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJvd24iKSwgd2FzVGhyb3duVmFs
dWUpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJv
cjogcmVzdWx0IGlzIG5vdCBhIHBhaXIgb2YgdmFsdWUgYW5kIHdhc1Rocm93biBmbGFnIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAqb2JqZWN0UmVzdWx0ID0gQmluZGluZ1RyYWl0
czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2Jq
ZWN0KTsKLSAgICAqd2FzVGhyb3duID0gd2FzVGhyb3duVmFsOworICAgICp3YXNUaHJvd24gPSB3
YXNUaHJvd25WYWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuY3BwCmluZGV4IGRiZTc5M2UuLjg5NWEwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuY3BwCkBAIC0zNiw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci1JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpDYWxsYmFja0Jhc2Uo
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNoZXIs
IGludCBpZCkKLSAgICA6IG1fYmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCitJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpDYWxsYmFja0Jhc2UoUmVm
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQp
CisgICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKFdURjo6bW92ZShiYWNrZW5kRGlzcGF0Y2hlcikp
CiAgICAgLCBtX2lkKGlkKQogICAgICwgbV9hbHJlYWR5U2VudChmYWxzZSkKIHsKQEAgLTU0LDE4
ICs1NCwxOCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcgogICAgIHNlbmRJZkFjdGl2ZShudWxs
cHRyLCBlcnJvcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZTo6c2VuZElmQWN0aXZlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJ0aWFs
TWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZElmQWN0aXZlKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZv
Y2F0aW9uRXJyb3IpCiB7CiAgICAgaWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShtX2lkLCBwYXJ0aWFsTWVz
c2FnZSwgaW52b2NhdGlvbkVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UobV9pZCwgV1RGOjptb3ZlKHBhcnRpYWxNZXNzYWdlKSwgaW52b2NhdGlvbkVycm9yKTsK
ICAgICBtX2FscmVhZHlTZW50ID0gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKK1JlZjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkpOwogfQogCiB2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oY29u
c3QgU3RyaW5nJiBkb21haW4sIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KiBkaXNwYXRjaGVyKQpAQCAtOTAsOCArOTAsOCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2Fn
ZU9iamVjdC0+Z2V0KEFTQ0lJTGl0ZXJhbCgiaWQiKSk7Ci0gICAgaWYgKCFjYWxsSWRWYWx1ZSkg
eworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWU7CisgICAgaWYgKCFtZXNz
YWdlT2JqZWN0LT5nZXRWYWx1ZShBU0NJSUxpdGVyYWwoImlkIiksIGNhbGxJZFZhbHVlKSkgewog
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJ
SUxpdGVyYWwoIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTEwMiw4ICsxMDIsOCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9i
amVjdC0+Z2V0KEFTQ0lJTGl0ZXJhbCgibWV0aG9kIikpOwotICAgIGlmICghbWV0aG9kVmFsdWUp
IHsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlOworICAgIGlmICghbWVz
c2FnZU9iamVjdC0+Z2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgbWV0aG9kVmFsdWUp
KSB7CiAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3Qs
IEFTQ0lJTGl0ZXJhbCgiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIH0KIAog
ICAgIFN0cmluZyBkb21haW5NZXRob2QgPSBtZXRob2Quc3Vic3RyaW5nKHBvc2l0aW9uICsgMSk7
Ci0gICAgZG9tYWluRGlzcGF0Y2hlci0+ZGlzcGF0Y2goY2FsbElkLCBkb21haW5NZXRob2QsIG1l
c3NhZ2VPYmplY3QucmVsZWFzZSgpKTsKKyAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChj
YWxsSWQsIGRvbWFpbk1ldGhvZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2Fs
bElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0cmlu
ZyYgaW52b2NhdGlvbkVycm9yKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2Vu
ZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHJlc3VsdCwg
Y29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKIHsKICAgICBpZiAoIW1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CkBAIC0xNDEsNyArMTQxLDcgQEAg
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInJlc3VsdCIpLCByZXN1bHQpOwogICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksIGNhbGxJZCk7CiAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQwog
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwg
bnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFBy
b3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgZXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gZGF0YSkgY29uc3QKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9y
dFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUg
ZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgZGF0YSkgY29uc3QKIHsKICAgICBzdGF0aWMgY29u
c3QgaW50IGVycm9yQ29kZXNbXSA9IHsKICAgICAgICAgLTMyNzAwLCAvLyBQYXJzZUVycm9yCkBA
IC0xNjMsMjEgKzE2MywyMSBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBv
cnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQwogICAgICAgICAtMzIw
MDAsIC8vIFNlcnZlckVycm9yCiAgICAgfTsKIAotICAgIEFTU0VSVChlcnJvckNvZGUgPj0gMCk7
Ci0gICAgQVNTRVJUKCh1bnNpZ25lZCllcnJvckNvZGUgPCBXVEZfQVJSQVlfTEVOR1RIKGVycm9y
Q29kZXMpKTsKLSAgICBBU1NFUlQoZXJyb3JDb2Rlc1tlcnJvckNvZGVdKTsKKyAgICBBU1NFUlRf
QVJHKGVycm9yQ29kZSwgZXJyb3JDb2RlID49IDApOworICAgIEFTU0VSVF9BUkcoZXJyb3JDb2Rl
LCAodW5zaWduZWQpZXJyb3JDb2RlIDwgV1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7Cisg
ICAgQVNTRVJUX0FSRyhlcnJvckNvZGUsIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CiAKICAgICBp
ZiAoIW1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCBlcnJvckNv
ZGVzW2Vycm9yQ29kZV0pOwogICAgIGVycm9yLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNz
YWdlIiksIGVycm9yTWVzc2FnZSk7CiAgICAgaWYgKGRhdGEpCi0gICAgICAgIGVycm9yLT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgZGF0YSk7CisgICAgICAgIGVycm9yLT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImRhdGEiKSwgV1RGOjptb3ZlKGRhdGEpKTsKIAotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIGVycm9yLnJlbGVhc2Uo
KSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwg
V1RGOjptb3ZlKGVycm9yKSk7CiAgICAgaWYgKGNhbGxJZCkKICAgICAgICAgbWVzc2FnZS0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksICpjYWxsSWQpOwogICAgIGVsc2UKQEAgLTE4Nywz
NyArMTg3LDM2IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3Rv
Y29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFJldHVyblZhbHVlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBEZWZhdWx0
VmFsdWVUeXBlPgotc3RhdGljIFJldHVyblZhbHVlVHlwZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycywgRGVmYXVsdFZhbHVlVHlwZSBkZWZhdWx0
VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoSW5zcGVjdG9yVmFsdWUmLCBWYWx1ZVR5cGUmKSwgY29u
c3QgY2hhciogdHlwZU5hbWUpCitzdGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFs
dWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0
X29wdGlvbmFsVmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYg
cHJvdG9jb2xFcnJvcnMsIERlZmF1bHRWYWx1ZVR5cGUgZGVmYXVsdFZhbHVlLCBib29sICgqYXNN
ZXRob2QpKEluc3BlY3RvclZhbHVlJiwgVmFsdWVUeXBlJiksIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KQogewotICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7Ci0KLSAgICBWYWx1ZVR5cGUgdmFsdWUg
PSBkZWZhdWx0VmFsdWU7Ci0gICAgaWYgKHZhbHVlRm91bmQpCi0gICAgICAgICp2YWx1ZUZvdW5k
ID0gZmFsc2U7CisgICAgVmFsdWVUeXBlIHJlc3VsdCA9IGRlZmF1bHRWYWx1ZTsKKyAgICAvLyBv
dXRfb3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25hbHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9w
dGlvbmFsIHByb3BlcnR5IHdhcyBmb3VuZC4KKyAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZv
dW5kID09IG51bGxwdHIsIHRoZW4gdGhpcyBpcyBhIHJlcXVpcmVkIHByb3BlcnR5LgorICAgIGlm
IChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3Vu
ZCA9IGZhbHNlOwogCiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZvdW5k
KQotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0
aCB0eXBlICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwotICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKKyAgICAg
ICAgICAgIHByb3RvY29sRXJyb3JzLmFkZEl0ZW0oU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9i
amVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICclcycu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Jq
ZWN0LT5lbmQoKTsKLSAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRl
cmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7Ci0gICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5k
KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3VuZCkKLSAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVz
JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIGF1dG8gZmluZFJlc3VsdCA9IG9iamVjdC0+ZmluZChuYW1l
KTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgIGlmICgh
b3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLmFkZEl0
ZW0oU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3Qg
Zm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIGlmICghYXNNZXRob2QoKnZhbHVlSXRlcmF0b3ItPnZhbHVl
LCB2YWx1ZSkpIHsKLSAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICclcycuIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwotICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgaWYgKCFhc01ldGhvZCgqZmluZFJlc3VsdC0+dmFsdWUsIHJlc3VsdCkpIHsKKyAgICAgICAg
cHJvdG9jb2xFcnJvcnMuYWRkSXRlbShTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFz
IHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVO
YW1lKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKHZhbHVlRm91
bmQpCi0gICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICBpZiAob3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKKyAgICAgICAgKm91dF9vcHRpb25hbFZhbHVlRm91bmQgPSB0cnVlOwogCi0gICAg
cmV0dXJuIHZhbHVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0cnVjdCBBc01ldGhvZEJy
aWRnZXMgewpAQCAtMjMwLDM5ICsyMjksMzkgQEAgc3RydWN0IEFzTWV0aG9kQnJpZGdlcyB7CiAg
ICAgc3RhdGljIGJvb2wgYXNWYWx1ZShJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4mIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNWYWx1ZShvdXRwdXQpOyB9CiB9
OwogCi1pbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoraW50IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4m
IHByb3RvY29sRXJyb3JzKQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGludCwgaW50
LCBpbnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0
aG9kQnJpZGdlczo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOwogfQogCi1kb3VibGUgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnMpCitkb3VibGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykK
IHsKICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGUsIGRvdWJsZSwgZG91YmxlPihv
YmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJyaWRn
ZXM6OmFzRG91YmxlLCAiTnVtYmVyIik7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykK
K1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQogewogICAgIHJl
dHVybiBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZywgU3RyaW5nLCBTdHJpbmc+KG9iamVjdCwgbmFt
ZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsICIiLCBBc01ldGhvZEJyaWRnZXM6OmFzU3Ry
aW5nLCAiU3RyaW5nIik7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorYm9vbCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKIHsKICAgICByZXR1cm4gZ2V0UHJv
cGVydHlWYWx1ZTxib29sLCBib29sLCBib29sPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzLCBmYWxzZSwgQXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4sICJCb29sZWFu
Iik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykK
K1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRP
YmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xF
cnJvcnMpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiwgSW5zcGVjdG9yT2JqZWN0Kj4ob2Jq
ZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RC
cmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVl
PFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiwgSW5zcGVj
dG9yT2JqZWN0Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVs
bHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOwogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXko
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCiB7Ci0gICAgcmV0dXJu
IGdldFByb3BlcnR5VmFsdWU8UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4sIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4sIEluc3BlY3RvckFycmF5Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc0FycmF5LCAiQXJyYXki
KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SW5zcGVjdG9yQXJyYXk+LCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+LCBJbnNwZWN0b3JBcnJheSo+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNBcnJh
eSwgIkFycmF5Iik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90
b2NvbEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiwgSW5zcGVjdG9yVmFsdWUqPihv
YmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhv
ZEJyaWRnZXM6OmFzVmFsdWUsICJWYWx1ZSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVl
PFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIEluc3BlY3Rv
clZhbHVlKj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0
ciwgQXNNZXRob2RCcmlkZ2VzOjphc1ZhbHVlLCAiVmFsdWUiKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKaW5kZXggYTk5ZTZlYS4uODZjYmQ5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaApAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyX2gKIAotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC00MCwzMCArNDAsMzEgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIElu
c3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXI+IHsKIHB1YmxpYzoKLSAgICBJ
bnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpIDogbV9iYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlcikgeyB9CisgICAgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKQorICAgICAg
ICA6IG1fYmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpIHsgfQogICAgIHZpcnR1
YWwgfkluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9y
T2JqZWN0PiYmIG1lc3NhZ2UpID0gMDsKIHByb3RlY3RlZDoKLSAgICBSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKik7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOwogCiAgICAgY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgQ2FsbGJhY2tCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FsbGJhY2tCYXNl
PiB7CiAgICAgcHVibGljOgotICAgICAgICBDYWxsYmFja0Jhc2UoUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIENhbGxiYWNrQmFzZShSZWY8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CiAKICAgICAgICAgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3Ry
aW5nJik7CiAgICAgICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2VudCA9IHRydWU7IH0K
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBzZW5kSWZBY3RpdmUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2Nh
dGlvbkVycm9yKTsKKyAgICAgICAgdm9pZCBzZW5kSWZBY3RpdmUoUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJv
cik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICAgICAgaW50IG1faWQ7CiAgICAg
ICAgIGJvb2wgbV9hbHJlYWR5U2VudDsKICAgICB9OwpAQCAtODIsMTcgKzgzLDE3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgcmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciopOwogICAgIHZv
aWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIHNlbmRSZXNwb25z
ZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3Qg
RXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcik7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9u
ZyBjYWxsSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0LCBjb25zdCBFcnJvclN0
cmluZyYgaW52b2NhdGlvbkVycm9yKTsKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsKLQotICAgIHN0YXRp
YyBpbnQgZ2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3Rh
dGljIGRvdWJsZSBnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAg
IHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsK
LSAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0VmFsdWUoSW5zcGVj
dG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnMpOworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25n
KiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGRhdGEpIGNv
bnN0OworCisgICAgc3RhdGljIGludCBnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBkb3VibGUgZ2V0RG91Ymxl
KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAg
IHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
PiYgcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9y
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29s
RXJyb3JzKTsKKyAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNw
ZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKIAogcHJpdmF0
ZToKICAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCmluZGV4IGFlMmE3Y2Qu
LjE4ZGYxNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckVudmlyb25tZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgpID0gMDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpID0g
MDsKKyAgICB2aXJ0dWFsIFJlZjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkg
PSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCmluZGV4
IDE0M2RlZjguLjI5NmYzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCkBAIC0zMSwxMiArMzEsMTMgQEAK
IAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBC
aW5kaW5nVHJhaXRzOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgT3B0T3V0cHV0IHsK
IHB1YmxpYzoKQEAgLTYzLDEyNiArNjQsNDIgQEAgcHJpdmF0ZToKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShPcHRPdXRwdXQpOwogfTsKIAotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyAiVHJhaXRz
IiB0eXBlIGZvciB0aGUgaW5wdXQgdHlwZSBULiBJdCBpcyBwcm9ncmFtbWVkIHVzaW5nIEMrKyB0
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgotLy8gdGVjaG5pcXVlLiBCeSBkZWZhdWx0IGl0IHNpbXBs
eSB0YWtlcyAiSXRlbVRyYWl0cyIgdHlwZSBmcm9tIFQsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0
aCB0aGUgYmFzZSB0eXBlcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQXJyYXlJdGVt
SGVscGVyIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6Okl0ZW1UcmFpdHMgVHJhaXRzOwotfTsK
LQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIEFycmF5IDogcHVibGljIEluc3BlY3RvckFy
cmF5QmFzZSB7CiBwcml2YXRlOgogICAgIEFycmF5KCkgeyB9CiAKLSAgICBJbnNwZWN0b3JBcnJh
eSogb3BlbkFjY2Vzc29ycygpCisgICAgSW5zcGVjdG9yQXJyYXkmIG9wZW5BY2Nlc3NvcnMoKQog
ICAgIHsKICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3RvckFycmF5KSA9PSBz
aXplb2YoQXJyYXk8VD4pLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbnNwZWN0b3JBcnJheSo+KHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5QmFzZSo+KHRoaXMp
KTsKKyAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxJbnNwZWN0b3JBcnJheSo+KHN0YXRpY19j
YXN0PEluc3BlY3RvckFycmF5QmFzZSo+KHRoaXMpKTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICB2
b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUPiB2YWx1ZSkKKyAgICB2b2lkIGFkZEl0ZW0oUmVmPFQ+
JiYgdmFsdWUpCiAgICAgewotICAgICAgICBBcnJheUl0ZW1IZWxwZXI8VD46OlRyYWl0czo6cHVz
aFJlZlB0cih0aGlzLT5vcGVuQWNjZXNzb3JzKCksIHZhbHVlKTsKKyAgICAgICAgb3BlbkFjY2Vz
c29ycygpLnB1c2hWYWx1ZSgmdmFsdWUuZ2V0KCkpOwogICAgIH0KIAotICAgIHZvaWQgYWRkSXRl
bShUIHZhbHVlKQorICAgIHZvaWQgYWRkSXRlbShSZWZQdHI8VD4mJiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIEFycmF5SXRlbUhlbHBlcjxUPjo6VHJhaXRzOjpwdXNoUmF3KHRoaXMtPm9wZW5BY2Nl
c3NvcnMoKSwgdmFsdWUpOworICAgICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaFZhbHVlKFdURjo6
bW92ZSh2YWx1ZSkpOwogICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBj
cmVhdGUoKQorICAgIAorICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheTxUPigpKTsKKyAgICAgICAgb3Bl
bkFjY2Vzc29ycygpLnB1c2hTdHJpbmcodmFsdWUpOwogICAgIH0KLX07CiAKLXN0cnVjdCBTdHJ1
Y3RJdGVtVHJhaXRzIHsKLSAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5
KiBhcnJheSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBhZGRJ
dGVtKGludCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwor
ICAgICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaEludGVnZXIodmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgUmVmPEFycmF5PFQ+PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQXJyYXk8VD4oKSk7CiAgICAgfQotfTsKLQotdGVtcGxhdGU8Pgotc3Ry
dWN0IEFycmF5SXRlbUhlbHBlcjxTdHJpbmc+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJheSogYXJyYXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVt
SGVscGVyPGludD4gewotICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBw
dXNoUmF3KEluc3BlY3RvckFycmF5KiBhcnJheSwgaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhcnJheS0+cHVzaEludGVnZXIodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07
Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPiB7Ci0gICAgc3Ry
dWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkq
IGFycmF5LCBkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNo
RG91YmxlKHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgQXJyYXlJdGVtSGVscGVyPGJvb2w+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAg
c3RhdGljIHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJheSogYXJyYXksIGJvb2wgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoQm9vbGVhbih2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNw
ZWN0b3JWYWx1ZT4gewotICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBw
dXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUp
OwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1I
ZWxwZXI8SW5zcGVjdG9yT2JqZWN0PiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0
IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewotICAgIHN0cnVjdCBUcmFpdHMgewot
ICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFy
cmF5LT5wdXNoQXJyYXkodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFByb3RvY29sOjpBcnJheTxUPj4g
ewotICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKElu
c3BlY3RvckFycmF5KiBhcnJheSwgUGFzc1JlZlB0cjxQcm90b2NvbDo6QXJyYXk8VD4+IHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH07CiB9OwogCiAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgUHJvdG9jb2wgYW5kIG90
aGVyIEluc3BlY3RvciB0eXBlcyBhcmUgcHJvdmlkZWQgYnkKQEAgLTE5Miw4ICsxMDksOSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEJpbmRpbmdUcmFpdHMgewogICAgIHR5cGVkZWYg
VCBCaW5kaW5nVHlwZTsKIAorICAgIHN0YXRpYyB2b2lkIHB1c2goSW5zcGVjdG9yQXJyYXkmLCBC
aW5kaW5nVHlwZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JWYWx1ZTo6VHlwZSB0eXBlVGFnKCk7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KTsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBzdGF0aWMgdm9pZCBh
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSopOwogI2VuZGlmIC8vICFB
U1NFUlRfRElTQUJMRUQKQEAgLTIwNCwxNSArMTIyLDE2IEBAIHN0cnVjdCBQcmltaXRpdmVCaW5k
aW5nVHJhaXRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgYXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7CisgICAgICAgIEFTU0VSVF9BUkcodmFs
dWUsIHZhbHVlICYmIHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7CiAgICAgfQogI2VuZGlmIC8vICFB
U1NFUlRfRElTQUJMRUQKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQmluZGlu
Z1RyYWl0czxQcm90b2NvbDo6QXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJh
eTxUPj4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAg
c3RhdGljIFJlZlB0cjxBcnJheTxUPj4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3RvclZhbHVl
PiYmIHZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OwogICAgICAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CkBAIC0yMjYsNiArMTQ1LDcgQEAgc3RydWN0IEJp
bmRpbmdUcmFpdHM8UHJvdG9jb2w6OkFycmF5PFQ+PiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVl
KiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKICAgICAgICAgYm9vbCBjYXN0U3VjY2Vl
ZGVkID0gdmFsdWUtPmFzQXJyYXkoYXJyYXkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDJhMmEwYmMuLjQyYTZiNWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHAKQEAgLTM0Nyw3ICszNDcsNyBAQCBib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciog
c3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgb3V0cHV0KQogICAgIHJldHVybiB0cnVl
OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFy
KiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB2YWx1ZVRva2VuRW5kLCBp
bnQgZGVwdGgpCitSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIq
IHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHZhbHVlVG9rZW5FbmQsIGlu
dCBkZXB0aCkKIHsKICAgICBpZiAoZGVwdGggPiBzdGFja0xpbWl0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTM4NSwxNCArMzg1LDE0IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFSUkFZX0JFR0lOOiB7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cisg
ICAgICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CiAgICAgICAgIHRva2VuID0gcGFyc2VUb2tl
bihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKICAgICAgICAgd2hpbGUgKHRv
a2VuICE9IEFSUkFZX0VORCkgewogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBh
cnJheU5vZGUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsK
ICAgICAgICAgICAgIGlmICghYXJyYXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShhcnJheU5vZGUpOworICAgICAgICAg
ICAgYXJyYXktPnB1c2hWYWx1ZShXVEY6Om1vdmUoYXJyYXlOb2RlKSk7CiAKICAgICAgICAgICAg
IC8vIEFmdGVyIGEgbGlzdCB2YWx1ZSwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0
aGUgbGlzdC4KICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CkBAIC00MDksMTEgKzQwOSwx
MSBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29ucwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tl
biAhPSBBUlJBWV9FTkQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmVz
dWx0ID0gYXJyYXkucmVsZWFzZSgpOworICAgICAgICByZXN1bHQgPSBXVEY6Om1vdmUoYXJyYXkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBPQkpFQ1RfQkVHSU46IHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKICAgICAgICAgdG9rZW4g
PSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOwogICAgICAg
ICB3aGlsZSAodG9rZW4gIT0gT0JKRUNUX0VORCkgewpAQCAtNDMyLDcgKzQzMiw3IEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25z
dCBVQ2hhciogZW5kLCBjb25zCiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIGRlcHRoICsgMSk7CiAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIG9iamVj
dC0+c2V0VmFsdWUoa2V5LCBXVEY6Om1vdmUodmFsdWUpKTsKICAgICAgICAgICAgIHN0YXJ0ID0g
dG9rZW5FbmQ7CiAKICAgICAgICAgICAgIC8vIEFmdGVyIGEga2V5L3ZhbHVlIHBhaXIsIHdlIGV4
cGVjdCBhIGNvbW1hIG9yIHRoZSBlbmQgb2YgdGhlCkBAIC00NTAsNyArNDUwLDcgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0
IFVDaGFyKiBlbmQsIGNvbnMKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4gIT0gT0JKRUNU
X0VORCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQgPSBvYmpl
Y3QucmVsZWFzZSgpOworICAgICAgICByZXN1bHQgPSBXVEY6Om1vdmUob2JqZWN0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC03MzksOCArNzM5LDggQEAgSW5zcGVjdG9yT2JqZWN0KiBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpvcGVuQWNjZXNzb3JzKCkKIAogYm9vbCBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgb3V0cHV0KSBjb25z
dAogewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAg
aWYgKCF2YWx1ZSkKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICgh
Z2V0VmFsdWUobmFtZSwgdmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOwpAQCAtNzQ4LDQwICs3NDgsMzkgQEAgYm9vbCBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYg
b3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFN0cmluZyhjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgb3V0cHV0KSBjb25zdAogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91
dHB1dCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPYmplY3RC
YXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorYm9vbCBJbnNwZWN0b3JP
YmplY3RCYXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgb3V0cHV0KSBjb25zdAogewotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlID0gZ2V0KG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgaWYgKCFnZXRWYWx1
ZShuYW1lLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdDsKLSAgICB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KG91dHB1
dCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3Rvck9iamVjdEJhc2U6
OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yT2JqZWN0
QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUg
PSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICBpZiAoIWdldFZhbHVlKG5hbWUs
IHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiByZXN1bHQ7Ci0gICAgdmFsdWUtPmFzQXJyYXkocmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gdmFsdWUtPmFzQXJyYXkob3V0cHV0KTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0KGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiBvdXRwdXQpIGNvbnN0
CiB7Ci0gICAgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1l
KTsKLSAgICBpZiAoaXQgPT0gbV9kYXRhLmVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gaXQtPnZhbHVlOworICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGZp
bmRSZXN1bHQgPSBtX2RhdGEuZmluZChuYW1lKTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBtX2Rh
dGEuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IGZpbmRSZXN1
bHQtPnZhbHVlOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEluc3BlY3Rvck9iamVjdEJh
c2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03OTksMTMgKzc5OCwxMyBAQCB2b2lk
IEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNv
bnN0CiB7CiAgICAgb3V0cHV0LmFwcGVuZCgneycpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9vcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGF0YS5maW5kKG1fb3JkZXJbaV0pOwotICAgICAgICBBU1NFUlQoaXQgIT0g
bV9kYXRhLmVuZCgpKTsKKyAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9kYXRhLmZpbmQobV9v
cmRlcltpXSk7CisgICAgICAgIEFTU0VSVChmaW5kUmVzdWx0ICE9IG1fZGF0YS5lbmQoKSk7CiAg
ICAgICAgIGlmIChpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwotICAgICAgICBk
b3VibGVRdW90ZVN0cmluZyhpdC0+a2V5LCBvdXRwdXQpOworICAgICAgICBkb3VibGVRdW90ZVN0
cmluZyhmaW5kUmVzdWx0LT5rZXksIG91dHB1dCk7CiAgICAgICAgIG91dHB1dC5hcHBlbmQoJzon
KTsKLSAgICAgICAgaXQtPnZhbHVlLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICAgICAgZmluZFJl
c3VsdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQpOwogICAgIH0KICAgICBvdXRwdXQuYXBwZW5k
KCd9Jyk7CiB9CkBAIC04NDUsNTAgKzg0NCw1MCBAQCBJbnNwZWN0b3JBcnJheUJhc2U6Okluc3Bl
Y3RvckFycmF5QmFzZSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3Bl
Y3RvckFycmF5QmFzZTo6Z2V0KHNpemVfdCBpbmRleCkKK1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
SW5zcGVjdG9yQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbV9kYXRhLnNpemUoKSk7CiAgICAgcmV0dXJu
IG1fZGF0YVtpbmRleF07CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JPYmplY3QpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3Rvck9iamVjdCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKQorUmVmPEluc3BlY3Rv
ckFycmF5PiBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckFycmF5KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JB
cnJheSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVlOjpu
dWxsKCkKK1JlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yVmFsdWUpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvclZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHJpbmc+
IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCitSZWY8SW5zcGVj
dG9yU3RyaW5nPiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3RyaW5nKHZhbHVlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3RyaW5nKHZhbHVlKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShjb25zdCBjaGFy
KiB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JTdHJpbmc+IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKGNv
bnN0IGNoYXIqIHZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3Ry
aW5nKHZhbHVlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3RyaW5nKHZh
bHVlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFz
aWNWYWx1ZTo6Y3JlYXRlKGJvb2wgdmFsdWUpCitSZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGJvb2wgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3RvckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShpbnQgdmFsdWUpCitS
ZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGludCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFs
dWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVl
KSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoZG91YmxlIHZhbHVlKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAppbmRleCAyOTZhZjdkLi41NmE4ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpZm5kZWYgSW5zcGVjdG9yVmFsdWVzX2gKICNkZWZpbmUgSW5zcGVjdG9yVmFsdWVzX2gKIAot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU0LDcg
KzUzLDcgQEAgcHVibGljOgogICAgICAgICA6IG1fdHlwZShUeXBlOjpOdWxsKSB7IH0KICAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JWYWx1ZSgpIHsgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IG51bGwoKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclZhbHVlPiBudWxs
KCk7CiAKICAgICBlbnVtIGNsYXNzIFR5cGUgewogICAgICAgICBOdWxsID0gMCwKQEAgLTk5LDkg
Kzk4LDkgQEAgcHJpdmF0ZToKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckJhc2lj
VmFsdWUgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgewogcHVibGljOgogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGJvb2wpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShpbnQpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShkb3VibGUpOworICAgIHN0YXRp
YyBSZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGJvb2wpOworICAgIHN0YXRpYyBSZWY8
SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGludCk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0
b3JCYXNpY1ZhbHVlPiBjcmVhdGUoZG91YmxlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xl
YW4oYm9vbCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIE51bWJlcnMgZnJvbSB0aGUgZnJvbnRl
bmQgYXJlIGFsd2F5cyBwYXJzZWQgYXMgZG91Ymxlcywgc28gd2UgYWxsb3cKQEAgLTEzOCw4ICsx
MzcsOCBAQCBwcml2YXRlOgogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JTdHJp
bmcgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0
aWMgUmVmPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRp
YyBSZWY8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgY2hhciopOwogCiAgICAgdmlydHVh
bCBib29sIGFzU3RyaW5nKFN0cmluZyYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTc3
LDkgKzE3Niw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEludGVnZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBpbnQpOwogICAgIHZvaWQgc2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91
YmxlKTsKICAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPik7Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+KTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheUJhc2U+KTsKKyAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmKTsK
KyAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3RCYXNlPiYmKTsKKyAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVm
UHRyPEluc3BlY3RvckFycmF5QmFzZT4mJik7CiAKICAgICBpdGVyYXRvciBmaW5kKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwpAQCAtMTg4LDIzICsxODcsMjUgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgZ2V0Qm9v
bGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkgY29uc3Q7CiAgICAgdGVtcGxh
dGU8Y2xhc3MgVD4gYm9vbCBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRwdXQp
IGNvbnN0CiAgICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0
KG5hbWUpOwotICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHZhbHVlOworICAgICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICByZXR1cm4gdmFsdWUtPmFzRG91YmxlKG91dHB1
dCk7CiAgICAgfQogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0SW50ZWdlcihjb25zdCBT
dHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgICAgIGlmICghZ2V0VmFsdWUo
bmFtZSwgdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIHJldHVy
biB2YWx1ZS0+YXNJbnRlZ2VyKG91dHB1dCk7CiAgICAgfQogCiAgICAgYm9vbCBnZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KGNvbnN0IFN0cmlu
ZyYgbmFtZSkgY29uc3Q7CisgICAgYm9vbCBnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpIGNvbnN0OworICAgIGJvb2wgZ2V0QXJyYXkoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JikgY29uc3Q7CisgICAgYm9vbCBn
ZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mKSBjb25z
dDsKIAogICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKQEAgLTIyNyw3ICsy
MjgsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JPYmplY3QgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgSlNfRVhQT1JU
X1BSSVZBVEUgUmVmPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlKCk7CiAKICAgICB1c2luZyBJbnNw
ZWN0b3JPYmplY3RCYXNlOjphc09iamVjdDsKIApAQCAtMjQ2LDcgKzI0Nyw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6Z2V0T2JqZWN0OwogICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJh
c2U6OmdldEFycmF5OwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldDsKKyAgICB1
c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRWYWx1ZTsKIAogICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdEJhc2U6OnJlbW92ZTsKIApAQCAtMjczLDExICsyNzQsMTEgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgcHVzaEludGVnZXIoaW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsK
ICAgICB2b2lkIHB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4pOwotICAgIHZvaWQgcHVzaE9iamVjdChQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4pOwotICAgIHZvaWQgcHVzaEFycmF5KFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KTsKKyAgICB2b2lkIHB1c2hWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
JiYpOworICAgIHZvaWQgcHVzaE9iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4mJik7
CisgICAgdm9pZCBwdXNoQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5QmFzZT4mJik7CiAKLSAg
ICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGdldChzaXplX3QgaW5kZXgpOwogCiAgICAgdmlydHVhbCB2b2lk
IHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0y
OTUsNyArMjk2LDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW5zcGVjdG9yQXJyYXkgOiBwdWJsaWMg
SW5zcGVjdG9yQXJyYXlCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZB
VEUgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3JlYXRlKCk7CisgICAgc3RhdGljIEpTX0VY
UE9SVF9QUklWQVRFIFJlZjxJbnNwZWN0b3JBcnJheT4gY3JlYXRlKCk7CiAKICAgICB1c2luZyBJ
bnNwZWN0b3JBcnJheUJhc2U6OmFzQXJyYXk7CiAKQEAgLTM0NCwyNCArMzQ1LDI0IEBAIGlubGlu
ZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsCiAgICAgc2V0VmFsdWUobmFtZSwgSW5zcGVjdG9yU3RyaW5nOjpj
cmVhdGUodmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKK2lubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2
YWx1ZSk7Ci0gICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAg
aWYgKG1fZGF0YS5zZXQobmFtZSwgV1RGOjptb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAg
ICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0QmFzZT4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4mJiB2
YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIHZh
bHVlKS5pc05ld0VudHJ5KQorICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIFdURjo6bW92ZSh2YWx1
ZSkpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxp
bmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiB2YWx1ZSkKK2lubGluZSB2b2lkIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5QmFzZT4mJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmICht
X2RhdGEuc2V0KG5hbWUsIHZhbHVlKS5pc05ld0VudHJ5KQorICAgIGlmIChtX2RhdGEuc2V0KG5h
bWUsIFdURjo6bW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5k
KG5hbWUpOwogfQogCkBAIC0zODUsMjIgKzM4NiwyMiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JB
cnJheUJhc2U6OnB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBtX2RhdGEuYXBw
ZW5kKEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIElu
c3BlY3RvckFycmF5QmFzZTo6cHVzaFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKQoraW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoVmFsdWUoUmVmUHRyPElu
c3BlY3RvclZhbHVlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgbV9kYXRh
LmFwcGVuZCh2YWx1ZSk7CisgICAgbV9kYXRhLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKIH0K
IAotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6
cHVzaE9iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKICAgICBB
U1NFUlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOworICAgIG1fZGF0YS5hcHBl
bmQoV1RGOjptb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFz
ZTo6cHVzaEFycmF5KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoraW5saW5lIHZv
aWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5QmFz
ZT4mJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQodmFs
dWUpOworICAgIG1fZGF0YS5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCmluZGV4IDUwMGFm
ZTIuLmE3ZmIxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTc1LDE5ICs3
NSwxOCBAQCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OkpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudChJbnNwZWN0b3JDb25zb2xlQWdlbnQqCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4gcHJwQXJndW1lbnRzKQordm9pZCBKU0dsb2JhbE9iamVjdENv
bnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1
bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cyA9IHBycEFyZ3VtZW50czsKIAogICAgIGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKQotICAgICAgICBDb25zb2xlQ2xpZW50OjpwcmludENv
bnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBl
LCBsZXZlbCwgZXhlYywgYXJndW1lbnRzKTsKKyAgICAgICAgQ29uc29sZUNsaWVudDo6cHJpbnRD
b25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlw
ZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cy5jb3B5UmVmKCkpOwogCiAgICAgU3RyaW5nIG1lc3Nh
Z2U7CiAgICAgYXJndW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcobWVzc2FnZSk7Ci0g
ICAgbV9jb25zb2xlQWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZTo6Q29u
c29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGV4ZWMsIGFyZ3VtZW50cy5yZWxlYXNlKCkp
OworICAgIG1fY29uc29sZUFnZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2U6
OkNvbnNvbGVBUEksIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBleGVjLCBXVEY6Om1vdmUoYXJndW1l
bnRzKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpjb3VudChFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lk
IEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnQoRXhlY1N0YXRlKiBleGVjLCBSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKICAgICBtX2NvbnNvbGVBZ2VudC0+
Y291bnQoZXhlYywgYXJndW1lbnRzKTsKIH0KQEAgLTExMCwxMCArMTA5LDEwIEBAIHZvaWQgSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0aW1lKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYg
dGl0bGUpCiB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZUVuZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZXhlYywgMSkp
OwotICAgIG1fY29uc29sZUFnZW50LT5zdG9wVGltaW5nKHRpdGxlLCBjYWxsU3RhY2sucmVsZWFz
ZSgpKTsKKyAgICBtX2NvbnNvbGVBZ2VudC0+c3RvcFRpbWluZyh0aXRsZSwgV1RGOjptb3ZlKGNh
bGxTdGFjaykpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZVN0
YW1wKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPikKK3ZvaWQgSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAoRXhlY1N0YXRlKiwgUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4mJikKIHsKICAgICAvLyBGSVhNRTogSlNDb250ZXh0IGluc3BlY3Rpb24gbmVl
ZHMgYSB0aW1lbGluZS4KICAgICB3YXJuVW5pbXBsZW1lbnRlZChBU0NJSUxpdGVyYWwoImNvbnNv
bGUudGltZVN0YW1wIikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmgKaW5kZXggZjRhYjkxZS4u
ZTM1ZTliNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ds
b2JhbE9iamVjdENvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oCkBAIC00MywxNyArNDMsMTcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dUb1N5c3RlbUNvbnNvbGUoKTsK
IAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KEpTQzo6RXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiYmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZShKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBw
cm9maWxlRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHRpbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRp
dGxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGltZUVuZChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0aW1lU3Rh
bXAoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHdhcm5Vbmlt
cGxlbWVudGVkKGNvbnN0IFN0cmluZyYgbWV0aG9kKTsKLSAgICB2b2lkIGludGVybmFsQWRkTWVz
c2FnZShNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBpbnRlcm5hbEFkZE1lc3NhZ2UoTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiYmKTsKIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGJjOGM0YjEu
LmI4YWRlY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAg
LTIyMiw5ICsyMjIsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6
ZnJvbnRlbmRJbml0aWFsaXplZCgpCiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxTdG9wd2F0Y2g+
IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkK
K1JlZjxTdG9wd2F0Y2g+IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0
aW9uU3RvcHdhdGNoKCkKIHsKLSAgICByZXR1cm4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAg
cmV0dXJuIG1fZXhlY3V0aW9uU3RvcHdhdGNoLmNvcHlSZWYoKTsKIH0KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JD
b250cm9sbGVyLmgKaW5kZXggYTYwZDQ3Yi4uMmEwMjE4NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiwgaW50KSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FsbElu
amVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKSBvdmVycmlkZSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBSZWY8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpIG92
ZXJyaWRlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAg
ICAgdmlydHVhbCBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQqIGF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
YXVnbWVudGluZ0NsaWVudDsgfSAKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIElu
c3BlY3RvckFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7Ci0gICAgUmVmUHRy
PFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKKyAgICBSZWY8V1RGOjpTdG9w
d2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOwogICAgIGJvb2wgbV9pbmNsdWRlTmF0aXZlQ2Fs
bFN0YWNrV2l0aEV4Y2VwdGlvbnM7CiAgICAgYm9vbCBtX2lzQXV0b21hdGljSW5zcGVjdGlvbjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxs
RnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJh
bWUuY3BwCmluZGV4IDdjOTUwZTguLjI4YzJhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAg
Ym9vbCBTY3JpcHRDYWxsRnJhbWU6OmlzRXF1YWwoY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBvKSBj
b25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPiBTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0KCkgY29uc3QKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxs
RnJhbWU+IFNjcmlwdENhbGxGcmFtZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAogewog
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRGdW5jdGlvbk5hbWUobV9mdW5jdGlvbk5hbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuaAppbmRleCA2YTlj
ZDc3Li4wMTdkZGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
U2NyaXB0Q2FsbEZyYW1lLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNF
cXVhbChjb25zdCBTY3JpcHRDYWxsRnJhbWUmKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJh
bWU+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsK
ICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwCmluZGV4IDZmODFhNTguLmFhNDUyYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAK
QEAgLTM2LDE0ICszNiwxNCBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+IFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKCkKK1JlZjxTY3JpcHRD
YWxsU3RhY2s+IFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNjcmlwdENhbGxTdGFjayk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NyaXB0
Q2FsbFN0YWNrKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IFNjcmlwdENhbGxT
dGFjazo6Y3JlYXRlKFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+JiBmcmFtZXMpCitSZWY8U2NyaXB0
Q2FsbFN0YWNrPiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZShWZWN0b3I8U2NyaXB0Q2FsbEZyYW1l
PiYgZnJhbWVzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0Q2FsbFN0YWNrKGZy
YW1lcykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcmlwdENhbGxTdGFjayhmcmFtZXMp
KTsKIH0KIAogU2NyaXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2soKQpAQCAtMTA3LDEyICsx
MDcsMTIgQEAgYm9vbCBTY3JpcHRDYWxsU3RhY2s6OmlzRXF1YWwoU2NyaXB0Q2FsbFN0YWNrKiBv
KSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1l
Pj4gU2NyaXB0Q2FsbFN0YWNrOjpidWlsZEluc3BlY3RvckFycmF5KCkgY29uc3QKK1JlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxs
RnJhbWU+PiBTY3JpcHRDYWxsU3RhY2s6OmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSBjb25zdAogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpDb25zb2xlOjpDYWxsRnJhbWU+PiBmcmFtZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGZyYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGZyYW1lcy0+YWRkSXRlbSht
X2ZyYW1lcy5hdChpKS5idWlsZEluc3BlY3Rvck9iamVjdCgpKTsKLSAgICByZXR1cm4gZnJhbWVz
OworICAgIHJldHVybiBXVEY6Om1vdmUoZnJhbWVzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaAppbmRleCA2M2Uz
Y2UxLi42ZGI3ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
U2NyaXB0Q2FsbFN0YWNrLmgKQEAgLTQ3LDggKzQ3LDggQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgU2NyaXB0Q2FsbFN0YWNrIDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0Q2FsbFN0YWNrPiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhDYWxsU3RhY2tTaXplVG9DYXB0
dXJlID0gMjAwOwogICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4g
Y3JlYXRlKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGUo
VmVjdG9yPFNjcmlwdENhbGxGcmFtZT4mKTsKKyAgICBzdGF0aWMgUmVmPFNjcmlwdENhbGxTdGFj
az4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZShWZWN0
b3I8U2NyaXB0Q2FsbEZyYW1lPiYpOwogCiAgICAgflNjcmlwdENhbGxTdGFjaygpOwogCkBAIC02
Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXF1YWwoU2NyaXB0Q2FsbFN0YWNrKikg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1l
Pj4gYnVpbGRJbnNwZWN0b3JBcnJheSgpIGNvbnN0OworICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBidWls
ZEluc3BlY3RvckFycmF5KCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50
LmNwcAppbmRleCA3NjVhZjk5Li40ZjY5NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC03Miw3
ICs3Miw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAg
bV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCkK
LSAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCwgbV9wZW5kaW5nSW5z
cGVjdERhdGEuc2Vjb25kKTsKKyAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5m
aXJzdC5jb3B5UmVmKCksIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5jb3B5UmVmKCkpOwog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1f
cGVuZGluZ0V4dHJhRG9tYWluc0RhdGEpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmluaXRpYWxpemVkKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmZyb250
ZW5kSW5pdGlhbGl6ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChQYXNz
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG9iamVjdFRvSW5zcGVjdCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6
aW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3RU
b0luc3BlY3QsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGludHMpCiB7CiAgICAgaWYgKG1f
ZW5hYmxlZCAmJiBtX2Zyb250ZW5kRGlzcGF0Y2hlcikgewogICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+aW5zcGVjdChvYmplY3RUb0luc3BlY3QsIGhpbnRzKTsKQEAgLTEzMCw5ICsxMzAs
OSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWluKGNvbnN0IFN0cmlu
ZyYgZG9tYWluTmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBkb21haW5OYW1lcyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBkb21haW5OYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGRvbWFpbk5hbWVzLT5hZGRJdGVtKGRvbWFp
bk5hbWUpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hY3RpdmF0ZUV4dHJhRG9tYWlucyhk
b21haW5OYW1lcy5yZWxlYXNlKCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hY3RpdmF0
ZUV4dHJhRG9tYWlucyhXVEY6Om1vdmUoZG9tYWluTmFtZXMpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JBZ2VudDo6YWN0aXZhdGVFeHRyYURvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dHJh
RG9tYWlucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IGM5MGUyNDIuLjczMGRjZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdl
bnQuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZWQoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5zcGVjdChQYXNzUmVmUHRyPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG9iamVjdFRvSW5zcGVjdCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKKyAgICB2b2lkIGluc3BlY3QoUmVmUHRyPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIGhpbnRzKTsKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDQ3YWJk
ZmQuLjAzYmQ0OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0xNDEs
MTYgKzE0MSwxNiBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1c2VkKCkKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2VydChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVnU2VydmVyKCkucGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQYXVzZU9uRXhjZXB0aW9ucykgewot
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkFzc2VydFBhdXNl
UmVhc29uPiByZWFzb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QXNzZXJ0UGF1
c2VSZWFzb246OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkFzc2VydFBhdXNlUmVhc29uPiByZWFzb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb246OmNyZWF0ZSgpLnJlbGVhc2UoKTsKICAgICAgICAg
aWYgKCFtZXNzYWdlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmVhc29uLT5zZXRNZXNzYWdlKG1l
c3NhZ2UpOwogICAgICAgICBicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERp
c3BhdGNoZXI6OlJlYXNvbjo6QXNzZXJ0LCByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKSk7CiAgICAg
fQogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
QnJlYWtwb2ludENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBj
b2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBhY3Rpb25zLCBib29sIGlzUmVnZXgsIGJvb2wgYXV0b0NvbnRpbnVlKQorc3RhdGljIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZShjb25zdCBT
dHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgY29uZGl0aW9uLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBhY3Rpb25zLCBib29sIGlzUmVn
ZXgsIGJvb2wgYXV0b0NvbnRpbnVlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInVybCIpLCB1
cmwpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJsaW5l
TnVtYmVyIiksIGxpbmVOdW1iZXIpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJjb2x1bW5OdW1iZXIiKSwgY29sdW1uTnVtYmVyKTsKQEAgLTIzOSw3ICsy
MzksNyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJv
bVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJvclN0cgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlv
bmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCog
Y29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBv
dXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCit2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlv
bmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCog
Y29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCog
b3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKQog
ewogICAgIGxvY2F0aW9ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogICAgIGlmICghb3B0aW9u
YWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAgLTI2MSw5ICsyNjEsOSBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBsaQogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2U7CiAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwogICAgIGlmIChvcHRpb25zKSB7Ci0gICAgICAg
ICgqb3B0aW9ucyktPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBjb25kaXRp
b24pOwotICAgICAgICAoKm9wdGlvbnMpLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0Nv
bnRpbnVlIiksIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIGFjdGlvbnMgPSAoKm9wdGlvbnMpLT5n
ZXRBcnJheShBU0NJSUxpdGVyYWwoImFjdGlvbnMiKSk7CisgICAgICAgIG9wdGlvbnMtPmdldFN0
cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBjb25kaXRpb24pOworICAgICAgICBvcHRp
b25zLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51
ZSk7CisgICAgICAgIG9wdGlvbnMtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpLCBh
Y3Rpb25zKTsKICAgICB9CiAKICAgICBCcmVha3BvaW50QWN0aW9ucyBicmVha3BvaW50QWN0aW9u
czsKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJy
ZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9u
ID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkZW50aWZpZXIsIGl0LT5rZXksIGJyZWFr
cG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICBsb2NhdGlvbnMtPmFk
ZEl0ZW0obG9jYXRpb24pOworICAgICAgICAgICAgbG9jYXRpb25zLT5hZGRJdGVtKFdURjo6bW92
ZShsb2NhdGlvbikpOwogICAgIH0KICAgICAqb3V0QnJlYWtwb2ludElkZW50aWZpZXIgPSBicmVh
a3BvaW50SWRlbnRpZmllcjsKIH0KQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0aWMgYm9vbCBwYXJz
ZUxvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0JiBsb2Nh
dGlvbiwgSgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBv
dXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElk
KiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQogewogICAgIEpTQzo6U291cmNlSUQg
c291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKQEAgLTMxMiw5ICszMTIsOSBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdAogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2U7CiAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwogICAgIGlmIChvcHRpb25zKSB7Ci0g
ICAgICAgICgqb3B0aW9ucyktPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBj
b25kaXRpb24pOwotICAgICAgICAoKm9wdGlvbnMpLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgi
YXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIGFjdGlvbnMgPSAoKm9wdGlv
bnMpLT5nZXRBcnJheShBU0NJSUxpdGVyYWwoImFjdGlvbnMiKSk7CisgICAgICAgIG9wdGlvbnMt
PmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBjb25kaXRpb24pOworICAgICAg
ICBvcHRpb25zLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9D
b250aW51ZSk7CisgICAgICAgIG9wdGlvbnMtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9u
cyIpLCBhY3Rpb25zKTsKICAgICB9CiAKICAgICBCcmVha3BvaW50QWN0aW9ucyBicmVha3BvaW50
QWN0aW9uczsKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcAogICAg
IH0KIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
bG9jYXRpb24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlv
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgbG9jYXRpb24pCiB7CiAgICAgaWYgKG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElE
ICE9IEpTQzo6bm9CcmVha3BvaW50SUQpIHsKICAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5y
ZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEKTsKQEAgLTM2
OCw3ICszNjgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgcmVzdW1lKGVycm9yU3Ry
aW5nKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIsIEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0
IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJjZUlE
IHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQogewogICAgIFNj
cmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNl
SUQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCkBAIC0zODgs
MTEgKzM4OCwxMiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzbwogICAgICAgICBkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElEcy5zZXQoYnJlYWtwb2ludElkZW50aWZpZXIsIFZlY3RvcjxKU0M6OkJy
ZWFrcG9pbnRJRD4oKSkuaXRlcmF0b3I7CiAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRCk7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKKyAgICBhdXRv
IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVh
dGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoU3RyaW5nOjpudW1iZXIoc291cmNlSUQpKQotICAg
ICAgICAuc2V0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVyKTsKKyAgICAgICAgLnNldExpbmVO
dW1iZXIoYWN0dWFsTGluZU51bWJlcikKKyAgICAgICAgLnJlbGVhc2UoKTsKICAgICBsb2NhdGlv
bi0+c2V0Q29sdW1uTnVtYmVyKGFjdHVhbENvbHVtbk51bWJlcik7Ci0gICAgcmV0dXJuIGxvY2F0
aW9uOworICAgIHJldHVybiBXVEY6Om1vdmUobG9jYXRpb24pOwogfQogCiB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0
IFN0cmluZyYgc2NyaXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5
cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQpAQCAtNDMwLDEzICs0MzEsMTMgQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdAogICAgIGluamVjdGVkU2NyaXB0LmdldEZ1bmN0aW9uRGV0YWlscyhl
cnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxl
UGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbiBicmVha1JlYXNvbiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhKQogewog
ICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwotICAgIG1fYnJlYWtBdXhEYXRhID0gZGF0
YTsKKyAgICBtX2JyZWFrQXV4RGF0YSA9IFdURjo6bW92ZShkYXRhKTsKICAgICBzY3JpcHREZWJ1
Z1NlcnZlcigpLnNldFBhdXNlT25OZXh0U3RhdGVtZW50KHRydWUpOwogfQogCkBAIC01NDQsMTIg
KzU0NSwxNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldE92ZXJsYXlNZXNzYWdl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKikKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4
dCkKIHsKICAgICBpZiAoc2NyaXB0RGVidWdTZXJ2ZXIoKS5wYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KCkgIT0gSlNDOjpEZWJ1Z2dlcjo6RG9udFBhdXNlT25FeGNlcHRpb25zKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q1NQVmlvbGF0aW9uUGF1c2VSZWFz
b24+IHJlYXNvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9sYXRpb25Q
YXVzZVJlYXNvbjo6Y3JlYXRlKCkuc2V0RGlyZWN0aXZlKGRpcmVjdGl2ZVRleHQpOworICAgICAg
ICBhdXRvIHJlYXNvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9sYXRp
b25QYXVzZVJlYXNvbjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXREaXJlY3RpdmUoZGlyZWN0
aXZlVGV4dCkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrUHJvZ3JhbShJ
bnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpDU1BWaW9sYXRpb24s
IHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpKTsKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKCkKK1JlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxGcmFtZXMoKQog
ewogICAgIGlmICghbV9wYXVzZWRTY3JpcHRTdGF0ZSkKICAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpjcmVhdGUoKTsKQEAgLTYwNiw3ICs2MDksOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlw
dAogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjb25k
aXRpb24iKSwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAgICAgICBicmVha3BvaW50T2JqZWN0
LT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGJyZWFrcG9pbnQuYXV0
b0NvbnRpbnVlKTsKICAgICAgICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYWN0aW9ucyA9IGJyZWFrcG9pbnRPYmplY3QtPmdldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhY3Rpb25zOworICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRBcnJheShBU0NJSUxpdGVy
YWwoImFjdGlvbnMiKSwgYWN0aW9ucyk7CiAgICAgICAgIGlmICghYnJlYWtwb2ludEFjdGlvbnNG
cm9tUHJvdG9jb2woZXJyb3JTdHJpbmcsIGFjdGlvbnMsICZicmVha3BvaW50LmFjdGlvbnMpKSB7
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNjY1LDE0ICs2NjksMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVh
a3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLAogewogICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmlu
amVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4gcGF5bG9hZCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoc2Ft
cGxlLCBvYmplY3RHcm91cEZvckJyZWFrcG9pbnRBY3Rpb24oYWN0aW9uKSk7Ci0gICAgUmVmUHRy
PFByb3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU+IHJlc3VsdCA9IFByb3RvY29sOjpEZWJ1
Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6
RGVidWdnZXI6OlByb2JlU2FtcGxlOjpjcmVhdGUoKQogICAgICAgICAuc2V0UHJvYmVJZChhY3Rp
b24uaWRlbnRpZmllcikKICAgICAgICAgLnNldEJhdGNoSWQoYmF0Y2hJZCkKICAgICAgICAgLnNl
dFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAuc2V0VGltZXN0YW1wKG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmV4ZWN1dGlvblN0b3B3YXRjaCgpLT5l
bGFwc2VkVGltZSgpKQotICAgICAgICAuc2V0UGF5bG9hZChwYXlsb2FkLnJlbGVhc2UoKSk7Cisg
ICAgICAgIC5zZXRQYXlsb2FkKHBheWxvYWQucmVsZWFzZSgpKQorICAgICAgICAucmVsZWFzZSgp
OwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNhbXBsZVByb2JlKHJlc3VsdC5yZWxl
YXNlKCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRTYW1wbGVQcm9iZShXVEY6Om1v
dmUocmVzdWx0KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGlu
dWUoKQpAQCAtNjg3LDEwICs2OTIsMTAgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJv
Z3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVh
c29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCiB7CiAgICAgbV9icmVha1JlYXNv
biA9IGJyZWFrUmVhc29uOwotICAgIG1fYnJlYWtBdXhEYXRhID0gZGF0YTsKKyAgICBtX2JyZWFr
QXV4RGF0YSA9IFdURjo6bW92ZShkYXRhKTsKICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmJyZWFr
UHJvZ3JhbSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggMGFlNzMz
MS4uOWE3NGNjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtNDIsNyArNDIs
NiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CiAKQEAgLTc0LDEwICs3MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZl
KEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBp
bnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRC
cmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQq
IG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9p
bnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRp
Zmllcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJv
clN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNj
cmlwdElELCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5z
aXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0
Y2g+PiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Jikgb3ZlcnJpZGU7CkBAIC05NCw5ICs5Myw5IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKIAotICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0
U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJl
YWtSZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSk7CiAgICAgdm9pZCBjYW5j
ZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwotICAgIHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3Rv
ckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpOwogICAgIHZvaWQgc2NyaXB0RXhlY3V0aW9uQmxvY2tl
ZEJ5Q1NQKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCk7CiAKICAgICBjbGFzcyBMaXN0ZW5l
ciB7CkBAIC0xMzIsNyArMTMxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGlkQ2xlYXJHbG9i
YWxPYmplY3QoKTsKIAogcHJpdmF0ZToKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJy
ZW50Q2FsbEZyYW1lcygpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gY3VycmVudENhbGxGcmFtZXMo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25z
dCBTY3JpcHQmKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJz
ZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RM
aW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgb3ZlcnJpZGUg
ZmluYWw7CkBAIC0xNDAsNyArMTM5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYnJl
YWtwb2ludEFjdGlvblNvdW5kKGludCBicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNp
Z25lZCBzYW1wbGVJZCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkgb3Zl
cnJpZGUgZmluYWw7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50
SWRlbnRpZmllciwgSlNDOjpTb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHJlc29sdmVC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIsIEpTQzo6U291cmNl
SUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmKTsKICAgICBib29sIGFzc2VydFBhdXNlZChFcnJv
clN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAg
IHZvaWQgY2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwCmluZGV4IDYzMmRlZjMuLmEzOTQxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcApAQCAtODAsMTIgKzgwLDEyIEBAIHN0YXRpYyBTY3JpcHREZWJ1Z1NlcnZl
cjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFNjcmlw
CiAgICAgcmV0dXJuIHByZXNlbnRTdGF0ZTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgdG9rZW5Mb2NhdGlvbikKK3N0YXRpYyBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgdG9rZW5Mb2NhdGlvbikKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gcmVzdWx0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZTo6Y3JlYXRlKCkKICAgICAgICAg
LnNldFN0YXJ0T2Zmc2V0KHRva2VuTG9jYXRpb24uc3RhcnRPZmZzZXQpCi0gICAgICAgIC5zZXRF
bmRPZmZzZXQodG9rZW5Mb2NhdGlvbi5lbmRPZmZzZXQpOwotICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOworICAgICAgICAuc2V0RW5kT2Zmc2V0KHRva2VuTG9jYXRpb24uZW5kT2Zmc2V0KQor
ICAgICAgICAucmVsZWFzZSgpOwogfQogCiB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFy
c2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGV4cAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBjb25zdCBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogY29uc3QgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBjb25zdCByZXR1
cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQordm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+JiYgb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZv
ck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KSB7CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxG
dW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KIAogICAgIFN0
cmluZyBhcmd1bWVudHM7CiAgICAgaWYgKG9wdGlvbmFsQXJndW1lbnRzKQotICAgICAgICBhcmd1
bWVudHMgPSAoKm9wdGlvbmFsQXJndW1lbnRzKS0+dG9KU09OU3RyaW5nKCk7CisgICAgICAgIGFy
Z3VtZW50cyA9IG9wdGlvbmFsQXJndW1lbnRzLT50b0pTT05TdHJpbmcoKTsKIAogICAgIFNjcmlw
dERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHByZXZpb3VzUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSA9IFNjcmlwdERlYnVnU2VydmVyOjpEb250UGF1c2VPbkV4Y2VwdGlvbnM7CiAg
ICAgaWYgKGFzQm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpKQpAQCAt
MTk3LDcgKzE5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpydW4oRXJyb3JTdHJp
bmcmKQogewogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVz
Rm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVz
Y3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBsb2NhdGlv
bnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKIHsKICAgICBz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgVk0mIHZtID0gZ2xvYmFsVk0o
KTsKQEAgLTIzNyw4ICsyMzcsOSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVu
dGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcgogICAgICAgICB9
CiAKICAgICAgICAgYm9vbCBpc1ZhbGlkID0gdHlwZUxvY2F0aW9uICYmIHR5cGVTZXQgJiYgIXR5
cGVTZXQtPmlzRW1wdHkoKTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4gZGVzY3JpcHRpb24gPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb246OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0SXNW
YWxpZChpc1ZhbGlkKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5z
ZXRJc1ZhbGlkKGlzVmFsaWQpCisgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIGlm
IChpc1ZhbGlkKSB7CiAgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0TGVhc3RDb21tb25BbmNl
c3Rvcih0eXBlU2V0LT5sZWFzdENvbW1vbkFuY2VzdG9yKCkpOwpAQCAtMjQ3LDcgKzI0OCw3IEBA
IHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNB
dE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNU
cnVuY2F0ZWQodHlwZVNldC0+aXNPdmVyZmxvd24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0
eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgdHlwZURlc2Ny
aXB0aW9ucy0+YWRkSXRlbShXVEY6Om1vdmUoZGVzY3JpcHRpb24pKTsKICAgICB9CiAKICAgICBk
b3VibGUgZW5kID0gY3VycmVudFRpbWVNUygpOwpAQCAtMzMxLDExICszMzIsMTIgQEAgdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW4KICAgICBjb25zdCBWZWN0b3I8QmFzaWNCbG9ja1JhbmdlPiYgYmFz
aWNCbG9ja1JhbmdlcyA9IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NG
b3JTb3VyY2VJRChzb3VyY2VJRCwgdm0pOwogICAgIGJhc2ljQmxvY2tzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46
OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2lj
QmxvY2tSYW5nZXMpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkJhc2ljQmxvY2s+IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
QmFzaWNCbG9jazo6Y3JlYXRlKCkKKyAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OkJhc2ljQmxvY2s+IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6QmFzaWNCbG9jazo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTdGFydE9mZnNldChibG9j
ay5tX3N0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgLnNldEVuZE9mZnNldChibG9jay5tX2VuZE9m
ZnNldCkKLSAgICAgICAgICAgIC5zZXRIYXNFeGVjdXRlZChibG9jay5tX2hhc0V4ZWN1dGVkKTsK
LSAgICAgICAgYmFzaWNCbG9ja3MtPmFkZEl0ZW0obG9jYXRpb24pOworICAgICAgICAgICAgLnNl
dEhhc0V4ZWN1dGVkKGJsb2NrLm1faGFzRXhlY3V0ZWQpCisgICAgICAgICAgICAucmVsZWFzZSgp
OworICAgICAgICBiYXNpY0Jsb2Nrcy0+YWRkSXRlbShXVEY6Om1vdmUobG9jYXRpb24pKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKaW5kZXggZTVkNzNlMC4uMmUwMjhh
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKQEAgLTYzLDEyICs2MywxMiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZSB7IG1f
ZW5hYmxlZCA9IGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
eW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJv
clJhbmdlPiYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RH
cm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05v
dFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29u
dGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3du
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5Piogb3B0aW9uYWxBcmd1bWVu
dHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29u
c3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikgb3ZlcnJpZGUg
ZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3Ry
aW5nJiBvYmplY3RJZCkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBv
d25Qcm9wZXJ0aWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgb3ZlcnJp
ZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1
YWwgdm9pZCBydW4oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVz
Y3JpcHRpb24+PiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZXNG
b3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4mJiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRCYXNpY0Jsb2NrcyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgaW5fc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4m
IG91dF9iYXNpY0Jsb2Nrcykgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5w
eQppbmRleCBhODNlMmZhLi5iYTQ5MTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHkKQEAgLTExNiwxMiArMTE2LDExIEBAIGNsYXNzIENwcEdlbmVyYXRvcjoKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgogICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5w
cmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgogCi0gICAgICAgIHNp
Z2lsID0gJyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcmJwogICAgICAgICAjIFRo
aXMgaGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVy
dGllcy4KICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSBpcyAnb2JqZWN0JzoKLSAgICAgICAgICAgIHJldHVybiAnY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicgKyBzaWdpbAorICAgICAgICAgICAg
cmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYnCiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4g
J2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PicgKyBzaWdpbAorICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJicK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAg
ICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5
cGUpCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CkBAIC0xNDQsNyArMTQz
LDcgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3Bw
X3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlzX29wdGlvbmFsKToK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgot
ICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwl
cz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQogICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CiAgICAgICAgICAgICBidWls
ZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
CiAgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKQEAgLTE1OCw5ICsxNTcsOSBAQCBjbGFzcyBD
cHBHZW5lcmF0b3I6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgogICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4nCisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JwogICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpIGluIFsnYW55J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JworICAgICAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JwogICAgICAgICAgICAgZWxpZiBpc19vcHRp
b25hbDoKICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFt
ZQogICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106
CkBAIC0yMTIsNyArMjExLDcgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgICAgICAgICAgX3R5
cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCiAKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAg
cmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBH
ZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgogICAgICAgICAgICAgY3BwX25hbWUgPSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQogICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgpAQCAtMjk3LDUgKzI5Niw5IEBAIGNsYXNzIENw
cEdlbmVyYXRvcjoKICAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlU
eXBlLCBPYmplY3RUeXBlKSkKIAogICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX3Vz
ZV9yZWZlcmVuY2VzX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFBy
aW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbImFueSIsICJvYmpl
Y3QiXSkKKworICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29weV9m
b3JfcmV0dXJuX3R5cGUoX3R5cGUpOgogICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwg
KEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZl
VHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3QiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCBlMDQ4ODQyLi40
ZjNjMGMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQpAQCAtNzYsMTAgKzc2LDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBB
bHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJl
ZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAi
IiIpCiAKQEAgLTEwOCwxMSArMTA4LDExIEBAIHByb3RlY3RlZDoKICAgICBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKICAgICAiIiIke2NsYXNz
QW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiAk
e2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRlOgotICAgIEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0xMjUsMTMgKzEyNSwxMyBAQCBwcml2YXRlOgogICAgIEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCiAgICAgIiIi
ICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVi
bGljOgotICAgICAgICAke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgJHtjYWxsYmFja05hbWV9
KFJlZjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwog
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVyc30pOwogICAgIH07CiAgICAg
dmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAog
ICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAi
IiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZSkKKyAgICAiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKQEAgLTE0MSw3ICsx
NDEsNyBAQCAke2Rpc3BhdGNoQ2FzZXN9CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKAotIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCisiIiJ2b2lkIElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
CiB7CiAgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKQEAgLTE2NiwxNiArMTY2LDE2IEBAICR7ZGlzcGF0Y2hDYXNlc30KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwg
Km1lc3NhZ2UuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2Fn
ZS5nZXQoKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRv
bWFpbkNvbnN0cnVjdG9yID0gKAotICAgICIiIlBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorICAgICIiIlJlZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0K
IAotSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1fYWdlbnQoYWdlbnQp
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0xODYsMjYg
KzE4NiwyNSBAQCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6Okluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAgIEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgKLSIiIiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OworIiIiICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zQ29udGFpbmVyKTsKICR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CiAgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogIiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkFzeW5jQ29tbWFuZCA9ICgKLSIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDog
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tl
bmREaXNwYXRjaGVyLCBpZCkgeyB9CisiIiJJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShSZWY8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGOjpt
b3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCiB2b2lkIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nl
c3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogJHtvdXRQ
YXJhbWV0ZXJBc3NpZ25tZW50c30KLSAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9y
U3RyaW5nKCkpOworICAgIHNlbmRJZkFjdGl2ZShXVEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBFcnJv
clN0cmluZygpKTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRj
aGVyRGVjbGFyYXRpb24gPSAoCkBAIC0yMjgsMjYgKzIyNywyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qJHtvYmplY3RU
eXBlfSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihS
ZWY8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3Qp
CisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyAke29iamVjdFR5cGV9OwogICAgIHB1Ymxp
YzoiIiIpCiAKICAgICBQcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlID0g
KAogIiIiCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkKKyAgICAg
ICAgUmVmPCR7b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JHtvYmplY3RUeXBlfT4qPigmbV9y
ZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjwke29iamVjdFR5cGV9PiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjwke29iamVjdFR5
cGV9PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8JHtvYmplY3RUeXBlfT4q
PigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yNTgsMTEgKzI1NCwxMCBAQCAk
e2NvbnN0cnVjdG9yRXhhbXBsZX0KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLSAgICB0eXBlZGVmIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsiIiIpCisgICAgfSIi
IikKIAogICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNhc3QgPSAoCi0iIiJQYXNzUmVmUHRyPCR7
b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisiIiJSZWZQdHI8JHtv
YmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiB7CiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4
IDEyNzJjMDAuLmEyNDFjNTMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01Miw3ICs1
Miw2IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRv
cik6CiAgICAgICAgIGhlYWRlcnMgPSBbCiAgICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29s
T2JqZWN0cy5oIicsCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKICAgICAgICAg
ICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KIAogICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0
cmluZycsICdFcnJvclN0cmluZycpXQpAQCAtMTU3LDcgKzE1Niw3IEBAIGNsYXNzIENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGluX3BhcmFt
ZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCiAgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVz
IGluXyVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5f
cGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAg
ICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxi
YWNrTmFtZSkKKyAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiBjYWxsYmFj
ayIgJSBjYWxsYmFja05hbWUpCiAKICAgICAgICAgb3V0X3BhcmFtZXRlcnMgPSBbXQogICAgICAg
ICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggODQ2MTVkZC4uNTgyZGU0YiAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMDQsMTAgKzEwNCwx
MCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdl
bmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBs
ZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGNhc2VzID0gW10K
ICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBkb21haW4u
Y29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAg
JXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5k
X25hbWUpCisgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsIG1lc3NhZ2Up
OycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQogICAgICAgICBmb3IgY29tbWFu
ZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAg
ZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAg
ICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycg
JSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAg
ICAlcyhjYWxsSWQsIG1lc3NhZ2UpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKIAogICAgICAg
ICBzd2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLApAQCAtMTc4LDIyICsxNzgsMjkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIG91dF9z
dWNjZXNzX2FyZ3VtZW50ID0gJyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZQogICAgICAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcg
ICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkKIAorICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnaW5fJyArIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vf
cmVmZXJlbmNlc19mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX2V4cHJlc3Npb24gPSAnJXMuY29weVJlZigpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9u
CisgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcmJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KKwog
ICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlw
ZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRl
ciksCiAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlckV4cHJlc3Npb24nOiBwYXJhbWV0ZXJf
ZXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0
b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAogICAgICAgICAg
ICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAg
ICUocGFyYW1ldGVyVHlwZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OiUoa2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9j
b2xFcnJvcnNQdHIpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5h
bWUpcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUo
c3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJyb3JzLmdldCgpKTsnICUgcGFyYW1fYXJncykK
IAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVG
b3VuZCA/ICZpbl8lKHBhcmFtZXRlck5hbWUpcyA6IG51bGxwdHInICUgcGFyYW1fYXJncworICAg
ICAgICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJO
YW1lKXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0cicgJSBw
YXJhbV9hcmdzCiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCiAgICAgICAgICAg
ICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJp
bmcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRj
aGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKLSAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3Bh
dGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAg
ICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lv
bikKIAogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgogICAgICAgICAgICAgYXN5bmNfYXJn
cyA9IHsKQEAgLTIwNCw3ICsyMTEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCiAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQot
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjaycpCisgICAgICAg
ICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrLmNvcHlSZWYoKScpCiAKICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyczoKQEAgLTI2MSw5ICsyNjgsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
JykKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMo
bV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpu
ZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2Fs
bGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOycgJSBj
b21tYW5kX2FyZ3MpCiAgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+
IDA6CiAgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCkBAIC0yODIsNiArMjg5LDYg
QEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCiAgICAgICAgIGlmIG5vdCBj
b21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3Ip
OycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOycpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggYWUwNGFkZi4uZmYwOWFiMyAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQpAQCAtNTMsNyArNTMsNiBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICciSW5zcGVjdG9y
UHJvdG9jb2xPYmplY3RzLmgiJywKICAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPicsCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4nLAotICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCiAgICAgICAgICAgICAn
PHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCiAKICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDQyNzBiM2IuLjg4ZjU4
ZjQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMDcs
MTMgKzEwNywxMyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0
b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1h
bFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJShkb21haW5OYW1l
KXMuJShldmVudE5hbWUpcyIpKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAg
ICAgICBsaW5lcy5leHRlbmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpLCBwYXJhbXNPYmplY3QpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdC5j
b3B5UmVmKCkpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4
IGQ2MGM2YWQuLjk2MTE2NTAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtNTIsNyArNTIsNiBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAg
IGhlYWRlcnMgPSBzZXQoWwogICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPicsCiAgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKLSAgICAgICAg
ICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nCiAgICAgICAgIF0pCiAKICAgICAgICAgZXhwb3J0X21h
Y3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25l
KQpAQCAtMTk1LDkgKzE5NCwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJh
dG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9idWls
ZGVyX3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikpCiAKICAgICAgICAgY29uc3RydWN0b3Jf
ZXhhbXBsZSA9IFtdCi0gICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICog
UmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3Rf
bmFtZSkpCisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogUmVmPCVz
PiByZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3RfbmFtZSkpCiAg
ICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKICAgICAgICAgICAgIGNvbnN0
cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogICAgIC5zZXQlcyguLi4pJyAlIHVjZmlyc3Qo
bWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQo
JyAgICAgKiAgICAgLnJlbGVhc2UoKScpCiAKICAgICAgICAgYnVpbGRlcl9hcmdzID0gewogICAg
ICAgICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKQEAgLTMwMiw2ICszMDIsOCBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIHsnKQogICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hv
dWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQp
cyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIFdURjo6bW92ZSh2YWx1ZSkpOycgJSBzZXR0ZXJf
YXJncykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJ
bnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIp
LCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykK
QEAgLTMzMyw3ICszMzUsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
KEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBhcmd1bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7
JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1bWVudFswXSkpCiAgICAgICAgICAg
ICBpZiBhcmd1bWVudFsxXToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBQ
YXNzUmVmUHRyPCVzPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBydW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
KTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkKaW5kZXggMzFlZjQ5NC4uMmMyNjNiNSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbi5weQpAQCAtMTIyLDYgKzEyMiw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJyNp
ZiAhQVNTRVJUX0RJU0FCTEVEJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdU
cmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiB2YWx1ZSknICUgKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlw
ZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoIiIiewor
ICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIp
CkBAIC0xNjksNiArMTcwLDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRf
RElTQUJMRUQnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpJyAlIENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVF9BUkco
dmFsdWUsIHZhbHVlKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcgcmVzdWx0
OycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVl
LT5hc1N0cmluZyhyZXN1bHQpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChj
YXN0U3VjY2VlZGVkKTsnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQppbmRleCA4ZmZhZTliLi4wOTFmYTY0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIE9iakNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57JykKIAogICAgICAgICBpZiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAKICAg
ICAgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEgcGFy
YW1ldGVyOiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5
cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBjb21tYW5kLnJldHVybl9wYXJh
bWV0ZXJzKQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJlZF9wb2ludGVyX3Bh
cmFtZXRlcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5k
ZXggM2I4MzZmYS4uYTNjNGUxYiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQpAQCAtMTE2LDcgKzExNiw3IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJl
ZF9wb2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIiVzLiVzIikpOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBldmVudC5l
dmVudF9uYW1lKSkKICAgICAgICAgaWYgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAg
ICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhkb21h
aW4sIGV2ZW50KSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJh
dGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQu
ZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBDcHBHZW5l
cmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpCiAgICAgICAg
ICAgICB2YXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkKaW5kZXggNTE1NGZlYS4uNDczMTAwYiAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC01OCw3ICs1OCw2IEBAIGNsYXNzIE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICci
JXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwK
ICAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKICAgICAg
ICAgICAgICc8d3RmL0Fzc2VydGlvbnMuaD4nLAotICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0
ci5oPicsCiAgICAgICAgIF0KIAogICAgICAgICBoZWFkZXJfYXJncyA9IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9j
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAppbmRleCA5YzRkYWM2Li5kOGE3OWNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjpt
b3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xNDMsNyArMTQzLDYgQEAgSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKIAogI2luY2x1ZGUgIkluc3Bl
Y3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTcyLDMy
ICsxNzEsMzIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3Vi
bGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXls
b2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFz
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291
dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMq
IG9wdF9vdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKICAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNr
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBp
ZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91
YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKICAgICB9OwotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9y
U3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3Rl
cywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1
dGVTUUxBc3luY0NhbGxiYWNrIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+LCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZh
bHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwor
ICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYm
IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50
Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0
cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVm
UHRyPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxi
YWNrKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CiAKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZh
dGU6CiAgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAgdm9p
ZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgZXhlY3V0ZVNR
TFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKICAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJs
aWM6CkBAIC0yNjIsMTIgKzI2MSwxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI3NywzMyArMjc2LDMyIEBAIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cisg
ICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgbWVzc2Fn
ZSk7CiAgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpCi0gICAgICAgIGV4
ZWN1dGVTUUxTeW5jKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBleGVjdXRlU1FM
U3luYyhjYWxsSWQsIG1lc3NhZ2UpOwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNR
TEFzeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkp
OworICAgICAgICBleGVjdXRlU1FMQXN5bmMoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlCiAg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdc
JycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQogCiB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwot
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRh
dGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyOworICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBh
cmFtc0NvbnRhaW5lcik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJh
bCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJh
bXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnMuZ2V0KCkpOwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2Fn
ZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTMxNSw3ICszMTMsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZwogI2VuZGlmCiAKICAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKQEAgLTM0NywxNCArMzQ1
LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nCiAgICAgICAgIGlmIChvdXRfcHJpbnRDb2xv
ci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgfQotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNz
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2s6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURjo6bW92
ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiog
dGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3Ry
aW5nPiogcHJpbnRDb2xvcikKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNl
bmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNv
bHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZh
bHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBz
cWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNv
bG9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcikK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAgICAg
anNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1u
TmFtZXMpOwogICAgIGlmIChub3Rlcy5pc0Fzc2lnbmVkKCkpCkBAIC0zNzMsMjAgKzM3MSwxOSBA
QCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbAogICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7CiAg
ICAgaWYgKHByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdldFZhbHVlKCkp
OwotICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7CisgICAgc2Vu
ZElmQWN0aXZlKFdURjo6bW92ZShqc29uTWVzc2FnZSksIEVycm9yU3RyaW5nKCkpOwogfQogCiB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsK
LSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJk
YXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5f
cXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CisgICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbXNDb250YWluZXIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVy
YWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0
cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzLmdldCgpKTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
KTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNz
YWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzk4LDkgKzM5NSw5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uCiAjZW5kaWYKIAog
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpOwotICAgIG1fYWdlbnQt
PmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2spOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOworICAgIG1f
YWdlbnQtPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKIAogICAgIGlmIChlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOwpAQCAtNDExLDE1ICs0MDgs
MTQgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb24KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0g
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnNQdHIpOworICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRh
YmFzZS5leGVjdXRlU1FMU3luYyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RG
Ojptb3ZlKHByb3RvY29sRXJyb3JzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQz
MSw3ICs0MjcsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZQogI2VuZGlmCiAKICAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25vdGVz
OwogICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwpAQCAtNDU0LDE0ICs0NTAsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGUKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShvdXRfc2NyZWVuQ29sb3IpKTsKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF9wcmludENvbG9yKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJy
b3IpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDog
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tl
bmREaXNwYXRjaGVyLCBpZCkgeyB9CitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
KFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZShXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
OjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwg
Y29uc3QgU3RyaW5nJiBwcmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYg
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRD
b2xvcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwogICAgIGpzb25N
ZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsK
QEAgLTQ3MSwyMCArNDY3LDE5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjCiAgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7Ci0gICAg
c2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKKyAgICBzZW5kSWZBY3Rp
dmUoV1RGOjptb3ZlKGpzb25NZXNzYWdlKSwgRXJyb3JTdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKLSAgICBpbnQgaW5f
ZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVy
eSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYXV0byBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOworICAgIGludCBp
bl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxp
dGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICBpZiAo
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIpOwotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3Jz
LnJlbGVhc2UoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
IGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTQ5Niw5ICs0OTEsOSBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcAog
I2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRj
aGVyLGNhbGxJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJvciwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5
UmVmKCksIGNhbGxJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJvciwgaW5f
ZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CiAKICAgICBpZiAoZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKQEAgLTU1Miw3ICs1
NDcsNiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcAogI2luY2x1ZGUgIkluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CkBAIC02NTAsNyArNjQ0LDYgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTcwNywxMCArNzAwLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9y
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwv
KkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CkBAIC03MjksMzAgKzcyMiwy
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICBS
ZWY8RXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAg
ICBQYXNzUmVmUHRyPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCiAg
ICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAg
ICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwog
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0
SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpAQCAtMTA2NSw3ICsx
MDU1LDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygKICAgICB9OwogCiAgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZh
bHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBS
V0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3Rl
cyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwpAQCAtMTEwNSw3ICsxMDk1LDcgQEAgdm9pZCBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9y
LCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKICAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAg
LTExNDUsNyArMTEzNSw3IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fCiAgICAgfTsKIAogICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xMTc2LDcg
KzExNjYsNyBAQCB2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbgogICAgIH07CiAKICAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJXSVBy
b3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVz
LCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAgLTE1NjUsNyArMTU1NSw2
IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJ
UHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0CmluZGV4IDdiNWVmNTcuLjI3Zjc0NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNDEsMTgg
KzQxLDE4IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0
Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIAogY2xhc3MgQWx0ZXJu
YXRlSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJu
YXRlSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGlu
X3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwg
Y29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9y
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzOCw3ICsxMzgsNiBAQCBJbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIpOwogCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNjQs
MjEgKzE2MywyMSBAQCBwdWJsaWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNr
ID0gNiwKICAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyog
aW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxpbnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9v
dXRfcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4mIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5f
dGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92
YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2Nv
bHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5f
dGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5f
dmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25z
dCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
U3RyaW5nKiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9v
dXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
IG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5f
c2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50
KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKIH07CiAKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwor
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KTsKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgpAQCAtMjQzLDEyICsyNDIsMTIgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0K
IAotUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAotSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1f
YWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CkBAIC0yNTgsNTcgKzI1Nyw1NiBAQCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvcgogICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwo
IkRhdGFiYXNlIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmICht
ZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2FnZSk7CiAgICAgZWxzZSBp
ZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAg
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsIG1lc3NhZ2UpOwogICAgIGVsc2UK
ICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmco
J1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Ci0gICAg
SW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0
KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CisgICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpLCBwYXJhbXNDb250YWluZXIpOwogICAgIGJvb2wgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9
IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5O
YW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJy
YXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksICZj
b2x1bW5OYW1lc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCBu
b3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgibm90ZXMiKSwgJm5vdGVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91Ymxl
PiBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4gaW5fdGltZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldERvdWJsZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksICZ0aW1lc3RhbXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAg
IGJvb2wgdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmdmFs
dWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCAmdmFsdWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICBib29sIHBh
eWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVl
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRW
YWx1ZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAmcGF5
bG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCBkYXRhYmFz
ZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJkYXRhYmFzZUlkIiksICZkYXRhYmFzZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRh
YmFzZUlkIiksICZkYXRhYmFzZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
ICAgICBib29sIHNxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJy
b3IiKSwgJnNxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgic3FsRXJyb3IiKSwgJnNxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKICAgICBib29sIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJp
bmcgaW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmc2NyZWVu
Q29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9zY3Jl
ZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZzY3JlZW5Db2xvcl92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCBwcmludENvbG9yX3Zh
bHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgJnByaW50Q29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRD
b2xvciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAg
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
Iik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVz
c2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJv
cnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KGNhbGxJZCwgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/ICZpbl9jb2x1bW5OYW1lcyA6IG51bGxw
dHIsIG5vdGVzX3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMgOiBudWxscHRyLCB0aW1lc3RhbXBfdmFs
dWVGb3VuZCA/ICZpbl90aW1lc3RhbXAgOiBudWxscHRyLCB2YWx1ZXNfdmFsdWVGb3VuZCA/ICZp
bl92YWx1ZXMgOiBudWxscHRyLCBwYXlsb2FkX3ZhbHVlRm91bmQgPyAmaW5fcGF5bG9hZCA6IG51
bGxwdHIsIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZpbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwg
c3FsRXJyb3JfdmFsdWVGb3VuZCA/ICZpbl9zcWxFcnJvciA6IG51bGxwdHIsIHNjcmVlbkNvbG9y
X3ZhbHVlRm91bmQgPyAmaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBwcmludENvbG9yX3ZhbHVl
Rm91bmQgPyAmaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBjb2x1bW5OYW1l
c192YWx1ZUZvdW5kID8gaW5fY29sdW1uTmFtZXMuY29weVJlZigpIDogbnVsbHB0ciwgbm90ZXNf
dmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8g
JmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVlc192YWx1ZUZvdW5kID8gaW5fdmFsdWVzLmNv
cHlSZWYoKSA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVGb3VuZCA/IGluX3BheWxvYWQuY29weVJl
ZigpIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQgOiBu
dWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gaW5fc3FsRXJyb3IuY29weVJlZigpIDogbnVs
bHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIs
IHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0cik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4g
b3V0X2NvbHVtbk5hbWVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJp
bmc+IG91dF9ub3RlczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91Ymxl
PiBvdXRfdGltZXN0YW1wOwpAQCAtMzE4LDcgKzMxNiw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNh
bGxJCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0
X3NxbEVycm9yOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIG91dF9zY3JlZW5Db2xvcjsKICAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8g
JmluX2NvbHVtbk5hbWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6
IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIs
IHZhbHVlc192YWx1ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVG
b3VuZCA/ICZpbl9wYXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmlu
X2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gJmluX3NxbEVycm9y
IDogbnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51
bGxwdHIsIHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0ciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgJm91dF9wcmludENvbG9yKTsKKyAgICBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGVycm9yLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gaW5fY29sdW1uTmFtZXMu
Y29weVJlZigpIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxw
dHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVl
c192YWx1ZUZvdW5kID8gaW5fdmFsdWVzLmNvcHlSZWYoKSA6IG51bGxwdHIsIHBheWxvYWRfdmFs
dWVGb3VuZCA/IGluX3BheWxvYWQuY29weVJlZigpIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1
ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8g
aW5fc3FsRXJyb3IuY29weVJlZigpIDogbnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/
ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9w
cmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3Rp
bWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9z
cWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKIAogICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKQEAgLTM0MCwz
OSArMzM4LDM4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJCiAgICAgICAgIGlmIChvdXRfcHJp
bnRDb2xvci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAg
fQotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgU3Ry
aW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwotICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1l
c3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRW
YWx1ZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcg
aW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBhdXRv
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOworICAg
IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5l
cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVz
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
cy5nZXQoKSk7CisgICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIGRvdWJsZSBpbl90aW1lc3Rh
bXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFs
dWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9h
ZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShwYXJhbXNDb250YWluZXIu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJh
c2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNx
bEVycm9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgaW5f
c2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVND
SUlMaXRlcmFsKCJwcmludENvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
ICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1l
c3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJy
b3JzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGNhbGxJZCwgaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVl
cywgaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9y
LCBpbl9wcmludENvbG9yKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBpbl9jb2x1bW5OYW1lcy5jb3B5UmVmKCksIGlu
X25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5jb3B5UmVmKCksIGluX3BheWxvYWQuY29w
eVJlZigpLCBpbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5jb3B5UmVmKCksIGluX3NjcmVlbkNv
bG9yLCBpbl9wcmludENvbG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAgU3RyaW5nIG91
dF9ub3RlczsKICAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKQEAgLTM4Miw3ICszNzksNyBAQCB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhsb25nIGNhbGxJZAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CiAgICAgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7
Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBpbl9jb2x1
bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLCBpbl9wYXlsb2FkLCBp
bl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3Is
IG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMs
ICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVu
Q29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGVycm9yLCBpbl9jb2x1bW5OYW1lcy5jb3B5UmVmKCksIGluX25vdGVzLCBpbl90
aW1lc3RhbXAsIGluX3ZhbHVlcy5jb3B5UmVmKCksIGluX3BheWxvYWQuY29weVJlZigpLCBpbl9k
YXRhYmFzZUlkLCBpbl9zcWxFcnJvci5jb3B5UmVmKCksIGluX3NjcmVlbkNvbG9yLCBpbl9wcmlu
dENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRf
dmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0
X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwogCiAgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgb3V0X2NvbHVtbk5hbWVzKTsKQEAgLTM5NSw3ICszOTIsNyBAQCB2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZAogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNv
bG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3Jl
ZW5Db2xvcikpOwogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50
Q29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3By
aW50Q29sb3IpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDQzLDcgKzQ0MCw2IEBAIHZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgY2FsbElkCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTU0MSw3ICs1MzcsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTk4LDEwICs1OTMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9
CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjpt
b3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNz
IEVycm9yOwogICAgIHB1YmxpYzoKQEAgLTYyMCwzMCArNjE1LDI3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJy
b3I+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+
IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigq
dGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOwog
ICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgotICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICog
UmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldE1lc3Nh
Z2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqICAgICAuc2V0Q29kZSgu
Li4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0g
ICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFp
dHM7CiB9OwogCiB9IC8vIERhdGFiYXNlCkBAIC03NjcsOCArNzU5LDggQEAgbmFtZXNwYWNlIElu
c3BlY3RvciB7CiBjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRl
ID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4q
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGlu
X3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5f
dmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25z
dCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBT
dHJpbmcqIGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBj
b25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
aW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2Ny
ZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC05NDcsMTQgKzkzOSwxNCBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
aW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBp
bl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNv
bnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IFN0cmluZyogaW5fcHJpbnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRD
b2xvcikKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5v
dGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFJXSVByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFs
dWVzIik7CkBAIC0xMDEyLDE0ICsxMDA0LDE0IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjCiAg
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5O
YW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGlu
X25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9f
aW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5p
bCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6
KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3Fs
RXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9y
ID8gJm9faW5fc2NyZWVuQ29sb3IgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAm
b19pbl9wcmludENvbG9yIDogbmlsKV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJ
ZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBp
bl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4m
JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVz
dGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3ZhbHVl
cywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9y
LCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29s
b3IpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCksIGVycm9yKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMs
IGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFi
YXNlRXJyb3IgKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3Jl
ZW5Db2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xNDEzLDcgKzE0MDUs
NiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJX
SVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDM4MjJmYTku
LjJmOTAzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVz
dWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFs
dGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3Qg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVm
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAog
CkBAIC0xNTYsNyArMTU2LDYgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0
d29yazMiKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewpAQCAtMTkwLDEyICsxODksMTIgQEAgcHJvdGVjdGVkOgogCiBjbGFz
cyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVm
PEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVz
c2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0
ZToKLSAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yMDcsOCArMjA2LDggQEAgcHJpdmF0ZToKIAogY2xh
c3MgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKQEAgLTIxOCw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiBwdWJsaWM6CkBAIC0yODQsMTIgKzI4MywxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KIEluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKSB7IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAot
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0lu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAg
OiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
cikKICAgICAsIG1fYWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCkBAIC0yOTksMTIgKzI5OCwxMiBAQCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
cgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihB
U0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIEluc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAg
IFJlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
IAogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVzb3Vy
Y2UxKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBsb2FkUmVzb3VyY2UxKGNhbGxJ
ZCwgbWVzc2FnZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicg
d2FzIG5vdCBmb3VuZCIpKTsKIH0KQEAgLTMxOSwxOCArMzE4LDE4IEBAIHZvaWQgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVz
dWx0KSwgZXJyb3IpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwog
fQogCi1JbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
ICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKQEAgLTM0MCw3ICszMzksNyBAQCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewog
ICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIApAQCAtMzcxLDcgKzM3MCw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNz
YWdlLmdldCgpKTsKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsIG1lc3NhZ2UuZ2V0
KCkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC0zODQsMTAg
KzM4MywxMCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJv
cik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmKQpAQCAtNDAwLDEwICszOTksMTAgQEAgdm9pZCBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShy
ZXN1bHQpLCBlcnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikK
QEAgLTQxNiwxMCArNDE1LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAog
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB2
b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00MzIsMTAgKzQzMSwxMCBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CiAKLSAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
V1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmKQpAQCAtNDQ4LDEwICs0NDcsMTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWMK
ICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdl
bnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJv
cik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKQEAgLTQ2NCwxMCAr
NDYzLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVycm9y
KTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00ODAsMTAgKzQ3OSwxMCBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJl
c3VsdCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC01MzEsNyAr
NTMwLDYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWMKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90
b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNjI5LDcgKzYyNyw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0xMjkyLDcgKzEyODksNiBAQCB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBl
cnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAppbmRleCA4ZGM5YzFmLi40MDE4NWE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CkBA
IC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0
ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0x
NDQsNyArMTQ0LDYgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21h
aW4iKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMTcxLDEyICsxNzAsMTIgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAg
ICBzdGF0aWMgUmVmPEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lk
IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgotICAgIEluc3BlY3RvckNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yNDEsMTIgKzI0MCwxMiBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6fkluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigqYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CiB9CiAKLUluc3BlY3RvckNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQog
ICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCiAgICAgLCBtX2FnZW50KGFnZW50KQogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQpAQCAtMjU2LDEyICsyNTUsMTIgQEAgSW5zcGVjdG9yQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oQVNDSUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksIHRoaXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkKK3ZvaWQgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlIikKLSAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoY2Fs
bElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGNhbGxJZCwgbWVzc2FnZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiQ29tbWFuZERvbWFpbiIsICcuJywg
bWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQpAQCAtMjc2LDE0ICsyNzUsMTQgQEAgdm9p
ZCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGxvbmcgY2EKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKICAgICBtX2FnZW50LT5jb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7CiAKICAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InJldHVyblZhbHVlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVl
KG91dF9yZXR1cm5WYWx1ZSkpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzMxLDcgKzMzMCw2IEBAIHZvaWQgSW5z
cGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZShsb25nIGNhCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKQEAgLTQwMSwxMSArMzk5LDExIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIElu
c3BlY3RvckV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1l
dGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
anNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJh
bCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIpKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwYXJh
bWV0ZXIiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1l
dGVyKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIp
LCBwYXJhbXNPYmplY3QpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0LmNvcHlSZWYoKSk7CiAKICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CiB9CkBAIC00NTQsNyArNDUyLDYgQEAgdm9pZCBJbnNwZWN0b3JFdmVudERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGEK
IAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODEzLDcgKzgxMCw3IEBAIHZvaWQgT2JqQ0luc3BlY3Rv
ckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUobG9uCiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oUldJUHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5W
YWx1ZSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIHRvUHJvdG9jb2xT
dHJpbmcocmV0dXJuVmFsdWUpKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5nKCkpOwogICAgIH07
CkBAIC0xMDIxLDkgKzEwMTgsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIGlm
ICghZnJvbnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwg
QVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIikpOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInBhcmFtZXRlciIpLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlcikpOwogICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0
KTsKICAgICBmcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTE0NSw3ICsxMTQyLDYgQEAgX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJz
aW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdAppbmRleCBkOTJlYzUyLi5jYWZlNDZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTMzLDcgKzEzMyw2IEBAIEluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIik7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI0Miw3ICsyNDEs
NiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMjUyLDggKzI1MCw4IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Y2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJs
ZSogY29uc3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29u
c3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7Ci0gICAgdm9p
ZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
dmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSog
Y29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
cywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3Is
IGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xv
cik7CiBwcml2YXRlOgogICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiB9OwpAQCAtMzA1LDExICszMDMsMTEgQEAgcHJpdmF0ZToKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25z
dCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBw
cmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0
IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2Ny
ZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikKIHsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IikpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoY29sdW1uTmFtZXMpCiAgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBj
b2x1bW5OYW1lcyk7CiAgICAgaWYgKG5vdGVzKQpAQCAtMzI2LDE2ICszMjQsMTYgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyhQYXNzUmVmUHQKICAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVuQ29sb3IpOwogICAgIGlmIChwcmludENvbG9y
KQogICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdC5jb3B5UmVmKCkpOwogCiAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtc09iamVjdC0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CiAgICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CiAg
ICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGlt
ZXN0YW1wKTsKQEAgLTM0NCw3ICszNDIsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZgogICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJy
b3IpOwogICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgc2NyZWVuQ29sb3IpOwogICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CisgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QuY29weVJl
ZigpKTsKIAogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KQEAgLTM5Myw3ICszOTEsNiBA
QCB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZgogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NDUsMTAg
KzQ0MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikK
KyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKICAg
ICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVi
bGljOgpAQCAtNDY3LDMwICs0NjQsMjcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PEVycm9yPiYgKCkKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0g
c2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQp
OwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7
CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9
OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRy
PEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3Vs
dCA9IEVycm9yOjpjcmVhdGUoKQogICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICog
ICAgIC5zZXRDb2RlKC4uLik7CisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAg
LnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIH0gLy8g
RGF0YWJhc2UKQEAgLTg4OCw5ICs4ODIsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwog
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzY3JlZW5Db2xv
ciwgQCJzY3JlZW5Db2xvciIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiKSk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3Bl
Y3RvclN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAgaWYgKG5vdGVzKQpAQCAtOTI1
LDkgKzkxOSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsK
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBA
InByaW50Q29sb3IiKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNl
LmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CiAgICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CiAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKQEAg
LTEwNDEsNyArMTAzNSw2IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVz
dWx0CmluZGV4IGY3YjQ0OWQuLjNjNWI2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
IHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTQyLDcgKzE0Miw2IEBAIEluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIik7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90
b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE2NywxMiArMTY2LDEy
IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCiBjbGFzcyBJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3Zl
cnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgotICAgIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIHB1YmxpYzoKQEAgLTI0MSwxMiArMjQwLDEyIEBAIEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
CiAjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQogCiAjaWYgUExBVEZPUk0oV0VCX0NP
TU1BTkRTKQotUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAotSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAg
ICAsIG1fYWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCkBAIC0yNTYsMTIgKzI1NSwxMiBAQCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvcgogICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxp
dGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAg
IGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZShjYWxs
SWQsICptZXNzYWdlLmdldCgpKTsKKyAgICAgICAgbG9hZFJlc291cmNlKGNhbGxJZCwgbWVzc2Fn
ZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBm
b3VuZCIpKTsKIH0KQEAgLTI3NiwxMCArMjc1LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJv
cik7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQogCkBAIC0zMjgsNyArMzI3
LDYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3QKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewpAQCAtMzk1LDcgKzM5Myw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCiB2b2lkIEluc3BlY3Rvck5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJ
TGl0ZXJhbCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiKSk7CiAKICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CkBAIC00NDYsNyArNDQ0LDYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Zyb250
ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00
OTMsMTAgKzQ5MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
LSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBOZXR3b3JrRXJyb3I7CiAgICAgcHVibGljOgpAQCAtNTE1LDMwICs1MTIsMjcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9
CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5ldHdvcmtFcnJvcj4mICgpCisgICAgICAgIFJl
ZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxOZXR3b3JrRXJyb3I+Kj4oJm1fcmVzdWx0KTsK
LSAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxOZXR3b3JrRXJyb3I+KCp0aGlz
KS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkp
OwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZlB0cjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6
Y3JlYXRlKCkKKyAgICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6
OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENv
ZGUoLi4uKTsKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgp
OwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90
b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBOZXR3b3JrMgpA
QCAtOTkwLDcgKzk4NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgaWYgKCFm
cm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJ
SUxpdGVyYWwoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIikpOwogICAgIGZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9
CkBAIC0xMDk4LDcgKzEwOTIsNiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXgg
MmRjZjEzMy4uMzRkMjY3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3Vs
dApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRl
cm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApA
QCAtMTI3LDcgKzEyNyw2IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIzNiw3ICsyMzUsNiBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewpAQCAtMzM0LDcgKzMzMiw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC04MTcsNyArODE0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCA5
Mzk5M2EzLi5kZjM5M2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1
bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0
ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAK
QEAgLTEyNyw3ICsxMjcsNiBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yMzYsNyArMjM1LDYgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKQEAgLTMzNCw3ICszMzIsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMzg0LDEwICszODEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qS2V5UGF0aCovSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihSZWY8LypLZXlQYXRo
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBLZXlQYXRoOwogICAgIHB1YmxpYzoKQEAgLTM5OSwzOCArMzk2LDM1IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxLZXlQYXRoPiYgKCkKKyAgICAgICAgUmVm
PEtleVBhdGg+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8S2V5UGF0aD4qPigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAg
ICAgICAgUGFzc1JlZlB0cjxLZXlQYXRoPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxLZXlQYXRoPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAg
UmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2Fz
dDxSZWY8S2V5UGF0aD4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoK
ICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPEtleVBhdGg+IHJl
c3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRUeXBlKC4uLik7CisgICAg
ICogUmVmPEtleVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICogICAgIC5z
ZXRUeXBlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwog
ICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsKIAogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgewogICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzdHJpbmciKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQgc2V0QXJyYXkoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNl
dEFycmF5KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiYXJyYXkiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJh
eShBU0NJSUxpdGVyYWwoImFycmF5IiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0KIH07CiAK
QEAgLTkyMCw3ICs5MTQsNiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdAppbmRleCAyMDRhMmI4Li5mNjY5NTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFz
c1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTEyNyw3ICsxMjcsNiBAQCBw
cml2YXRlOgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CkBAIC0yMzYsNyArMjM1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzNCw3ICsz
MzIsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODAz
LDcgKzgwMCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAjaW1wb3J0ICJSV0lQcm90
b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggMzY1NDZjMi4uN2YxZTZhNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xMzAsNyArMTMwLDYgQEAgSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50
ZWQ6ICJGYWludGUKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjM5LDcgKzIzOCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMzcs
NyArMzM1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTg2NCw3ICs4NjEsNiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbERl
YnVnZ2VyUmVhc29uKSB7CiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVy
cy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0Cmlu
ZGV4IGRhNzU2NDYuLjU4Y2E0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQK
QEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJu
YXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAg
LTEzMSw3ICsxMzEsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5U
d29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOgogCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNDAs
NyArMjM5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzOCw3ICszMzYsNiBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtOTAyLDcgKzg5OSw2IEBAIHR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKICNp
bXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IGNjNDJmZDIuLjkx
ZDc1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC00MSwxMCAr
NDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xMjcsNyArMTI3
LDYgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjM2LDcgKzIzNSw2IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0z
MzQsNyArMzMyLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTM4NywxMCArMzg0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJv
cjsKICAgICBwdWJsaWM6CkBAIC00MDksMzAgKzQwNiwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVy
YXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+
KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiByZWxl
YXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMp
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKICAgICAg
ICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAg
ICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqIFJlZjxF
cnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRNZXNzYWdlKC4u
LikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQor
ICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5
cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwog
fTsKIAogY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKQEAgLTQ1Miw0MCArNDQ2LDM3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAg
ICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAgICAgUmVmPE9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0g
c2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZT4qPigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7Cisg
ICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWlu
dGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CiAg
ICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
Ci0gICAgICogUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCk7CisgICAgICogUmVmPE9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAg
KiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVm
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAotICAg
IHZvaWQgc2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFs
dWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0
Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTQ5OCwxOSArNDg5LDE5IEBAIHB1YmxpYzoK
ICAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGlt
ZXN0YW1wIiksIHZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFZhbHVlcyhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICB2b2lkIHNldFZhbHVlcyhS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgIHsKLSAgICAgICAg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZh
bHVlKTsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgidmFsdWVzIiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0UGF5
bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHZv
aWQgc2V0UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAg
ICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1
ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgV1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gdmFsdWUpCisgICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKKyAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwg
V1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogfTsKIApAQCAtNTM3LDE1ICs1MjgsMTUgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAg
ICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0
KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVy
QnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFt
ZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNT
ZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIHZhbHVlKTsKQEAgLTU2Niw1NSArNTU3LDUyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1Nl
dD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0
KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+
JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAg
ICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQp
LCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJy
b3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAgICAgUmVmPFBhcmFt
ZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQp
OwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVh
c2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFtZXRlckJ1bmRs
ZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4q
PigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0g
UGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJl
c3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldENvbHVtbk5h
bWVzKC4uLikKICAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKICAgICAgKiAgICAgLnNldFRpbWVz
dGFtcCguLi4pCiAgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQogICAgICAqICAgICAuc2V0UGF5
bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pOworICAgICAqICAgICAuc2V0RXJy
b3IoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
fQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOwogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdl
dHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRo
b2RzLiAqLwpAQCAtNjQwLDEwICs2MjgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVp
bGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92
ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwogICAgIHB1YmxpYzoKQEAgLTY4MywzMyAr
NjcxLDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHM+JiAoKQorICAgICAgICBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0
cykgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwot
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQ
YXNzUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHM+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAK
ICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8T2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3Jl
YXRlKCkKICAgICAgKiAgICAgLnNldEludGVnZXIoLi4uKQogICAgICAqICAgICAuc2V0QXJyYXko
Li4uKQogICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKICAgICAgKiAgICAgLnNldFZhbHVlKC4u
LikKLSAgICAgKiAgICAgLnNldE9iamVjdCguLi4pOworICAgICAqICAgICAuc2V0T2JqZWN0KC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAg
ICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0
czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKQEAgLTczOCwxNSArNzIzLDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFt
ZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVp
bGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsK
ICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYg
c2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJp
bmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0
Q29sdW1uTmFtZXMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZh
bHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29s
dW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1
ZSk7CkBAIC03NjcsNTUgKzc1Miw1MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRW
YWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3Bl
cnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5
bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBFcnJvclNldD4mIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYg
c2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJv
clNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4mICgpCisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5k
bGU+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKLSAgICAg
ICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlz
KS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJnJlc3Vs
dCkpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRl
ckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQ
YXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4p
CiAgICAgICogICAgIC5zZXROb3RlcyguLi4pCiAgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4u
KQogICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKICAgICAgKiAgICAgLnNldFBheWxvYWQoLi4u
KQotICAgICAqICAgICAuc2V0RXJyb3IoLi4uKTsKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLikK
KyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0
eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsK
IH07CiAKIH0gLy8gVGVzdApAQCAtMTMzMSw3ICsxMzEzLDYgQEAgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
LXJlc3VsdAppbmRleCA3NmQwMWVkLi5hNTRjOTUxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgot
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hl
cjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgot
ICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7CiB9OwogCiAKQEAgLTEzMSw3ICsxMzEsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RW51bSgiVGVzdC5DYXN0ZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucwog
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CkBAIC0yNDAsNyArMjM5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVk
ZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzOCw3ICszMzYsNiBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzk2LDEwICszOTMs
MTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPC8qVHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1v
dmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3Mg
VHlwZU5lZWRpbmdDYXN0OwogICAgIHB1YmxpYzoKQEAgLTQzMiw0MCArNDI5LDM3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ0
cmVlIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsK
ICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+JiAo
KQorICAgICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGlu
Z0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0
KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VHlwZU5lZWRp
bmdDYXN0Pio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPFR5
cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8VHlwZU5lZWRpbmdDYXN0PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8VHlwZU5lZWRpbmdDYXN0Pio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAg
ICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8VHlwZU5l
ZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCisgICAgICogUmVm
PFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQogICAg
ICAqICAgICAuc2V0U3RyaW5nKC4uLikKICAgICAgKiAgICAgLnNldE51bWJlciguLi4pCiAgICAg
ICogICAgIC5zZXRBbmltYWxzKC4uLikKICAgICAgKiAgICAgLnNldElkKC4uLikKLSAgICAgKiAg
ICAgLnNldFRyZWUoLi4uKTsKKyAgICAgKiAgICAgLnNldFRyZWUoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVj
dG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogLyogICov
CkBAIC00OTksNDAgKzQ5MywzNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9i
amVjdDEqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAg
ICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CiAgICAgcHVibGljOgogCi0gICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPiYgKCkKKyAgICAgICAgUmVmPFJl
Y3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVv
ZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4qPigmbV9y
ZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3Qx
PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNp
dmVPYmplY3QxPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZl
T2JqZWN0MT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+
IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpOworICAgICAqIFJlZjxSZWN1cnNp
dmVPYmplY3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKQorICAgICAqICAg
ICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5z
cGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCi0gICAgdm9p
ZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAg
ICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwg
V1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogfTsKIApAQCAtNTUzLDQwICs1NDQsMzcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qUmVjdXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAg
ICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmpl
Y3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNp
dmVPYmplY3QyOwogICAgIHB1YmxpYzoKIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVjdXJz
aXZlT2JqZWN0Mj4mICgpCisgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQogCi0gICAg
ICAgIFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4oKnRoaXMpLnJlbGVhc2Uo
KTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJnJlc3VsdCkpOwogICAg
ICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgot
ICAgICAqIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3Qy
OjpjcmVhdGUoKTsKKyAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJz
aXZlT2JqZWN0Mjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKICAgICAgKi8KICAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0
ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAotICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgdm9pZCBz
ZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
IHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgib2JqIiksIHZhbHVlKTsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib2JqIiksIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0K
IH07CiAKQEAgLTU5OCw3ICs1ODYsNyBAQCBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRAogfTsKIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOworc3RhdGljIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRApAQCAtNjg0LDYg
KzY3Miw3IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogI2lmICFB
U1NFUlRfRElTQUJMRUQKIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUp
OwogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
U3RyaW5nKHJlc3VsdCk7CiAgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOwpAQCAtNjk0LDYgKzY4
Myw3IEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IHZhbHVlKQogeworICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
T2JqZWN0KG9iamVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3Vj
Y2VlZGVkKTsKQEAgLTcyOSw3ICs3MTksNyBAQCB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeAogfQog
I2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2Jq
ZWN0KHJlc3VsdCk7CkBAIC03NDUsNiArNzM1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjoK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9BUkcodmFs
dWUsIHZhbHVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICAgYm9v
bCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CiAgICAgQVNTRVJUX1VO
VVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKQEAgLTc2NSw2ICs3NTYsNyBAQCB2
b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0MT46OmFzc2VydFZhbHVlSGFzRQogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUp
CiB7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qo
b2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQp
OwpAQCAtMTI1Niw3ICsxMjQ4LDYgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9F
bmNvZGVkVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFs
dWUuY3BwCmluZGV4IGM3MWRiYzYuLjcyN2ViYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAKQEAgLTM3LDIyICszNywyMiBAQCB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEVuY29kZWRWYWx1ZTo6YXNPYmplY3QoKQorUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gRW5jb2RlZFZhbHVlOjphc09iamVjdCgpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0OwogICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFzT2JqZWN0KHJl
c3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
IAotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJheSgpCitSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJheSgpCiB7CiAgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gbV92YWx1
ZS0+YXNBcnJheShyZXN1bHQpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8VmVjdG9yPGNoYXI+Pjo6
ZW5jb2RlVmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCkBAIC0xNzUsMjMgKzE3NSwy
MyBAQCB0ZW1wbGF0ZTw+IFN0cmluZyBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxTdHJpbmc+KCkK
IHRlbXBsYXRlPD4KIHZvaWQgRW5jb2RlZFZhbHVlOjpwdXQ8RW5jb2RlZFZhbHVlPihjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgdHlwZW5hbWUgRW5jb2RpbmdUcmFpdHM8RW5jb2RlZFZhbHVlPjo6
RGVjb2RlZFR5cGUmIHZhbHVlKQogewotICAgIGFzT2JqZWN0KCktPnNldFZhbHVlKGtleSwgdmFs
dWUubV92YWx1ZSk7CisgICAgYXNPYmplY3QoKS0+c2V0VmFsdWUoa2V5LCB2YWx1ZS5tX3ZhbHVl
LmNvcHlSZWYoKSk7CiB9CiAKIHRlbXBsYXRlPD4KIHZvaWQgRW5jb2RlZFZhbHVlOjphcHBlbmQ8
RW5jb2RlZFZhbHVlPihjb25zdCB0eXBlbmFtZSBFbmNvZGluZ1RyYWl0czxFbmNvZGVkVmFsdWU+
OjpEZWNvZGVkVHlwZSYgdmFsdWUpCiB7Ci0gICAgYXNBcnJheSgpLT5wdXNoVmFsdWUodmFsdWUu
bV92YWx1ZSk7CisgICAgYXNBcnJheSgpLT5wdXNoVmFsdWUodmFsdWUubV92YWx1ZS5jb3B5UmVm
KCkpOwogfQogCiB0ZW1wbGF0ZTw+CiBib29sIEVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRWYWx1
ZT4oY29uc3QgU3RyaW5nJiBrZXksIHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPEVuY29kZWRWYWx1
ZT46OkRlY29kZWRUeXBlJiBkZWNvZGVkVmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+IGluc3BlY3RvclZhbHVlKGFzT2JqZWN0KCktPmdldChrZXkpKTsKLSAg
ICBpZiAoIWluc3BlY3RvclZhbHVlKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiB2YWx1ZTsKKyAgICBpZiAoIWFzT2JqZWN0KCktPmdldFZhbHVlKGtleSwgdmFsdWUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkZWNvZGVkVmFsdWUgPSBFbmNvZGVkVmFsdWUo
aW5zcGVjdG9yVmFsdWUpOworICAgIGRlY29kZWRWYWx1ZSA9IEVuY29kZWRWYWx1ZShXVEY6Om1v
dmUodmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKaW5kZXggYzAwMTBlOC4uODY1OWI0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oCkBAIC00MSw3ICs0MSw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czsKIAogY2xhc3MgRW5j
b2RlZFZhbHVlIGZpbmFsIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFbmNvZGVkVmFsdWUoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICBleHBsaWNpdCBF
bmNvZGVkVmFsdWUoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiAg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkgeyB9CiAKICAgICBFbmNvZGVkVmFsdWUoKQpAQCAtNzgs
OCArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRU
bygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gYXNPYmplY3QoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXkoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGFzT2JqZWN0KCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGFzQXJy
YXkoKTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4g
bV92YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkKaW5kZXggZGY5Yjk2Ny4u
NjVmNTQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkKQEAgLTM0MSwxMyAr
MzQxLDEzIEBAIGNsYXNzIFR5cGU6CiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBUeXBlTW9kZXMu
U0NBTEFSOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZCkKICAg
ICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gVHlwZU1vZGVzLlNIQVJFRDoKLSAgICAgICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwlcz4iICUgc2VsZi50eXBlX25hbWUocXVhbGlmaWVkKQorICAgICAg
ICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZCkKICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiAiY29uc3QgJXMmIiAlIHNlbGYudHlwZV9u
YW1lKHF1YWxpZmllZCkKIAogICAgIGRlZiBhcmd1bWVudF90eXBlKHNlbGYsIHF1YWxpZmllZD1G
YWxzZSk6CiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBUeXBlTW9kZXMuU0hBUkVEOgotICAgICAg
ICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzPiIgJSBzZWxmLnR5cGVfbmFtZShxdWFsaWZpZWQp
CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjwlcz4mJiIgJSBzZWxmLnR5cGVfbmFtZShxdWFs
aWZpZWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdG9yYWdlX3R5
cGUoKQogCkBAIC05MzksNyArOTM5LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgZGVmIGdl
bmVyYXRlX21lbWJlcl9tb3ZlX2V4cHJlc3Npb24oc2VsZiwgX21lbWJlcik6CiAgICAgICAgIF90
eXBlID0gc2VsZi5fbW9kZWwuZ2V0X3R5cGVfZm9yX21lbWJlcihfbWVtYmVyKQotICAgICAgICBp
ZiBfdHlwZS5tb2RlID09IFR5cGVNb2Rlcy5PV05FRDoKKyAgICAgICAgaWYgX3R5cGUubW9kZSBp
biBbVHlwZU1vZGVzLk9XTkVELCBUeXBlTW9kZXMuU0hBUkVEXToKICAgICAgICAgICAgIHJldHVy
biAiV1RGOjptb3ZlKCVzKSIgJSBfbWVtYmVyLm1lbWJlck5hbWUKICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgIHJldHVybiBfbWVtYmVyLm1lbWJlck5hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAKaW5kZXggYzFiOWYxMS4uYjc2NjM2OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAK
QEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIENvbnNvbGVDbGllbnQ6OnByaW50Q29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsCiAgICAgV1RGTG9nQWx3
YXlzKCIlcyIsIGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBD
b25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cykK
K3ZvaWQgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgcHJwQXJndW1l
bnRzKQogewogICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyA9IHBycEFyZ3Vt
ZW50czsKIApAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgQ29uc29sZUNsaWVudDo6cHJpbnRDb25z
b2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhCiAgICAg
fQogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2
ZWwoTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cywgQXJndW1lbnRS
ZXF1aXJlbWVudCBhcmd1bWVudFJlcXVpcmVtZW50KQordm9pZCBDb25zb2xlQ2xpZW50OjppbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYg
cHJwQXJndW1lbnRzLCBBcmd1bWVudFJlcXVpcmVtZW50IGFyZ3VtZW50UmVxdWlyZW1lbnQpCiB7
CiAgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzID0gcHJwQXJndW1lbnRzOwog
ICAgIGlmIChhcmd1bWVudFJlcXVpcmVtZW50ID09IEFyZ3VtZW50UmVxdWlyZWQgJiYgIWFyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpKQpAQCAtMTk1LDU3ICsxOTUsNTcgQEAgdm9pZCBDb25zb2xl
Q2xpZW50OjppbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUs
IE1lc3NhZ2VMZXYKICAgICBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCh0eXBlLCBsZXZlbCwgZXhl
YywgYXJndW1lbnRzLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6bG9nV2l0
aExldmVsKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cywgTWVzc2FnZUxldmVsIGxldmVsKQordm9pZCBDb25zb2xlQ2xpZW50Ojpsb2dXaXRoTGV2
ZWwoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cywg
TWVzc2FnZUxldmVsIGxldmVsKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2
ZWwoTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnRSZXF1
aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6
TG9nLCBsZXZlbCwgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50UmVxdWlyZWQp
OwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6Y2xl
YXIoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykK
IHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpDbGVh
ciwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RSZXF1aXJl
ZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6Q2xl
YXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1l
bnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6ZGlyKEV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29s
ZUNsaWVudDo6ZGlyKEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBh
cmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdl
VHlwZTo6RGlyLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudFJl
cXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBl
OjpEaXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJn
dW1lbnRSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6ZGlyWE1MKEV4ZWNTdGF0
ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29u
c29sZUNsaWVudDo6ZGlyWE1MKEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChN
ZXNzYWdlVHlwZTo6RGlyWE1MLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBB
cmd1bWVudFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1l
c3NhZ2VUeXBlOjpEaXJYTUwsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJn
dW1lbnRzKSwgQXJndW1lbnRSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6dGFi
bGUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
KQordm9pZCBDb25zb2xlQ2xpZW50Ojp0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBl
QW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlRhYmxlLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJn
dW1lbnRzLCBBcmd1bWVudFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFu
ZExldmVsKE1lc3NhZ2VUeXBlOjpUYWJsZSwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIFdURjo6
bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xp
ZW50Ojp0cmFjZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMpCit2b2lkIENvbnNvbGVDbGllbnQ6OnRyYWNlKEV4ZWNTdGF0ZSogZXhlYywgUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdl
V2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6VHJhY2UsIE1lc3NhZ2VMZXZlbDo6TG9nLCBl
eGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50Tm90UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2Fn
ZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlRyYWNlLCBNZXNzYWdlTGV2ZWw6OkxvZywg
ZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50Tm90UmVxdWlyZWQpOwogfQogCi12
b2lkIENvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NS
ZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIGJvb2wgY29uZGl0aW9uKQordm9pZCBD
b25zb2xlQ2xpZW50Ojphc3NlcnRDb25kaXRpb24oRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cywgYm9vbCBjb25kaXRpb24pCiB7CiAgICAgaWYgKGNv
bmRpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVB
bmRMZXZlbChNZXNzYWdlVHlwZTo6QXNzZXJ0LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBleGVjLCBh
cmd1bWVudHMsIEFyZ3VtZW50Tm90UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhU
eXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkFzc2VydCwgTWVzc2FnZUxldmVsOjpFcnJvciwgZXhl
YywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50Tm90UmVxdWlyZWQpOwogfQogCi12b2lk
IENvbnNvbGVDbGllbnQ6Omdyb3VwKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXAoRXhlY1N0YXRl
KiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3VwLCBNZXNz
YWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKKyAg
ICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3Vw
LCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50
Tm90UmVxdWlyZWQpOwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6Omdyb3VwQ29sbGFwc2VkKEV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3Zv
aWQgQ29uc29sZUNsaWVudDo6Z3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3VwQ29sbGFwc2VkLCBNZXNzYWdlTGV2
ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKKyAgICBpbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3VwQ29sbGFw
c2VkLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3Vt
ZW50Tm90UmVxdWlyZWQpOwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6Omdyb3VwRW5kKEV4ZWNT
dGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQg
Q29uc29sZUNsaWVudDo6Z3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExl
dmVsKE1lc3NhZ2VUeXBlOjpFbmRHcm91cCwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3Vt
ZW50cywgQXJndW1lbnROb3RSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVB
bmRMZXZlbChNZXNzYWdlVHlwZTo6RW5kR3JvdXAsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBX
VEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZUNsaWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVu
dC5oCmluZGV4IDhmNGYxOTMuLmExNmI4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zb2xlQ2xpZW50LmgKQEAgLTQyLDMwICs0MiwzMCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB+Q29uc29sZUNsaWVudCgpIHsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgcHJpbnRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKIAotICAgIHZvaWQgbG9nV2l0aExl
dmVsKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+LCBN
ZXNzYWdlTGV2ZWwpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgZGlyKEV4ZWNTdGF0ZSosIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGRpclhNTChFeGVj
U3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9p
ZCB0YWJsZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
Pik7Ci0gICAgdm9pZCB0cmFjZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2Ny
aXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBhc3NlcnRDb25kaXRpb24oRXhlY1N0YXRlKiwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4sIGJvb2wgY29uZGl0aW9uKTsKLSAg
ICB2b2lkIGdyb3VwKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+KTsKLSAgICB2b2lkIGdyb3VwQ29sbGFwc2VkKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGdyb3VwRW5kKEV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lkIGxv
Z1dpdGhMZXZlbChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+
JiYsIE1lc3NhZ2VMZXZlbCk7CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqLCBSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOworICAgIHZvaWQgZGlyKEV4ZWNTdGF0ZSosIFJl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCBkaXJYTUwoRXhl
Y1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2b2lk
IHRhYmxlKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7
CisgICAgdm9pZCB0cmFjZShFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpOworICAgIHZvaWQgYXNzZXJ0Q29uZGl0aW9uKEV4ZWNTdGF0ZSosIFJlZlB0cjxJ
bnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwgYm9vbCBjb25kaXRpb24pOworICAgIHZvaWQg
Z3JvdXAoRXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsK
KyAgICB2b2lkIGdyb3VwQ29sbGFwc2VkKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCBncm91cEVuZChFeGVjU3RhdGUqLCBSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwogCi0gICAgdmlydHVhbCB2b2lkIG1lc3Nh
Z2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY291bnQoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2
ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY291bnQo
RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHByb2ZpbGUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcm9maWxlRW5kKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdGltZShFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHRpdGxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRpbWVFbmQoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAoRXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4mJikgPSAwOwogCiBwcml2YXRlOgogICAgIGVudW0gQXJndW1lbnRSZXF1
aXJlbWVudCB7IEFyZ3VtZW50UmVxdWlyZWQsIEFyZ3VtZW50Tm90UmVxdWlyZWQgfTsKLSAgICB2
b2lkIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiwgQXJndW1lbnRSZXF1aXJlbWVudCk7CisgICAgdm9pZCBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwg
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmLCBBcmd1bWVudFJlcXVpcmVtZW50
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlU2V0LmNwcAppbmRleCAzMTBmNjRkLi4yYTU1MmY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcApAQCAtMjM3LDE3ICsyMzcsMTcgQEAgU3RyaW5nIFR5
cGVTZXQ6OmxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBUeXBlU2V0OjphbGxTdHJ1
Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdAorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPj4g
VHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3QKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0
aW9uPjo6Y3JlYXRlKCk7CisgICAgYXV0byBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0
aW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJl
SGlzdG9yeS5zaXplKCk7IGkrKykKICAgICAgICAgZGVzY3JpcHRpb24tPmFkZEl0ZW0obV9zdHJ1
Y3R1cmVIaXN0b3J5LmF0KGkpLT5pbnNwZWN0b3JSZXByZXNlbnRhdGlvbigpKTsKIAotICAgIHJl
dHVybiBkZXNjcmlwdGlvbi5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkZXNjcmlw
dGlvbik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlw
ZVNldD4gVHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCgpIGNvbnN0CitSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHlwZVNldD4gVHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXQ6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJc0Z1bmN0aW9uKChtX3NlZW5UeXBlcyAmIFR5cGVGdW5j
dGlvbikgIT0gVHlwZU5vdGhpbmcpCkBAIC01MTEsMTEgKzUxMSwxMSBAQCBTdHJpbmcgU3RydWN0
dXJlU2hhcGU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKK1JlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0
dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IGJhc2UgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2Ny
aXB0aW9uPiBjdXJyZW50T2JqZWN0ID0gYmFzZTsKLSAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+
IGN1cnJlbnRTaGFwZSA9IHRoaXM7CisgICAgYXV0byBiYXNlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+
IGN1cnJlbnRPYmplY3QgPSBiYXNlLmNvcHlSZWYoKTsKKyAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IGN1cnJlbnRTaGFwZSh0aGlzKTsKIAogICAgIHdoaWxlIChjdXJyZW50U2hhcGUpIHsKICAg
ICAgICAgYXV0byBmaWVsZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Ojpj
cmVhdGUoKTsKQEAgLTUyNSwyMSArNTI1LDIxIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVyZVNoYXBlOjppCiAg
ICAgICAgIGZvciAoYXV0byBmaWVsZCA6IGN1cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcykK
ICAgICAgICAgICAgIG9wdGlvbmFsRmllbGRzLT5hZGRJdGVtKGZpZWxkLmdldCgpKTsKIAotICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoZmllbGRzKTsKLSAgICAgICAgY3VycmVudE9i
amVjdC0+c2V0T3B0aW9uYWxGaWVsZHMob3B0aW9uYWxGaWVsZHMpOworICAgICAgICBjdXJyZW50
T2JqZWN0LT5zZXRGaWVsZHMoJmZpZWxkcy5nZXQoKSk7CisgICAgICAgIGN1cnJlbnRPYmplY3Qt
PnNldE9wdGlvbmFsRmllbGRzKCZvcHRpb25hbEZpZWxkcy5nZXQoKSk7CiAgICAgICAgIGN1cnJl
bnRPYmplY3QtPnNldENvbnN0cnVjdG9yTmFtZShjdXJyZW50U2hhcGUtPm1fY29uc3RydWN0b3JO
YW1lKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0SXNJbXByZWNpc2UoY3VycmVudFNoYXBl
LT5tX2lzSW5EaWN0aW9uYXJ5TW9kZSk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRTaGFwZS0+bV9w
cm90bykgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBuZXh0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgY3Vy
cmVudE9iamVjdC0+c2V0UHJvdG90eXBlU3RydWN0dXJlKG5leHRPYmplY3QpOwotICAgICAgICAg
ICAgY3VycmVudE9iamVjdCA9IG5leHRPYmplY3Q7CisgICAgICAgICAgICBhdXRvIG5leHRPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6
Y3JlYXRlKCkucmVsZWFzZSgpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0UHJvdG90
eXBlU3RydWN0dXJlKCZuZXh0T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIGN1cnJlbnRPYmpl
Y3QgPSBXVEY6Om1vdmUobmV4dE9iamVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjdXJyZW50
U2hhcGUgPSBjdXJyZW50U2hhcGUtPm1fcHJvdG87CiAgICAgfQogCi0gICAgcmV0dXJuIGJhc2Uu
cmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYmFzZSk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCmluZGV4IGIyYzgxMDcuLjFjYTM5MTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkUHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+KTsKICAg
ICBTdHJpbmcgc3RyaW5nUmVwcmVzZW50YXRpb24oKTsKICAgICBTdHJpbmcgdG9KU09OU3RyaW5n
KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKTsKKyAgICBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IGluc3Bl
Y3RvclJlcHJlc2VudGF0aW9uKCk7CiAgICAgdm9pZCBzZXRDb25zdHJ1Y3Rvck5hbWUoU3RyaW5n
IG5hbWUpIHsgbV9jb25zdHJ1Y3Rvck5hbWUgPSAobmFtZS5pc0VtcHR5KCkgPyAiT2JqZWN0IiA6
IG5hbWUpOyB9CiAgICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSgpIHsgcmV0dXJuIG1fY29uc3Ry
dWN0b3JOYW1lOyB9CiAgICAgdm9pZCBzZXRQcm90byhQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBl
PiBzaGFwZSkgeyBtX3Byb3RvID0gc2hhcGU7IH0KQEAgLTEwMiwxMSArMTAyLDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZSgpOwogICAgIFN0cmluZyBkdW1wVHlwZXMoKSBj
b25zdDsKICAgICBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0
cnVjdHVyZURlc2NyaXB0aW9uPj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7
CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRp
b25zKCkgY29uc3Q7CiAgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OwogICAgIGJvb2wg
aXNPdmVyZmxvd24oKSBjb25zdCB7IHJldHVybiBtX2lzT3ZlcmZsb3duOyB9CiAgICAgU3RyaW5n
IGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXQ+IGluc3BlY3RvclR5cGVTZXQoKSBjb25zdDsKKyAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZVNldD4gaW5zcGVjdG9yVHlw
ZVNldCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5
cGVzID09IFR5cGVOb3RoaW5nOyB9CiAgICAgYm9vbCBkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJf
dCB0ZXN0KSBjb25zdDsKICAgICB1aW50MzJfdCBzZWVuVHlwZXMoKSBjb25zdCB7IHJldHVybiBt
X3NlZW5UeXBlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwppbmRleCAxNDljOGVkLi5iNWRhNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDE1LTAxLTA2ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBwdXJnZSBQYXNzUmVmUHRyIGZyb20gSW5zcGVjdG9yIGNv
ZGUgYW5kIHVzZSBSZWYgZm9yIHR5cGVkIGFuZCB1bnR5cGVkIHByb3RvY29sIG9iamVjdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDA1MworCisg
ICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCisKKyAgICAgICAgKiB3dGYvU3RvcHdh
dGNoLmg6CisgICAgICAgIChXVEY6OlN0b3B3YXRjaDo6Y3JlYXRlKTogUmV0dXJuIGEgUmVmLgor
CiAyMDE1LTAxLTA1ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAg
ICBQdXJnZSBQYXNzUmVmUHRyIGZyb20gUGFnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1N0b3B3YXRjaC5oIGIvU291cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKaW5kZXggNDIxMzkxMS4u
OWNiYTlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKKysrIGIvU291
cmNlL1dURi93dGYvU3RvcHdhdGNoLmgKQEAgLTMzLDkgKzMzLDkgQEAgbmFtZXNwYWNlIFdURiB7
CiAKIGNsYXNzIFN0b3B3YXRjaCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3B3YXRjaD4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3B3YXRjaD4gY3JlYXRlKCkKKyAgICBzdGF0
aWMgUmVmPFN0b3B3YXRjaD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RvcHdhdGNoKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9wd2F0
Y2goKSk7CiAgICAgfQogCiAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM1NDYwZmEu
Ljk4MDc3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMzUgQEAKKworMjAxNS0wMS0wNiAgQnJp
YW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogcHVyZ2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZv
ciB0eXBlZCBhbmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdXNlcyBvZiBQ
YXNzUmVmUHRyIHdpdGggdXNlcyBvZiBSZWZQdHImJiBhbmQgV1RGOjptb3ZlKCkgaW4gY29kZQor
ICAgICAgICByZWxhdGVkIHRvIFdlYiBJbnNwZWN0b3IuIEl0IGFsc28gY29udmVydHMgbWFueSB1
c2VzIG9mIFJlZlB0ciB0byBSZWYgd2hlcmUKKyAgICAgICAgcmVmZXJlbmNlcyBhcmUgYWx3YXlz
IG5vbi1udWxsLiBUaGVzZSB0d28gcmVmYWN0b3JpbmdzIGhhdmUgYmVlbiBjb21iaW5lZCBzaW5j
ZQorICAgICAgICB0aGV5IHRlbmQgdG8gcmVxdWlyZSBzaW1pbGFyIGNoYW5nZXMgdG8gdGhlIGNv
ZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VkLgorCisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bG9nRXhjZXB0aW9uVG9D
b25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRNZXNzYWdlKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXBvcnRF
eGNlcHRpb24pOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvckRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhTU0F1ZGl0b3JEZWxlZ2F0ZTo6Z2VuZXJhdGVWaW9sYXRpb25SZXBvcnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0Nv
bW1hbmRMaW5lQVBJSG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlv
bkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0
eWxlc0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENv
bXB1dGVkU3R5bGVGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpzZXRTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFByb3BlcnR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9n
Z2xlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1
bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2Vu
dDo6Zm9yY2VQc2V1ZG9TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0TmFtZWRGbG93Q29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0Fn
ZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JOYW1lZEZs
b3cpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29s
ZVRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNv
bnNvbGVUaW1lU3RhbXApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9i
amVjdEZvckhpZ2hsaWdodGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2gpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VDb25maWdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cHVz
aE5vZGVQYXRoVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
c2V0SW5zcGVjdE1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpp
bm5lckhpZ2hsaWdodFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OmhpZ2hsaWdodE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9y
RE9NRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdl
QXJlYSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDogVXNlIFJlZiBm
b3IgYWxsIGNhbGxiYWNrcyBzaW5jZSB0aGV5IGFyZQorICAgICAgICBub3QgbnVsbGFibGUuCisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpzZXREYXRhYmFzZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6IFVzZSBSZWYgZm9yIGFsbCBjYWxsYmFja3Mgc2lu
Y2UgdGhleSBhcmUKKyAgICAgICAgbm90IG51bGxhYmxlLgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Q2xlYXJPYmplY3RTdG9yZUxpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlOjpDbGVhck9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xl
Q291bnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RvcENvbnNvbGVUaW1pbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9u
TG9hZGVkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlc3Npb25Nb2RpZmllZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5jaHJv
bm91c2x5SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZExvYWRYSFJTeW5jaHJvbm91c2x5SW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVdvcmtlclNjcmlwdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1
cmVTdG9wcGVkSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnBsYXliYWNrU3RhcnRlZEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1BhdXNlZEltcGwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFj
a0hpdFBvc2l0aW9uSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnBsYXliYWNrRmluaXNoZWRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZElt
cGwpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExv
YWRYSFIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNz
aW9uQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlc3Npb25Mb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZXNzaW9uTW9kaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRl
ZExvYWRpbmdGb3JDbGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRTZW5kV2ViU29ja2V0RnJhbWUpOiBEZWxldGVkLgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25z
Rm9yQ29tcG9zaXRpbmdMYXllcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVy
VHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZE9iamVjdEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRBcnJheUZvclF1
YWQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JSZWdpb25IaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6YnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkT2JqZWN0Rm9yU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZv
ckNTU1JlZ2lvbkNvbnRlbnRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmRyYXdQYWludFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yUmVu
ZGVyZXJGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTaGFwZU91
dHNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hsaWdo
dGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhIUlRl
eHREZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yQ29va2llKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1aWxkQXJyYXlGb3JDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clJlcGxheUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJ
bnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24p
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXNzaW9uRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVudERhdGEp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmJ1aWxkT2JqZWN0Rm9ySGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZv
clRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRTZW5kV2Vi
U29ja2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
c2V0RXh0cmFIVFRQSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlk
U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRDYWNoZURpc2FibGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFBhcnNlZFN0eWxl
U2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRTb3VyY2VS
YW5nZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlhT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFzQ1NTUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlh
TGlzdENoYWluKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6ZXh0cmFjdFNvdXJjZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGVTaGVldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTZWxl
Y3RvckhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RvcnNGcm9tU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RG
b3JTZWxlY3Rvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6
YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNTU0lkOjpJbnNwZWN0b3JDU1NJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDU1NJZDo6YXNQcm90b2NvbFZhbHVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzdGFydEZyb21Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlUmVjb3JkRW50cnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZCk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9OZXR3
b3JrUmVzb3VyY2VzRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYSFJSZXBsYXlEYXRhOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WEhSUmVwbGF5RGF0YTo6WEhSUmVwbGF5RGF0YSk6
CisgICAgICAgICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpkZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OnNldERl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNl
RGF0YTo6YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpS
ZXNvdXJjZURhdGE6OnNldEJ1ZmZlcik6CisgICAgICAgICogaW5zcGVjdG9yL1RpbWVsaW5lUmVj
b3JkRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6
OmNyZWF0ZUdlbmVyaWNSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVCYWNrZ3JvdW5kUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29uc29sZVByb2ZpbGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVT
YW1wbGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlRXZlbnREaXNwYXRjaERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVHZW5lcmljVGltZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZXJJbnN0YWxsRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSTG9h
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVF
dmFsdWF0ZVNjcmlwdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVUaW1lU3RhbXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVz
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVS
ZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZUZpbmlzaERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZlUmVzb3VyY2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTGF5b3V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZURlY29kZUlt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVJlc2l6ZUltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZU1hcmtEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUGFpbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkUHJvZmlsZUluc3BlY3Rvck9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlV2ViU29ja2V0Q3JlYXRlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNXZWJT
b2NrZXREYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpleGVj
dXRpb25TdG9wd2F0Y2gpOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250
cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6YWRkTWVzc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlQ29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
b25zb2xlQ2xpZW50Ojp0aW1lRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xp
ZW50Ojp0aW1lU3RhbXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuaDoKKyAg
ICAgICAgKiByZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlDb250cm9sbGVyOjpzd2l0Y2hTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
eUNvbnRyb2xsZXI6OmNyZWF0ZVNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29u
dHJvbGxlcjo6Y29tcGxldGVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRy
b2xsZXI6OmxvYWRTZWdtZW50QXRJbmRleCk6CisgICAgICAgICogcmVwbGF5L1JlcGxheUlucHV0
Q3JlYXRpb25NZXRob2RzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluaXRpYWxOYXZpZ2F0aW9u
OjpjcmVhdGVGcm9tUGFnZSk6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6bG9n
RXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKToK
KyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xl
KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisKIDIwMTUtMDEtMDYg
IEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IHBhc3MgcGFyYW1ldGVycyB0byBpbnNwZWN0b3IgYWdlbnRzIGJ5IHJlZmVyZW5j
ZSB3aGVyZSBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCmluZGV4IGI5ZDU5MTIuLjUwZWYwMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFz
ZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZQogCiAg
ICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJhc2VDb250
ZXh0Rm9yKGNvbnRleHQpOwogICAgIGRhdGFiYXNlQ29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNl
cygpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRl
eHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbik7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0
YWJhc2UoY29udGV4dCwgZGF0YWJhc2UuY29weVJlZigpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLT5ob3N0KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lvbik7CiAKICAgICBpZiAoYmFja2VuZC0+
aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFz
ZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggOGY4
Y2I4ZS4uMWY0NTYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yNjA2LDkgKzI2MDYs
OSBAQCBFdmVudFRhcmdldCogRG9jdW1lbnQ6OmVycm9yRXZlbnRUYXJnZXQoKQogICAgIHJldHVy
biBtX2RvbVdpbmRvdy5nZXQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6bG9nRXhjZXB0aW9uVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3ZvaWQgRG9jdW1lbnQ6OmxvZ0V4Y2VwdGlv
blRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrKQogewotICAgIGFkZE1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwgc291cmNlVVJM
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7CisgICAgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgZXJyb3JNZXNzYWdlLCBzb3Vy
Y2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgV1RGOjptb3ZlKGNhbGxTdGFjaykpOwog
fQogCiB2b2lkIERvY3VtZW50OjpzZXRVUkwoY29uc3QgVVJMJiB1cmwpCkBAIC00OTY3LDcgKzQ5
NjcsNyBAQCB2b2lkIERvY3VtZW50OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdAogICAgICAgICBwYWdlLT5jb25zb2xlKCku
YWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCByZXF1ZXN0SWRlbnRpZmllciwgdGhp
cyk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgRG9j
dW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKCFpc0NvbnRleHRUaHJlYWQo
KSkgewogICAgICAgICBwb3N0VGFzayhBZGRDb25zb2xlTWVzc2FnZVRhc2soc291cmNlLCBsZXZl
bCwgU3RyaW5nQ2FwdHVyZShtZXNzYWdlKSkpOwpAQCAtNDk3NSw3ICs0OTc1LDcgQEAgdm9pZCBE
b2N1bWVudDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxl
dmVsLCBjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBh
Z2UoKSkKLSAgICAgICAgcGFnZS0+Y29uc29sZSgpLmFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwg
bWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjaywg
c3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAgICAgcGFnZS0+Y29uc29sZSgpLmFkZE1l
c3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIFdURjo6bW92ZShjYWxsU3RhY2spLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIp
OwogfQogCiBTZWN1cml0eU9yaWdpbiogRG9jdW1lbnQ6OnRvcE9yaWdpbigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCmluZGV4IDk4MzZlYTkuLmYxYjdkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CkBAIC0xMTc5LDcgKzExNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kV2lsbFJldmVhbEVk
Z2VFdmVudHNJZk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbnN0IEludFBv
aW50JiBuZXdQb3NpdGlvbiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFNp
emUmIGNvbnRlbnRzU2l6ZSwgRWxlbWVudCogdGFyZ2V0ID0gbnVsbHB0cik7CiAKICAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0KiBlcnJvckV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWw7Ci0gICAg
dmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPikgb3ZlcnJpZGUg
ZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYp
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCBpbml0RE5TUHJlZmV0Y2goKTsKIApAQCAtMTMx
Nyw3ICsxMzE3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIG92ZXJyaWRlIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgb3ZlcnJpZGUgZmluYWwgeyBkZXJlZigpOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIgPSAwKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBK
U0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkg
b3ZlcnJpZGUgZmluYWw7CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZh
bCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggYjJkYjU5MS4uMWEwNjM3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMzUwLDI1ICszNTAs
MjUgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzYW5pdGl6ZVNjcmlwdEVycm9yKFN0
cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgQ2Fj
aGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJl
cG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIs
IGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiB7CiAg
ICAgaWYgKG1faW5EaXNwYXRjaEVycm9yRXZlbnQpIHsKICAgICAgICAgaWYgKCFtX3BlbmRpbmdF
eGNlcHRpb25zKQogICAgICAgICAgICAgbV9wZW5kaW5nRXhjZXB0aW9ucyA9IHN0ZDo6bWFrZV91
bmlxdWU8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRXhjZXB0aW9uPj4+KCk7Ci0gICAg
ICAgIG1fcGVuZGluZ0V4Y2VwdGlvbnMtPmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdF
eGNlcHRpb24+KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VV
UkwsIGNhbGxTdGFjaykpOworICAgICAgICBtX3BlbmRpbmdFeGNlcHRpb25zLT5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxQZW5kaW5nRXhjZXB0aW9uPihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBjYWxsU3RhY2suY29weVJlZigpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBGaXJzdCByZXBvcnQgdGhlIG9yaWdpbmFsIGV4Y2Vw
dGlvbiBhbmQgb25seSB0aGVuIGFsbCB0aGUgbmVzdGVkIG9uZXMuCiAgICAgaWYgKCFkaXNwYXRj
aEVycm9yRXZlbnQoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJj
ZVVSTCwgY2FjaGVkU2NyaXB0KSkKLSAgICAgICAgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGVycm9y
TWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7
CisgICAgICAgIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2suY29weVJlZigpKTsKIAogICAgIGlm
ICghbV9wZW5kaW5nRXhjZXB0aW9ucykKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0V4Y2VwdGlvbj4+PiBwZW5kaW5n
RXhjZXB0aW9ucyA9IFdURjo6bW92ZShtX3BlbmRpbmdFeGNlcHRpb25zKTsKICAgICBmb3IgKGF1
dG8mIGV4Y2VwdGlvbiA6ICpwZW5kaW5nRXhjZXB0aW9ucykKLSAgICAgICAgbG9nRXhjZXB0aW9u
VG9Db25zb2xlKGV4Y2VwdGlvbi0+bV9lcnJvck1lc3NhZ2UsIGV4Y2VwdGlvbi0+bV9zb3VyY2VV
UkwsIGV4Y2VwdGlvbi0+bV9saW5lTnVtYmVyLCBleGNlcHRpb24tPm1fY29sdW1uTnVtYmVyLCBl
eGNlcHRpb24tPm1fY2FsbFN0YWNrKTsKKyAgICAgICAgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGV4
Y2VwdGlvbi0+bV9lcnJvck1lc3NhZ2UsIGV4Y2VwdGlvbi0+bV9zb3VyY2VVUkwsIGV4Y2VwdGlv
bi0+bV9saW5lTnVtYmVyLCBleGNlcHRpb24tPm1fY29sdW1uTnVtYmVyLCBleGNlcHRpb24tPm1f
Y2FsbFN0YWNrLmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCAyYjQzY2E3Li5kOWJlYmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTc2LDcgKzc2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlRXZhbChjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkgPSAwOwogCiAgICAgYm9vbCBzYW5pdGl6ZVNjcmlwdEVycm9yKFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmVOdW1iZXIsIGludCYgY29sdW1uTnVtYmVyLCBTdHJpbmcm
IHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOwotICAgIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNv
bHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRDYWxsU3RhY2s+LCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBy
ZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiAKICAg
ICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRy
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAgICAgdmlydHVhbCB2b2lk
IGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgPSAwOwpA
QCAtMTk4LDkgKzE5OCw5IEBAIHByb3RlY3RlZDoKICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVy
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUq
ID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3RJZGVudGlmaWVyID0gMCkgPSAwOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXQqIGVycm9y
RXZlbnRUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29s
ZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2Ny
aXB0Q2FsbFN0YWNrPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNv
bGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBp
bnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrPiYmKSA9IDA7CiAgICAgYm9vbCBkaXNwYXRjaEVycm9yRXZlbnQoY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwCmluZGV4IGEzMmZhMDguLjA0ZGQwNDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvckRlbGVnYXRl
LmNwcApAQCAtODIsMTIgKzgyLDEyIEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IFhTU0F1ZGl0b3JE
ZWxlZ2F0ZTo6Z2VuZXJhdGVWaW9sYXRpb25SZXBvcnQoY29uc3QgWFNTSW5mbyYKICAgICAgICAg
ICAgIGh0dHBCb2R5ID0gZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpOwogICAgIH0KIAotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydERldGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydERldGFpbHMgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlcG9ydERldGFpbHMtPnNldFN0cmluZygicmVx
dWVzdC11cmwiLCB4c3NJbmZvLm1fb3JpZ2luYWxVUkwpOwogICAgIHJlcG9ydERldGFpbHMtPnNl
dFN0cmluZygicmVxdWVzdC1ib2R5IiwgaHR0cEJvZHkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVwb3J0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBy
ZXBvcnRPYmplY3QtPnNldE9iamVjdCgieHNzLXJlcG9ydCIsIHJlcG9ydERldGFpbHMucmVsZWFz
ZSgpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXBvcnRPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIHJlcG9ydE9iamVjdC0+c2V0T2JqZWN0KCJ4c3MtcmVwb3J0
IiwgV1RGOjptb3ZlKHJlcG9ydERldGFpbHMpKTsKIAogICAgIHJldHVybiBGb3JtRGF0YTo6Y3Jl
YXRlKHJlcG9ydE9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IGIx
M2Q5YzEuLmI0NjRkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21t
YW5kTGluZUFQSUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5k
TGluZUFQSUhvc3QuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0
OjpkaXNjb25uZWN0KCkKICNlbmRpZgogfQogCi12b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5z
cGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBoaW50cykKK3ZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1w
bChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgb2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
JiYgaGludHMpCiB7CiAgICAgaWYgKCFtX2luc3BlY3RvckFnZW50KQogICAgICAgICByZXR1cm47
CkBAIC0xMDEsOCArMTAxLDggQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RJbXBs
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVjdCwgUGFzc1JlZlAKICAgICBpZiAoIWhp
bnRzLT5hc09iamVjdChoaW50c09iamVjdCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlbW90ZU9iamVj
dCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0KTsKLSAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0
KHJlbW90ZU9iamVjdC5yZWxlYXNlKCksIGhpbnRzT2JqZWN0LnJlbGVhc2UoKSk7CisgICAgYXV0
byByZW1vdGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KFdURjo6bW92ZShvYmplY3QpKTsKKyAgICBt
X2luc3BlY3RvckFnZW50LT5pbnNwZWN0KFdURjo6bW92ZShyZW1vdGVPYmplY3QpLCBXVEY6Om1v
dmUoaGludHNPYmplY3QpKTsKIH0KIAogdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50
TGlzdGVuZXJzSW1wbChOb2RlKiBub2RlLCBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+JiBsaXN0
ZW5lcnNBcnJheSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5k
TGluZUFQSUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhv
c3QuaAppbmRleCBiMDNmMTk2Li4zMWU2YzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZEluc3BlY3RlZE9iamVjdChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdGFibGVPYmplY3Q+
KTsKICAgICB2b2lkIGNsZWFySW5zcGVjdGVkT2JqZWN0cygpOwogICAgIEluc3BlY3RhYmxlT2Jq
ZWN0KiBpbnNwZWN0ZWRPYmplY3QodW5zaWduZWQgaW5kZXgpOwotICAgIHZvaWQgaW5zcGVjdElt
cGwoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvYmplY3RUb0luc3BlY3Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaGludHMpOworICAgIHZvaWQg
aW5zcGVjdEltcGwoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgb2JqZWN0VG9J
bnNwZWN0LCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiBoaW50cyk7CiAKICAg
ICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzSW1wbChOb2RlKiwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJ
bmZvPiYgbGlzdGVuZXJzQXJyYXkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmluZGV4IDk0ZDRj
NzguLjQ3ZDgzYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC0xMDgsMTEgKzEwOCwxMiBA
QCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlm
ZXN0cyhFcnJvclN0cmluZyYsIFJlZlB0cgogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Q2FjaGVJbmZvIGluZm8gPSBob3N0LT5hcHBsaWNhdGlvbkNhY2hlSW5mbygpOwogICAgICAgICBT
dHJpbmcgbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5nKCk7CiAgICAgICAgIGlm
ICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+IHZhbHVlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6
OmNyZWF0ZSgpCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAgICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAg
ICAgICAgIC5zZXRNYW5pZmVzdFVSTChtYW5pZmVzdFVSTCkKLSAgICAgICAgICAgICAgICAuc2V0
U3RhdHVzKHN0YXRpY19jYXN0PGludD4oaG9zdC0+c3RhdHVzKCkpKTsKLSAgICAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgLnNldFN0YXR1cyhzdGF0aWNf
Y2FzdDxpbnQ+KGhvc3QtPnN0YXR1cygpKSkKKyAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwor
ICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFdURjo6bW92ZSh2YWx1ZSkpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMTUxLDcgKzE1Miw3IEBAIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVyCiAg
ICAgYXBwbGljYXRpb25DYWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShyZXNv
dXJjZXMsIGluZm8pOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxp
Y2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykK
K1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGlj
YXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYg
YXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNh
Y2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCiB7CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRNYW5pZmVzdFVSTChhcHBsaWNhdGlvbkNhY2hlSW5mby5tX21hbmlmZXN0LnN0
cmluZygpKQpAQCAtMTYyLDE3ICsxNjMsMTcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHAKICAg
ICAgICAgLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpS
ZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQorUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6
OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgQXBwbGljYXRp
b25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IHJlc291
cmNlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAg
IGF1dG8gcmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3Jl
YXRlKCk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlc291cmNlSW5mbyA6IGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCiAgICAgICAgIHJlc291cmNlcy0+YWRkSXRlbShidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShyZXNvdXJjZUluZm8pKTsKIAotICAgIHJldHVybiBy
ZXNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXNvdXJjZXMpOwogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVz
b3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKIHsKICAg
ICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0xOTEsMTEgKzE5MiwxMSBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4gSW5zcAogICAgIGlmIChyZXNvdXJjZUluZm8ubV9pc0V4cGxpY2l0KQogICAgICAg
ICB0eXBlcy5hcHBlbmRMaXRlcmFsKCJFeHBsaWNpdCAiKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+
IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRVcmwocmVzb3VyY2VJbmZvLm1fcmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAg
IC5zZXRTaXplKHN0YXRpY19jYXN0PGludD4ocmVzb3VyY2VJbmZvLm1fc2l6ZSkpCi0gICAgICAg
IC5zZXRUeXBlKHR5cGVzLnRvU3RyaW5nKCkpOwotICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAg
LnNldFR5cGUodHlwZXMudG9TdHJpbmcoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCmluZGV4IGJjNmZlYmIuLmM3MTI5
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTY3LDkgKzY3LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlv
bkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRp
b25DYWNoZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiwgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OkNhY2hlSW5mbyYpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPj4gYnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmKTsKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBidWlsZE9iamVjdEZvckFw
cGxpY2F0aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xp
c3QmLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJik7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9u
Q2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9M
aXN0Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYpOwogCiAgICAg
RG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5n
JiwgU3RyaW5nIGZyYW1lSWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcAppbmRleCA2NWY1ZGM0Li5mNDIxYjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTYxMiw0MCArNjEyLDQy
IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vCiAKICAgICAvLyBQc2V1ZG8gZWxlbWVudHMuCiAg
ICAgaWYgKCFpbmNsdWRlUHNldWRvIHx8ICppbmNsdWRlUHNldWRvKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0VsZW1lbnRzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CiAg
ICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBGSVJTVF9QVUJMSUNfUFNFVURPSUQ7IHBz
ZXVkb0lkIDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VVRE9JRDsgcHNldWRvSWQgPSBzdGF0aWNf
Y2FzdDxQc2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgewogICAgICAgICAgICAgYXV0byBtYXRjaGVk
UnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQs
IHBzZXVkb0lkLCBTdHlsZVJlc29sdmVyOjpBbGxDU1NSdWxlcyk7CiAgICAgICAgICAgICBpZiAo
IW1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+IG1hdGNoZXMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAg
ICBhdXRvIG1hdGNoZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hl
czo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHN0YXRpY19jYXN0
PGludD4ocHNldWRvSWQpKQotICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhidWlsZEFy
cmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCkpOwotICAgICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5hZGRJdGVtKG1hdGNoZXMucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLnNldE1hdGNoZXMoYnVpbGRBcnJheUZvck1h
dGNoZWRSdWxlTGlzdChtYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGVsZW1lbnQpKQorICAg
ICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIHBzZXVkb0VsZW1l
bnRzLT5hZGRJdGVtKFdURjo6bW92ZShtYXRjaGVzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBwc2V1ZG9JZE1hdGNoZXMgPSBwc2V1ZG9FbGVtZW50cy5yZWxlYXNlKCk7
CisgICAgICAgIHBzZXVkb0lkTWF0Y2hlcyA9IFdURjo6bW92ZShwc2V1ZG9FbGVtZW50cyk7CiAg
ICAgfQogCiAgICAgLy8gSW5oZXJpdGVkIHN0eWxlcy4KICAgICBpZiAoIWluY2x1ZGVJbmhlcml0
ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRy
eT4+IGVudHJpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBl
bnRyaWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgICAgIEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIHdoaWxlIChw
YXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICBTdHlsZVJlc29sdmVyJiBwYXJlbnRTdHlsZVJl
c29sdmVyID0gcGFyZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7
CiAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2
ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgU3R5bGVSZXNvbHZlcjo6QWxs
Q1NTUnVsZXMpOwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
SW5oZXJpdGVkU3R5bGVFbnRyeT4gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Oklu
aGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldE1hdGNoZWRD
U1NSdWxlcyhidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcywg
c3R5bGVSZXNvbHZlciwgcGFyZW50RWxlbWVudCkpOworICAgICAgICAgICAgYXV0byBlbnRyeSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkK
KyAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVk
UnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCBwYXJlbnRFbGVtZW50
KSkKKyAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgaWYgKHBhcmVudEVs
ZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIHN0eWxlU2hl
ZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQocGFyZW50RWxlbWVudCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHN0eWxlU2hlZXQpCiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVT
dHlsZShzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQtPnN0eWxlRm9y
SWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC0+aWQoKSwgMCkpKSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKKyAgICAg
ICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKGVudHJ5KSk7CiAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICB9
CiAKLSAgICAgICAgaW5oZXJpdGVkRW50cmllcyA9IGVudHJpZXMucmVsZWFzZSgpOworICAgICAg
ICBpbmhlcml0ZWRFbnRyaWVzID0gV1RGOjptb3ZlKGVudHJpZXMpOwogICAgIH0KIH0KIApAQCAt
NjcxLDcgKzY3Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVJ
bmZvID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgdHJ1ZSk7
Ci0gICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0
eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgY29tcHV0ZWRTdHlsZUluZm8sIG51bGxwdHIp
OworICAgIFJlZjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHls
ZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGVJbmZvLCBudWxscHRyKTsK
ICAgICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgp
OwogfQogCkBAIC03MTgsOSArNzIwLDkgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5
bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICBl
cnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBjb25zdCBT
dHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYg
cmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBmdWxsU3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxT
dHlsZUlkKTsKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkLmNvcHlS
ZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklk
KGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTczNCw5ICs3MzYs
OSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcAogICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50
OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3Bl
cnR5VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRl
eHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHls
ZUlkKTsKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkLmNvcHlSZWYo
KSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JT
dHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVy
cm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTc1MCw5ICs3NTIsOSBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SQogICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0
b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJs
ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCit2
b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0eWxlSWQsIGludCBw
cm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiYgcmVzdWx0KQogewotICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQo
ZnVsbFN0eWxlSWQpOworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQu
Y29weVJlZigpKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIElu
c3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoZXJyb3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwpAQCAtNzY2LDkg
Kzc2OCw5IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluCiAgICAgZXJyb3JTdHJpbmcgPSBJbnNw
ZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBmdWxsUnVsZUlkLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxl
PiYgcmVzdWx0KQogewotICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFJ1bGVJZCk7
CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVsZUlkLmNvcHlSZWYoKSk7CiAg
ICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3Ry
aW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTgxMSwyOSArODEzLDMwIEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBpbnQgY29udGV4dE5vZGVJCiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgY3Nz
UHJvcGVydGllcykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiBwcm9wZXJ0aWVzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3BlcnRpZXMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46
OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmaXJzdENTU1Byb3BlcnR5OyBpIDw9IGxhc3RD
U1NQcm9wZXJ0eTsgKytpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgaWQgPSBjb252ZXJ0VG9D
U1NQcm9wZXJ0eUlEKGkpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eUluZm8+IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NQcm9wZXJ0eUluZm86OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0TmFtZShnZXRQcm9wZXJ0
eU5hbWVTdHJpbmcoaWQpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAK
ICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRo
YW5kRm9yUHJvcGVydHkoaWQpOwogICAgICAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkgewot
ICAgICAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShwcm9wZXJ0eS5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEY6Om1vdmUocHJvcGVydHkpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBsb25naGFuZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBsb25naGFuZHMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytqKSB7CiAgICAgICAgICAgICBD
U1NQcm9wZXJ0eUlEIGxvbmdoYW5kSUQgPSBzaG9ydGhhbmQucHJvcGVydGllcygpW2pdOwogICAg
ICAgICAgICAgbG9uZ2hhbmRzLT5hZGRJdGVtKGdldFByb3BlcnR5TmFtZVN0cmluZyhsb25naGFu
ZElEKSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvcGVydHktPnNldExvbmdoYW5kcyhsb25naGFu
ZHMucmVsZWFzZSgpKTsKLSAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShwcm9wZXJ0eS5yZWxl
YXNlKCkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0TG9uZ2hhbmRzKFdURjo6bW92ZShsb25naGFu
ZHMpKTsKKyAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEY6Om1vdmUocHJvcGVydHkpKTsK
ICAgICB9Ci0gICAgY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOworICAgIGNz
c1Byb3BlcnRpZXMgPSBXVEY6Om1vdmUocHJvcGVydGllcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBmb3JjZWRQc2V1ZG9DbGFzc2Vz
KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBm
b3JjZWRQc2V1ZG9DbGFzc2VzKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvbUFnZW50
LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkK
QEAgLTg2MiwxMiArODY1LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE5hbWVkRmxv
d0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jCiAgICAgbV9uYW1l
ZEZsb3dDb2xsZWN0aW9uc1JlcXVlc3RlZC5hZGQoZG9jdW1lbnROb2RlSWQpOwogCiAgICAgVmVj
dG9yPFJlZlB0cjxXZWJLaXROYW1lZEZsb3c+PiBuYW1lZEZsb3dzVmVjdG9yID0gZG9jdW1lbnQt
Pm5hbWVkRmxvd3MoKS5uYW1lZEZsb3dzKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pj4gbmFtZWRGbG93
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
TmFtZWRGbG93Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBuYW1lZEZsb3dzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+OjpjcmVh
dGUoKTsKIAogICAgIGZvciAoVmVjdG9yPFJlZlB0cjxXZWJLaXROYW1lZEZsb3c+Pjo6aXRlcmF0
b3IgaXQgPSBuYW1lZEZsb3dzVmVjdG9yLmJlZ2luKCk7IGl0ICE9IG5hbWVkRmxvd3NWZWN0b3Iu
ZW5kKCk7ICsraXQpCiAgICAgICAgIG5hbWVkRmxvd3MtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JO
YW1lZEZsb3coZXJyb3JTdHJpbmcsIGl0LT5nZXQoKSwgZG9jdW1lbnROb2RlSWQpKTsKIAotICAg
IHJlc3VsdCA9IG5hbWVkRmxvd3MucmVsZWFzZSgpOworICAgIHJlc3VsdCA9IFdURjo6bW92ZShu
YW1lZEZsb3dzKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW1lbnQqIGVsZW1lbnQpCkBA
IC0xMDAwLDcgKzEwMDMsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJvcgogCiBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVj
dE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9j
dW1lbnQpCiB7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVn
dWxhcjsKKyAgICBhdXRvIG9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbjo6UmVndWxhcjsKICAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHls
ZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSkK
ICAgICAgICAgb3JpZ2luID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpVc2VyQWdlbnQ7CiAgICAgZWxzZSBpZiAocGFnZVN0eWxlU2hlZXQgJiYgcGFnZVN0eWxl
U2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKS0+bm9kZU5h
bWUoKSA9PSAiI2RvY3VtZW50IikKQEAgLTEwMTMsNyArMTAxNiw3IEBAIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3Jp
Z2luKENTU1N0CiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
clJ1bGUoU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NB
Z2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTEwMjcsNyArMTAzMCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JS
CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5i
dWlsZE9iamVjdEZvclJ1bGUoY3Nzb21XcmFwcGVyKSA6IG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6
YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
clJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAgIGlmICghcnVsZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xMDM3LDkgKzEwNDAsOSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
UgogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+
YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUpIDogbnVsbHB0cjsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRj
aD4+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgRWxlbWVudCogZWxlbWVudCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiByZXN1bHQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRj
aD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAogICAg
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNo
ZWNrZXIoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CkBAIC0xMDQ5LDcgKzEwNTIsNyBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UnVsZU1hdGNoPj4gSW5zcAogICAgICAgICBpZiAoIXJ1bGVPYmplY3QpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50
Pj4gbWF0Y2hpbmdTZWxlY3RvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+Ojpj
cmVhdGUoKTsKKyAgICAgICAgYXV0byBtYXRjaGluZ1NlbGVjdG9ycyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxp
c3QmIHNlbGVjdG9yTGlzdCA9IG1hdGNoZWRSdWxlLT5zZWxlY3Rvckxpc3QoKTsKICAgICAgICAg
bG9uZyBpbmRleCA9IDA7CiAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
ID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChzZWxlY3RvcikpIHsKQEAgLTEwNjAsMTYgKzEwNjMsMTcgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1
bGVNYXRjaD4+IEluc3AKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KIAotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+IG1hdGNoID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g6OmNyZWF0ZSgpCi0gICAgICAgICAgICAu
c2V0UnVsZShydWxlT2JqZWN0LnJlbGVhc2UoKSkKLSAgICAgICAgICAgIC5zZXRNYXRjaGluZ1Nl
bGVjdG9ycyhtYXRjaGluZ1NlbGVjdG9ycy5yZWxlYXNlKCkpOwotICAgICAgICByZXN1bHQtPmFk
ZEl0ZW0obWF0Y2gucmVsZWFzZSgpKTsKKyAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFJ1bGUo
V1RGOjptb3ZlKHJ1bGVPYmplY3QpKQorICAgICAgICAgICAgLnNldE1hdGNoaW5nU2VsZWN0b3Jz
KFdURjo6bW92ZShtYXRjaGluZ1NlbGVjdG9ycykpCisgICAgICAgICAgICAucmVsZWFzZSgpOwor
ICAgICAgICByZXN1bHQtPmFkZEl0ZW0oV1RGOjptb3ZlKG1hdGNoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50KiBlbGVt
ZW50KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50KiBlbGVtZW50
KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpl
bGVtZW50KSkKQEAgLTEwODMsMTMgKzEwODcsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3IK
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihhdHRyaWJ1dGVTdHlsZS0+aXNN
dXRhYmxlKCkpOwogICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMqIG11dGFibGVBdHRyaWJ1dGVT
dHlsZSA9IHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMqPihhdHRyaWJ1dGVTdHls
ZSk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVj
dG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBtdXRhYmxlQXR0cmlidXRlU3R5bGUt
PmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgbnVsbHB0cik7CisgICAgUmVmPEluc3BlY3Rv
clN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgbXV0YWJsZUF0dHJpYnV0ZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCksIG51bGxwdHIpOwogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JT
dHlsZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJy
YXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUGFzc1JlZlB0cjxOb2RlTGlz
dD4gcmVnaW9uTGlzdCwgaW50IGRvY3VtZW50Tm9kZUlkKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5zcGVjdG9y
Q1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
UmVmUHRyPE5vZGVMaXN0PiYmIHJlZ2lvbkxpc3QsIGludCBkb2N1bWVudE5vZGVJZCkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpSZWdpb24+PiByZWdpb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlZ2lvbnMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJl
Z2lvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lvbkxp
c3QtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
ZWdpb246OlJlZ2lvbk92ZXJzZXQgcmVnaW9uT3ZlcnNldDsKQEAgLTExMTEsMjEgKzExMTUsMjIg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlJlZ2lvbj4+IEluc3BlY3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPiBy
ZWdpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbjo6Y3JlYXRlKCkKKyAgICAg
ICAgYXV0byByZWdpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbjo6Y3JlYXRl
KCkKICAgICAgICAgICAgIC5zZXRSZWdpb25PdmVyc2V0KHJlZ2lvbk92ZXJzZXQpCiAgICAgICAg
ICAgICAvLyBkb2N1bWVudE5vZGVJZCB3YXMgcHJldmlvdXNseSBhc3NlcnRlZAotICAgICAgICAg
ICAgLnNldE5vZGVJZChtX2RvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcs
IGRvY3VtZW50Tm9kZUlkLCByZWdpb25MaXN0LT5pdGVtKGkpKSk7CisgICAgICAgICAgICAuc2V0
Tm9kZUlkKG1fZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1l
bnROb2RlSWQsIHJlZ2lvbkxpc3QtPml0ZW0oaSkpKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsK
IAotICAgICAgICByZWdpb25zLT5hZGRJdGVtKHJlZ2lvbi5yZWxlYXNlKCkpOworICAgICAgICBy
ZWdpb25zLT5hZGRJdGVtKFdURjo6bW92ZShyZWdpb24pKTsKICAgICB9CiAKLSAgICByZXR1cm4g
cmVnaW9ucy5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZWdpb25zKTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9y
Q1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgV2ViS2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkK
K1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
V2ViS2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkKIHsK
ICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGNvbnRlbnRMaXN0ID0gd2Via2l0TmFtZWRGbG93LT5nZXRD
b250ZW50KCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+IGNv
bnRlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKKyAgICBh
dXRvIGNvbnRlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb250ZW50TGlzdC0+bGVuZ3RoKCk7ICsr
aSkgewogICAgICAgICAvLyBkb2N1bWVudE5vZGVJZCB3YXMgcHJldmlvdXNseSBhc3NlcnRlZApA
QCAtMTEzNiw3ICsxMTQxLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm8KICAgICAgICAgLnNl
dERvY3VtZW50Tm9kZUlkKGRvY3VtZW50Tm9kZUlkKQogICAgICAgICAuc2V0TmFtZSh3ZWJraXRO
YW1lZEZsb3ctPm5hbWUoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldE92ZXJzZXQod2Via2l0TmFt
ZWRGbG93LT5vdmVyc2V0KCkpCi0gICAgICAgIC5zZXRDb250ZW50KGNvbnRlbnQucmVsZWFzZSgp
KQorICAgICAgICAuc2V0Q29udGVudChXVEY6Om1vdmUoY29udGVudCkpCiAgICAgICAgIC5zZXRS
ZWdpb25zKGJ1aWxkQXJyYXlGb3JSZWdpb25zKGVycm9yU3RyaW5nLCB3ZWJraXROYW1lZEZsb3ct
PmdldFJlZ2lvbnMoKSwgZG9jdW1lbnROb2RlSWQpKQogICAgICAgICAucmVsZWFzZSgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCAzZGRj
YTliLi5kM2EwMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTExOCwxMyArMTE3LDEzIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZVNoZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IGdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQsIFN0cmluZyogcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVT
aGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVUZXh0KEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3Bl
cnR5VGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4m
IHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVByb3BlcnR5KEVycm9y
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJ
ZCwgaW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdHlsZUlkLCBpbnQgcHJvcGVy
dHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgYm9v
bCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJl
c3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJ1bGVTZWxlY3RvcihFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBydWxlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBhZGRSdWxlKEVy
cm9yU3RyaW5nJiwgaW50IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGZvcmNlZFBzZXVkb0NsYXNzZXMpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiwgaW50
IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgZm9yY2Vk
UHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldE5hbWVkRmxvd0Nv
bGxlY3Rpb24oRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4+
JiByZXN1bHQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgpAQCAtMTUzLDEyICsxNTIsMTIgQEAgcHJp
dmF0ZToKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4gZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNo
ZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVsZSos
IFN0eWxlUmVzb2x2ZXImKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlPj4mLCBTdHlsZVJlc29sdmVyJiwgRWxlbWVudCopOwotICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JB
dHRyaWJ1dGVzU3R5bGUoRWxlbWVudCopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+PiBidWlsZEFycmF5
Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+LCBpbnQgZG9jdW1l
bnROb2RlSWQpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1l
ZEZsb3c+IGJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiwgV2ViS2l0TmFtZWRG
bG93KiwgaW50IGRvY3VtZW50Tm9kZUlkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxlKiwgU3R5bGVSZXNv
bHZlciYpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1
aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWls
ZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4m
LCBTdHlsZVJlc29sdmVyJiwgRWxlbWVudCopOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50
Kik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UmVnaW9uPj4gYnVpbGRBcnJheUZvclJlZ2lvbnMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8Tm9kZUxpc3Q+JiYsIGludCBkb2N1bWVudE5vZGVJZCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93PiBidWlsZE9iamVjdEZvck5hbWVkRmxvdyhF
cnJvclN0cmluZyYsIFdlYktpdE5hbWVkRmxvdyosIGludCBkb2N1bWVudE5vZGVJZCk7CiAKICAg
ICAvLyBJbnNwZWN0b3JET01BZ2VudDo6RE9NTGlzdGVuZXIgaW1wbGVtZW50YXRpb24KICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVu
dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3Ry
dW1lbnRhdGlvbi5oCmluZGV4IDMyYTYyNDcuLjQxZDU3NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24u
aApAQCAtMzUsMTUgKzM1LDE0IEBACiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1
ZGUgPGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2Ny
aXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1l
c3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VU
eXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUlt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNh
bGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xl
SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwg
V1RGOjptb3ZlKGNhbGxTdGFjayksIHJlcXVlc3RJZGVudGlmaWVyKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwpAQCAtNTUsMTEgKzU0
LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRv
Q29uc29sZShQYWdlJiBwYWdlLCBNZXNzYWdlU291CiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2Us
IE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4mJiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBh
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBl
LCBsZXZlbCwgbWVzc2FnZSwgc3RhdGUsIGFyZ3VtZW50cywgcmVxdWVzdElkZW50aWZpZXIpOwor
ICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291
cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc3RhdGUsIFdURjo6bW92ZShhcmd1bWVudHMpLCBy
ZXF1ZXN0SWRlbnRpZmllcik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBV
TlVTRURfUEFSQU0oc291cmNlKTsKQEAgLTkxLDExICs5MCwxMSBAQCBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVz
c2FnZVNvdQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YWRkTWVzc2FnZVRvQ29uc29sZShXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2Nv
cGUsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dENhbGxTdGFjaz4gY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQor
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xl
KFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9iYWxTY29wZSwgTWVzc2FnZVNvdXJjZSBzb3Vy
Y2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpKQot
ICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291
cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgY2FsbFN0YWNrLCByZXF1ZXN0SWRlbnRpZmllcik7
CisgICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBz
b3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVz
dElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od29ya2VyR2xvYmFsU2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwpAQCAtMTI2LDExICsxMjUsMTEgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtl
ckdsb2JhbFNjb3BlKiB3b3IKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK2lu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50KFBhZ2UmIHBh
Z2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiYmIGFyZ3VtZW50cykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIGNvbnNvbGVDb3VudEltcGwoKmluc3RydW1lbnRpbmdB
Z2VudHMsIHN0YXRlLCBhcmd1bWVudHMpOworICAgICAgICBjb25zb2xlQ291bnRJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgV1RGOjptb3ZlKGFyZ3VtZW50cykpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0OSwx
MSArMTQ4LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRD
b25zb2xlVGltaW5nKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyCiAjZW5kaWYKIH0KIAotaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYg
ZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRD
YWxsU3RhY2s+IHN0YWNrKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
dG9wQ29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiBzdGFjaykKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgc3RvcENvbnNv
bGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgdGl0bGUsIHN0YWNrKTsK
KyAgICAgICAgc3RvcENvbnNvbGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFt
ZSwgdGl0bGUsIFdURjo6bW92ZShzdGFjaykpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aXRsZSk7CkBAIC0xNjEsMTIgKzE2MCwxMiBAQCBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKEZyYW1l
JiBmcmFtZSwgY29uc3QgU3RyaQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcChGcmFtZSYgZnJhbWUsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK2lubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcChGcmFtZSYgZnJhbWUsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGNvbnNvbGVUaW1lU3RhbXBJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgYXJndW1lbnRzKTsKKyAgICAgICAgY29uc29s
ZVRpbWVTdGFtcEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCBXVEY6Om1vdmUoYXJn
dW1lbnRzKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGFyZ3VtZW50cyk7CkBAIC0xODUsNyArMTg0LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzdGFydFByb2ZpbGluZyhQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0
ZSoKICNlbmRpZgogfQogCi1pbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZyhQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nICZ0aXRsZSkKK2lubGluZSBSZWZQdHI8SlNDOjpQcm9maWxl
PiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyAmdGl0bGUpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDJlZDhhZGYuLjhiZjBm
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhp
Z2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6QwogICAgIG1f
b3ZlcmxheS0+Z2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgY29vcmRpbmF0ZVN5c3RlbSk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9i
amVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJ
bnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fb3ZlcmxheS0+YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUo
KTsKIH0KQEAgLTQ1NCw5ICs0NTQsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250
ZW5kSW5pdGlhbGl6ZWQoKQogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3RvcHdhdGNoPiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQorUmVmPFN0b3B3YXRjaD4gSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkKIHsKLSAgICByZXR1cm4gbV9l
eGVjdXRpb25TdG9wd2F0Y2g7CisgICAgcmV0dXJuIG1fZXhlY3V0aW9uU3RvcHdhdGNoLmNvcHlS
ZWYoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggN2M3OGVlNC4uMzhhZWVhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0x
MTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGln
aGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1VuZGVyVGVzdDsgfQogICAgIHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCBpc1Vu
ZGVyVGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0KQEAgLTEzMSw3ICsxMzEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWxsSW5qZWN0ZWRTY3JpcHRGdW5j
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlw
dExpbmUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRG
dW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmcm9u
dGVuZEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdURjo6
U3RvcHdhdGNoPiBleGVjdXRpb25TdG9wd2F0Y2goKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJl
ZjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgb3ZlcnJpZGU7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjsKQEAgLTE1MCw3
ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CiAgICAgSW5zcGVj
dG9yOjpJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwotICAgIFJlZlB0cjxXVEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAg
UmVmPFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKICAgICBQYWdlJiBtX3Bh
Z2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2luc3BlY3RvckNsaWVudDsKICAgICBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCogbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGJiYWNkYzQuLmRh
YTBkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1heFRleHRTaXplID0gMTAwMDA7CiBzdGF0aWMgY29uc3QgVUNoYXIg
ZWxsaXBzaXNVQ2hhcltdID0geyAweDIwMjYsIDAgfTsKIAotc3RhdGljIENvbG9yIHBhcnNlQ29s
b3IoY29uc3QgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvbG9yT2JqZWN0KQorc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3IoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvck9i
amVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICByZXR1cm4gQ29sb3I6OnRy
YW5zcGFyZW50OwpAQCAtMTMyLDggKzEzMiw5IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb2xvck9iamVjdCkKIAogc3RhdGljIENv
bG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEluc3BlY3Rvck9i
amVjdCogY29uZmlnT2JqZWN0KQogewotICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNvbG9yT2JqZWN0ID0gY29uZmlnT2JqZWN0LT5nZXRPYmplY3QoZmllbGROYW1lKTsKLSAgICBy
ZXR1cm4gcGFyc2VDb2xvcihjb2xvck9iamVjdCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gY29sb3JPYmplY3Q7CisgICAgY29uZmlnT2JqZWN0LT5nZXRPYmplY3QoZmllbGROYW1lLCBj
b2xvck9iamVjdCk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoV1RGOjptb3ZlKGNvbG9yT2JqZWN0
KSk7CiB9CiAKIHN0YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKQEAgLTU3OSw5ICs1ODAsOSBAQCBpbnQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVz
aCkKICAgICAgICAgICAgIGF1dG8gbmV3TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxOb2RlVG9JZE1h
cD4oKTsKICAgICAgICAgICAgIGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAg
ICAgbV9kYW5nbGluZ05vZGVUb0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1
dG8gY2hpbGRyZW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVt
KGJ1aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwotICAgICAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgY2hpbGRyZW4pOworICAgICAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGOjptb3ZlKGNo
aWxkcmVuKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHBhdGguYXBwZW5kKHBhcmVudCk7CkBAIC04NzYsMTUgKzg3NywxNCBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaQogICAgIGF4UHJvcGVydGllcyA9IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJp
bGl0eVByb3BlcnRpZXMobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZv
cm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHdoaXRlc3Bh
Y2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5vZGVJZHMsIFN0
cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgbm9k
ZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkKIHsKICAgICAvLyBGSVhN
RTogU2VhcmNoIHdvcmtzIHdpdGggbm9kZSBncmFudWxhcml0eSAtIG51bWJlciBvZiBtYXRjaGVz
IHdpdGhpbiBub2RlIGlzIG5vdCBjYWxjdWxhdGVkLgogICAgIEluc3BlY3Rvck5vZGVGaW5kZXIg
ZmluZGVyKHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKLSAg
ICAgICAgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbm9kZUlkc1JlZiA9ICpub2RlSWRz
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUlkc1JlZi0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBub2RlVmFsdWUgPSBu
b2RlSWRzUmVmLT5nZXQoaSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rl
SWRzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IG5vZGVWYWx1ZSA9IG5vZGVJZHMtPmdldChpKTsKICAgICAgICAgICAgIGlmICghbm9kZVZhbHVl
KSB7CiAgICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQg
bm9kZUlkcyBpdGVtLiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNDYsMzcgKzEw
NDYsMzcgQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAgICByZXR1cm4gaGlnaGxpZ2h0Q29u
ZmlnOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBoaWdobGlnaHRDb25maWcpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJs
ZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKQogewot
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENv
bmZpZyA/IGhpZ2hsaWdodENvbmZpZy0+Z2V0KCkgOiAwKTsKKyAgICBzZXRTZWFyY2hpbmdGb3JO
b2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25m
aWcuZ2V0KCkgOiBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5l
Q29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UXVhZD4oRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWln
aHQpKTsKLSAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCBjb2xvciwgb3V0
bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEY6Om1vdmUocXVhZCksIGNvbG9yLmNvcHlSZWYoKSwgb3V0bGluZUNvbG9yLmNvcHlSZWYoKSwg
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0UXVhZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRRdWFk
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYm
IHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBh
Z2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0
UXVhZD4oKTsKICAgICBpZiAoIXBhcnNlUXVhZChxdWFkQXJyYXksIHF1YWQuZ2V0KCkpKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIFF1YWQgZm9ybWF0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURjo6bW92
ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xvciwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICBp
bm5lckhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCBjb2xvci5jb3B5UmVmKCksIG91dGxp
bmVDb2xvci5jb3B5UmVmKCksIHVzZVBhZ2VDb29yZGluYXRlcyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFk
PiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29y
ZGluYXRlcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6
OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
Y29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29u
ZmlnID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0
Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcigqY29sb3IpOwotICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKCpvdXRsaW5lQ29sb3IpOworICAgIGhpZ2hs
aWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IuY29weVJlZigpKTsKKyAgICBo
aWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3Iu
Y29weVJlZigpKTsKICAgICBoaWdobGlnaHRDb25maWctPnVzZVBhZ2VDb29yZGluYXRlcyA9IHVz
ZVBhZ2VDb29yZGluYXRlcyA/ICp1c2VQYWdlQ29vcmRpbmF0ZXMgOiBmYWxzZTsKICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElkKQor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkKIHsKICAg
ICBOb2RlKiBub2RlID0gMDsKICAgICBpZiAobm9kZUlkKSB7CkBAIC0xMDk4LDE0ICsxMDk4LDE0
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2Rl
KG5vZGUsICpoaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0Piogb3V0bGluZUNvbG9yKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJh
bWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0
bGluZUNvbG9yKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5mcmFtZUZvcklk
KGZyYW1lSWQpOwogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+b3duZXJFbGVtZW50KCkpIHsKICAg
ICAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hsaWdodENv
bmZpZz4oKTsKICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93SW5mbyA9IHRydWU7IC8vIEFs
d2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCi0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+
Y29udGVudCA9IHBhcnNlQ29sb3IoKmNvbG9yKTsKLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoKm91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hs
aWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IuY29weVJlZigpKTsKKyAgICAg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNv
bG9yLmNvcHlSZWYoKSk7CiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShmcmFtZS0+
b3duZXJFbGVtZW50KCksICpoaWdobGlnaHRDb25maWcpOwogICAgIH0KIH0KQEAgLTEyMjAsNyAr
MTIyMCw3IEBAIHN0YXRpYyBTdHJpbmcgZG9jdW1lbnRCYXNlVVJMU3RyaW5nKERvY3VtZW50KiBk
b2N1bWVudCkKICAgICByZXR1cm4gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKCIiKS5zdHJpbmcoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0
aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAgIGludCBpZCA9IGJpbmQobm9kZSwgbm9k
ZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFtZTsKQEAgLTEyNTMsMTkgKzEyNTMsMjAgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCisgICAgYXV0byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5vZGVJZChpZCkKICAgICAg
ICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4obm9kZS0+bm9kZVR5cGUoKSkpCiAgICAg
ICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKICAgICAgICAgLnNldExvY2FsTmFtZShsb2NhbE5h
bWUpCi0gICAgICAgIC5zZXROb2RlVmFsdWUobm9kZVZhbHVlKTsKKyAgICAgICAgLnNldE5vZGVW
YWx1ZShub2RlVmFsdWUpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAobm9kZS0+aXND
b250YWluZXJOb2RlKCkpIHsKICAgICAgICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2Rl
Q291bnQobm9kZSk7CiAgICAgICAgIHZhbHVlLT5zZXRDaGlsZE5vZGVDb3VudChub2RlQ291bnQp
OwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hp
bGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0g
YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKG5vZGUsIGRlcHRoLCBub2Rlc01hcCk7CiAg
ICAgICAgIGlmIChjaGlsZHJlbi0+bGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgdmFsdWUtPnNl
dENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hp
bGRyZW4oV1RGOjptb3ZlKGNoaWxkcmVuKSk7CiAgICAgfQogCiAgICAgaWYgKGlzPEVsZW1lbnQ+
KCpub2RlKSkgewpAQCAtMTI4Miw5ICsxMjgzLDkgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gZWxlbWVudC5zaGFk
b3dSb290KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBzaGFkb3dSb290cyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAg
ICAgICAgc2hhZG93Um9vdHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5v
ZGVzTWFwKSk7Ci0gICAgICAgICAgICB2YWx1ZS0+c2V0U2hhZG93Um9vdHMoc2hhZG93Um9vdHMp
OworICAgICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jvb3RzKFdURjo6bW92ZShzaGFkb3dSb290
cykpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKQEAgLTEzMTcs
MjYgKzEzMTgsMjYgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgICAgIHZhbHVl
LT5zZXRSb2xlKGF4T2JqZWN0LT5jb21wdXRlZFJvbGVTdHJpbmcoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHZhbHVlKTsKIH0K
IAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1l
bnQpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBhdHRyaWJ1
dGVzVmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsK
KyAgICBhdXRvIGF0dHJpYnV0ZXNWYWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz46OmNyZWF0ZSgpOwogICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMgYW5kIHNl
cmlhbGl6ZSB0aGVtLgogICAgIGlmICghZWxlbWVudC0+aGFzQXR0cmlidXRlcygpKQotICAgICAg
ICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bW92ZShhdHRyaWJ1dGVzVmFsdWUpOwogICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1
dGUgOiBlbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewogICAgICAgICAvLyBBZGQgYXR0
cmlidXRlIHBhaXIKICAgICAgICAgYXR0cmlidXRlc1ZhbHVlLT5hZGRJdGVtKGF0dHJpYnV0ZS5u
YW1lKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIGF0dHJpYnV0ZXNWYWx1ZS0+YWRkSXRlbShhdHRy
aWJ1dGUudmFsdWUoKSk7CiAgICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzVmFsdWUucmVsZWFz
ZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYXR0cmlidXRlc1ZhbHVlKTsKIH0KIAotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVu
KE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2Rl
KiBjb250YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+PiBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgIGF1dG8gY2hpbGRyZW4gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+Ojpj
cmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAvLyBTcGVjaWFsLWNhc2Ug
dGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhhdCBjb250YWluZXIncyBjaGlsZHJlbiBo
YXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gY29udGFpbmVy
LT5maXJzdENoaWxkKCk7CkBAIC0xMzQ0LDcgKzEzNDUsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3Bl
Y3RvcgogICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKGZp
cnN0Q2hpbGQsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAgICAgICBtX2NoaWxkcmVuUmVxdWVzdGVk
LmFkZChiaW5kKGNvbnRhaW5lciwgbm9kZXNNYXApKTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gY2hpbGRyZW4ucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGNoaWxkcmVu
KTsKICAgICB9CiAKICAgICBOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChjb250YWluZXIp
OwpAQCAtMTM1NSwxMCArMTM1NiwxMCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvcgogICAgICAg
ICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUoY2hpbGQsIGRlcHRoLCBub2Rl
c01hcCkpOwogICAgICAgICBjaGlsZCA9IGlubmVyTmV4dFNpYmxpbmcoY2hpbGQpOwogICAgIH0K
LSAgICByZXR1cm4gY2hpbGRyZW4ucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoY2hp
bGRyZW4pOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihj
b25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwSWQpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyogb2JqZWN0R3Jv
dXBJZCkKIHsKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciA9IHJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmxpc3RlbmVyOwogCkBAIC0xMzg2LDI5ICsxMzg3LDMxIEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiB2YWx1ZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5zZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAgIC5zZXRJc0F0dHJpYnV0ZShldmVudExp
c3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQogICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQobm9kZSkpCi0gICAgICAgIC5zZXRIYW5kbGVyQm9keShib2R5KTsKKyAgICAgICAg
LnNldEhhbmRsZXJCb2R5KGJvZHkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgaWYgKG9iamVj
dEdyb3VwSWQgJiYgaGFuZGxlciAmJiBzdGF0ZSkgewogICAgICAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZv
cihzdGF0ZSk7CiAgICAgICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAg
ICAgICAgICAgdmFsdWUtPnNldEhhbmRsZXIoaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgaGFuZGxlciksICpvYmplY3RHcm91cElk
KSk7CiAgICAgfQogICAgIGlmICghc2NyaXB0SUQuaXNOdWxsKCkpIHsKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCisgICAgICAgIGF1
dG8gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNy
ZWF0ZSgpCiAgICAgICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SUQpCi0gICAgICAgICAgICAu
c2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKLSAgICAgICAgdmFsdWUtPnNldExvY2F0aW9uKGxv
Y2F0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVy
KQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgdmFsdWUtPnNldExvY2F0aW9uKFdU
Rjo6bW92ZShsb2NhdGlvbikpOwogICAgICAgICBpZiAoIXNvdXJjZU5hbWUuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgdmFsdWUtPnNldFNvdXJjZU5hbWUoc291cmNlTmFtZSk7CiAgICAgfQotICAg
IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZSh2YWx1ZSk7CiB9
CiAgICAgCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxk
cmVuKFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhPYmplY3QsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgY2hpbGROb2RlSWRzKQordm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4mJiBheE9iamVjdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PGludD4+JiYgY2hpbGROb2RlSWRzKQogewogICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gYXhP
YmplY3QtPmNoaWxkcmVuKCk7CiAgICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCkBAIC0xNDIxLDEx
ICsxNDI0LDExIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW4oUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqCiAgICAgICAgIGlmIChOb2RlKiBj
aGlsZE5vZGUgPSBjaGlsZE9iamVjdC0+bm9kZSgpKQogICAgICAgICAgICAgY2hpbGROb2RlSWRz
LT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoY2hpbGROb2RlKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oY2hpbGRPYmplY3Qs
IGNoaWxkTm9kZUlkcyk7CisgICAgICAgICAgICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KGNoaWxkT2JqZWN0LmNvcHlSZWYoKSwgY2hpbGROb2RlSWRzLmNvcHlSZWYoKSk7CiAgICAgfQog
fQogICAgIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmls
aXR5UHJvcGVydGllcyhOb2RlKiBub2RlKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5v
ZGUpOwogICAgIGlmICghbm9kZSkKQEAgLTE0MzYsNyArMTQzOSw3IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9y
RE9NQWdlbnQ6CiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAg
ICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZCBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7CisgICAgYXV0
byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q2hlY2tlZDo6RmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PGludD4+IGNoaWxkTm9kZUlkczsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8aW50Pj4gY29udHJvbGxlZE5vZGVJZHM7CiAgICAgYm9vbCBleGlzdHMgPSBmYWxzZTsK
QEAgLTE0NDYsMTIgKzE0NDksMTIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDoKICAgICBib29s
IGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9yZWQgPSB0cnVlOwogICAgIGJvb2wgaWdu
b3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQgaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOworICAgIGF1
dG8gaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFsc2U7CiAgICAgU3Ry
aW5nIGxhYmVsOwogICAgIGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNlOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBsaXZlUmVnaW9uUmVsZXZhbnQ7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
TGl2ZVJlZ2lvblN0YXR1cyBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAg
IGF1dG8gbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAgICBOb2RlKiBtb3Vz
ZUV2ZW50Tm9kZSA9IG51bGxwdHI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PGludD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVsbHB0cjsK
QEAgLTE0OTIsNyArMTQ5NSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6CiAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKGF4T2JqZWN0LCBjaGls
ZE5vZGVJZHMpOworICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihheE9i
amVjdCwgV1RGOjptb3ZlKGNoaWxkTm9kZUlkcykpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoYXhPYmplY3QtPnN1cHBvcnRzQVJJQUNvbnRyb2xzKCkpIHsKICAgICAgICAgICAgICAg
ICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVtZW50czsKQEAgLTE2MjIsMTEgKzE2MjUs
MTIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzOjpjcmVhdGUoKQorICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzPiB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRFeGlzdHMoZXhpc3RzKQog
ICAgICAgICAuc2V0TGFiZWwobGFiZWwpCiAgICAgICAgIC5zZXRSb2xlKHJvbGUpCi0gICAgICAg
IC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSk7CisgICAgICAgIC5zZXRO
b2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSkKKyAgICAgICAgLnJlbGVhc2UoKTsK
IAogICAgIGlmIChleGlzdHMpIHsKICAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKQpA
QCAtMTY3OSw3ICsxNjgzLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDoKICAgICAgICAgICAg
IHZhbHVlLT5zZXRTZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcyk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3Zl
KHZhbHVlKTsKIH0KIAogTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChO
b2RlKiBub2RlKQpAQCAtMTc1NCwxMCArMTc1OCwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpkaWRDb21taXRMb2FkKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Y2hpbGROb2RlUmVtb3ZlZChwYXJlbnRJZCwgZnJhbWVPd25lcklkKTsKICAgICB1bmJp
bmQoZnJhbWVPd25lciwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShm
cmFtZU93bmVyLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShmcmFtZU93
bmVyLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICBOb2RlKiBwcmV2aW91c1NpYmxp
bmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFtZU93bmVyKTsKICAgICBpbnQgcHJldklkID0g
cHJldmlvdXNTaWJsaW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxp
bmcpIDogMDsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFy
ZW50SWQsIHByZXZJZCwgdmFsdWUucmVsZWFzZSgpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwgV1RGOjptb3ZlKHZhbHVlKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9k
ZSkKQEAgLTE3ODQsOCArMTc4OCw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2Vy
dERPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gQ2hpbGRyZW4gaGF2ZSBiZWVuIHJlcXVl
c3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAgICAgICAgIE5vZGUqIHByZXZT
aWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwogICAgICAgICBpbnQgcHJldklk
ID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZTaWJsaW5nKSA6
IDA7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVl
ID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsK
LSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVkKHBhcmVudElk
LCBwcmV2SWQsIHZhbHVlLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9k
b2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxk
Tm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIH0K
IH0KIApAQCAtMTg0OSw3ICsxODUzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVt
b3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG4KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0
b3I8RWxlbWVudCo+JiBlbGVtZW50cykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8aW50Pj4gbm9kZUlkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46
OmNyZWF0ZSgpOworICAgIGF1dG8gbm9kZUlkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBlbGVtZW50
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRzLmF0KGkpOwogICAgICAgICBpbnQgaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsKQEAg
LTE4NjEsNyArMTg2NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRl
SW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVuCiAgICAgICAgICAgICBt
X2RvbUxpc3RlbmVyLT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOwogICAgICAgICBub2RlSWRz
LT5hZGRJdGVtKGlkKTsKICAgICB9Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmlubGluZVN0
eWxlSW52YWxpZGF0ZWQobm9kZUlkcy5yZWxlYXNlKCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5pbmxpbmVTdHlsZUludmFsaWRhdGVkKFdURjo6bW92ZShub2RlSWRzKSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRh
JiBjaGFyYWN0ZXJEYXRhKQpAQCAtMTk4NCw3ICsxOTg4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLAogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2Rl
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5v
ZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDUzMDUwNTYuLjQxMmI3
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBA
IC0xMzIsMjEgKzEzMiwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1
ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcm
LCBpbnQgbm9kZUlkLCBjb25zdCBXVEY6OlN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlz
dGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4m
IGF4UHJvcGVydGllcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1TZWFyY2go
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5Piogbm9kZUlkcywgU3RyaW5nKiBzZWFy
Y2hJZCwgaW50KiByZXN1bHRDb3VudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1TZWFyY2goRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVl
cnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIG5vZGVJZHMsIFN0
cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJ
ZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxpbnQ+PiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNjYXJkU2VhcmNo
UmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBn
ZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGhpZ2hsaWdodENvbmZpZykg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0
cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCogbm9kZUlkKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgcHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcm
LCBCYWNrZW5kTm9kZUlkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VCYWNrZW5kTm9kZUlkcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbm9kZUdy
b3VwKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5n
JiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodFF1YWQoRXJyb3JTdHJp
bmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIHF1YWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVz
ZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodE5v
ZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVj
dElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiBvdXRsaW5lQ29sb3IpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9v
bCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxp
Z2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5PiYmIHF1YWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBj
b2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVD
b2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgaGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlk
LCBjb25zdCBTdHJpbmcqIG9iamVjdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGln
aGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvcikgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgaW50IHRhcmdl
dE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgdW5kbyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwpAQCAtMTg2
LDcgKzE4Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpbmcgZG9jdW1lbnRVUkxTdHJp
bmcoRG9jdW1lbnQqKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiByZXNvbHZlTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSosIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwog
ICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygpOwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAg
IHZvaWQgaW5zcGVjdChOb2RlKik7CkBAIC0yMzAsMjEgKzIzMCwyMCBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUqLCBpbnQgdHlwZSk7CiAgICAgdm9pZCB1cGRhdGVT
dWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogcm9vdCwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgdmFs
dWUpOwotICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGRlc2NyaXB0aW9uKTsKLQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPiBidWlsZE9iamVjdEZvck5vZGUoTm9kZSosIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50Kik7Ci0gICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFp
bmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7Ci0gICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZl
bnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBOb2RlKiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cElkKTsKLSAg
ICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMoTm9kZSopOwotICAg
IHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihQYXNzUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mKTsKKwor
ICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IGJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCopOworICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxl
bWVudCopOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSog
Y29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RGb3JFdmVu
dExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIE5vZGUqLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwSWQpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
PiBidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqKTsKKyAgICB2b2lk
IHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
JiYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYmKTsKICAgICAKICAg
ICBOb2RlKiBub2RlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIE5vZGUqIG5vZGVG
b3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKTsKIAogICAgIHZvaWQgZGlzY2FyZEJp
bmRpbmdzKCk7CiAKLSAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8
RmxvYXRRdWFkPiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogY29s
b3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xv
ciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICB2b2lkIGlubmVySGlnaGxp
Z2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0
ZXMpOwogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dC5jcHAKaW5kZXggNzgyNmE5My4uZGQ4ZjUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMTcwLDkgKzE3
MCw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChF
cnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAoaGFz
QnJlYWtwb2ludCgmbm9kZSwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoJm5vZGUsIEF0dHJpYnV0ZU1vZGlmaWVkLCBm
YWxzZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1By
b2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBl
dmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnRE
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgZGVzY3JpcHRpb25Gb3JE
T01FdmVudChub2RlLCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7
CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2Vy
RnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwog
ICAgIH0KIH0KIApAQCAtMjcwLDkgKzI3MCw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGluCiB2
b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUmIHBh
cmVudCkKIHsKICAgICBpZiAoaGFzQnJlYWtwb2ludCgmcGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQp
KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoJnBhcmVu
dCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlLCBldmVudERhdGEuZ2V0KCkpOwotICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkLCB0cnVl
LCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3Jh
bShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURjo6
bW92ZShldmVudERhdGEpKTsKICAgICB9CiB9CiAKQEAgLTI4MCwzOSArMjgwLDM5IEBAIHZvaWQg
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkK
IHsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50
Tm9kZSgmbm9kZSk7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoJm5vZGUsIE5vZGVSZW1vdmVkKSkg
ewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KCZub2RlLCBO
b2RlUmVtb3ZlZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJB
Z2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRl
c2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQsIGZhbHNlLCBldmVudERhdGEu
Z2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JE
ZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURjo6bW92ZShldmVudERh
dGEpKTsKICAgICB9IGVsc2UgaWYgKHBhcmVudE5vZGUgJiYgaGFzQnJlYWtwb2ludChwYXJlbnRO
b2RlLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGRlc2NyaXB0
aW9uRm9yRE9NRXZlbnQoJm5vZGUsIFN1YnRyZWVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5n
ZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRl
YnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2Uo
KSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgU3Vi
dHJlZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKKyAgICAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbjo6RE9NLCBXVEY6Om1vdmUoZXZlbnREYXRhKSk7CiAgICAgfQogfQogCiB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoJmVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVk
KSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KCZlbGVt
ZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAg
IG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmRE
aXNwYXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZp
ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJy
ZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpE
T00sIFdURjo6bW92ZShldmVudERhdGEpKTsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3BlY3Rvck9iamVjdCogZGVzY3JpcHRp
b24pCit2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZl
bnQoTm9kZSYgdGFyZ2V0LCBpbnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNw
ZWN0b3JPYmplY3QmIGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChoYXNCcmVha3BvaW50KHRh
cmdldCwgYnJlYWtwb2ludFR5cGUpKTsKKyAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCgmdGFyZ2V0
LCBicmVha3BvaW50VHlwZSkpOwogCi0gICAgTm9kZSogYnJlYWtwb2ludE93bmVyID0gdGFyZ2V0
OworICAgIE5vZGUqIGJyZWFrcG9pbnRPd25lciA9ICZ0YXJnZXQ7CiAgICAgaWYgKCgxIDw8IGJy
ZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgewogICAg
ICAgICAvLyBGb3IgaW5oZXJpdGFibGUgYnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNu
J3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCiAg
ICAgICAgIC8vIFRhcmdldCBub2RlIG1heSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBu
ZWVkIHRvIHB1c2ggaXQgZmlyc3QuCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHRhcmdldE5vZGVPYmplY3QgPSBtX2RvbUFnZW50LT5y
ZXNvbHZlTm9kZSh0YXJnZXQsIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVj
dEdyb3VwKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnNldFZhbHVlKCJ0YXJnZXROb2RlIiwgdGFy
Z2V0Tm9kZU9iamVjdCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IHRhcmdldE5vZGVPYmplY3QgPSBtX2RvbUFnZW50LT5yZXNvbHZl
Tm9kZSgmdGFyZ2V0LCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91
cCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldFZhbHVlKCJ0YXJnZXROb2RlIiwgdGFyZ2V0Tm9k
ZU9iamVjdCk7CiAKICAgICAgICAgLy8gRmluZCBicmVha3BvaW50IG93bmVyIG5vZGUuCiAgICAg
ICAgIGlmICghaW5zZXJ0aW9uKQotICAgICAgICAgICAgYnJlYWtwb2ludE93bmVyID0gSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSh0YXJnZXQpOworICAgICAgICAgICAgYnJlYWtw
b2ludE93bmVyID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmdGFyZ2V0KTsK
ICAgICAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lcik7CiAgICAgICAgIHdoaWxlICghKG1fZG9t
QnJlYWtwb2ludHMuZ2V0KGJyZWFrcG9pbnRPd25lcikgJiAoMSA8PCBicmVha3BvaW50VHlwZSkp
KSB7CiAgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0gSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVyUGFyZW50Tm9kZShicmVha3BvaW50T3duZXIpOwpAQCAtMzIyLDEzICszMjIsMTMgQEAgdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUq
IHRhcmdldCwgaW50IGJyZWFrcG8KICAgICAgICAgfQogCiAgICAgICAgIGlmIChicmVha3BvaW50
VHlwZSA9PSBTdWJ0cmVlTW9kaWZpZWQpCi0gICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0Qm9v
bGVhbigiaW5zZXJ0aW9uIiwgaW5zZXJ0aW9uKTsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uLnNl
dEJvb2xlYW4oImluc2VydGlvbiIsIGluc2VydGlvbik7CiAgICAgfQogCiAgICAgaW50IGJyZWFr
cG9pbnRPd25lck5vZGVJZCA9IG1fZG9tQWdlbnQtPmJvdW5kTm9kZUlkKGJyZWFrcG9pbnRPd25l
cik7CiAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24t
PnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3Jp
cHRpb24tPnNldFN0cmluZygidHlwZSIsIGRvbVR5cGVOYW1lKGJyZWFrcG9pbnRUeXBlKSk7Cisg
ICAgZGVzY3JpcHRpb24uc2V0SW50ZWdlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlk
KTsKKyAgICBkZXNjcmlwdGlvbi5zZXRTdHJpbmcoInR5cGUiLCBkb21UeXBlTmFtZShicmVha3Bv
aW50VHlwZSkpOwogfQogCiBib29sIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6Omhhc0JyZWFr
cG9pbnQoTm9kZSogbm9kZSwgaW50IHR5cGUpCkBAIC0zNjYsMTIgKzM2NiwxMiBAQCB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGJvb2wg
aXNET01FdmVudCwgY29ucwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygiZXZlbnROYW1lIiwgZnVsbEV2ZW50
TmFtZSk7CiAgICAgaWYgKHN5bmNocm9ub3VzKQotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJy
ZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpF
dmVudExpc3RlbmVyLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFn
ZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3Bl
Y3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIGV2
ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNjaGVkdWxlUGF1
c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogfQogCiB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHVybCkKQEAgLTQxMSwxMCArNDExLDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkK
ICAgICBpZiAoYnJlYWtwb2ludFVSTC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVha3BvaW50VVJMIiwg
YnJlYWtwb2ludFVSTCk7CiAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0g
ICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVu
ZERpc3BhdGNoZXI6OlJlYXNvbjo6WEhSLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uOjpYSFIsIFdURjo6bW92ZShldmVudERhdGEpKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50OjpjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaAppbmRleCA1NTg3MzM3Li5jNjli
M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUGF1c2UoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpc2FibGUoKTsKIAotICAgIHZvaWQg
ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwg
Ym9vbCBpbnNlcnRpb24sIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBkZXNjcmlwdGlvbik7
CisgICAgdm9pZCBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUmIHRhcmdldCwgaW50IGJyZWFr
cG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGRl
c2NyaXB0aW9uKTsKICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiwgdWlu
dDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KTsKICAgICBib29sIGhhc0JyZWFrcG9pbnQoTm9kZSos
IGludCB0eXBlKTsKICAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCBk
N2M1ZWEzLi44MTEzYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtOTQsMzQgKzk0LDM0IEBAIHZvaWQgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBtX2VuYWJs
ZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0
b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0ZW1zKQordm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4+JiBpdGVtcykKIHsKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VB
cmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlk
LCBmcmFtZSk7CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLmNvcHlSZWYoKSwgZnJhbWUpOwogICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5v
IFN0b3JhZ2VBcmVhIGZvciBnaXZlbiBzdG9yYWdlSWQiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+Pj4gc3RvcmFnZUl0ZW1zID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gc3RvcmFnZUl0ZW1zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIFN0
cmluZyBrZXkgPSBzdG9yYWdlQXJlYS0+a2V5KGkpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBz
dG9yYWdlQXJlYS0+aXRlbShrZXkpOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgIGVudHJ5LT5hZGRJdGVtKGtleSk7
CiAgICAgICAgIGVudHJ5LT5hZGRJdGVtKHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZUl0ZW1zLT5h
ZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7CisgICAgICAgIHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShX
VEY6Om1vdmUoZW50cnkpKTsKICAgICB9CiAKLSAgICBpdGVtcyA9IHN0b3JhZ2VJdGVtcy5yZWxl
YXNlKCk7CisgICAgaXRlbXMgPSBXVEY6Om1vdmUoc3RvcmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0
cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcs
IHN0b3JhZ2VJZCwgZnJhbWUpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEg
PSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1l
KTsKICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlM
aXRlcmFsKCJTdG9yYWdlIG5vdCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CkBAIC0xMzMsMTAg
KzEzMywxMCBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0
ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICBlcnJvclN0cmluZyA9
IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihRVU9UQV9FWENFRURFRF9FUlIpLm5hbWU7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9y
YWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQogewog
ICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0g
ZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKKyAgICBSZWZQ
dHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5n
LCBzdG9yYWdlSWQuY29weVJlZigpLCBmcmFtZSk7CiAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewog
ICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiU3RvcmFnZSBub3QgZm91bmQiKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTU3LDExICsxNTcsMTIgQEAgU3RyaW5nIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAgcmV0dXJuIHN0
b3JhZ2VJZChzZWN1cml0eU9yaWdpbi5nZXQoKSwgaXNMb2NhbFN0b3JhZ2UpLT50b0pTT05TdHJp
bmcoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpT
dG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKK1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xv
Y2FsU3RvcmFnZSkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFn
ZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJp
dHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCi0gICAgICAgIC5zZXRJc0xvY2FsU3RvcmFnZShpc0xv
Y2FsU3RvcmFnZSkucmVsZWFzZSgpOworICAgICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoaXNMb2Nh
bFN0b3JhZ2UpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5
cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgUGFnZSopCkBA
IC0xODEsNyArMTgyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZERpc3Bh
dGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb24KICAgICAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChpZCwga2V5LCBvbGRWYWx1ZSwg
bmV3VmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUp
CitSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3Jh
Z2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUpCiB7CiAgICAgU3RyaW5nIHNl
Y3VyaXR5T3JpZ2luOwogICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRl
eCA2ZmRiMTlkLi4zNjFiNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC02MywxOSArNjMsMTkgQEAgcHVibGljOgog
ICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCiAgICAgdmlydHVhbCB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0
b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdl
SXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5n
JiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQu
CiAgICAgU3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9y
aWdpbiosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiosIGJv
b2wgaXNMb2NhbFN0b3JhZ2UpOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uCiAgICAgdm9pZCBkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwg
U3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFnZSopOwogCiBwcml2YXRlOgotICAgIFBh
c3NSZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mLCBGcmFtZSomKTsKKyAgICBSZWZQ
dHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiwgRnJhbWUqJik7CiAKICAgICBJbnNwZWN0
b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRj
aGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwCmluZGV4IGQ1YTM5NjguLmI0NzQ5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTU4LDE5ICs1OCwy
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXZvaWQgcmVwb3J0VHJh
bnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2ssIFNRTEVy
cm9yKiBlcnJvcikKK3ZvaWQgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxi
YWNrJiByZXF1ZXN0Q2FsbGJhY2ssIFNRTEVycm9yKiBlcnJvcikKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBlcnJvck9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3JlYXRlKCkKKyAgICBhdXRvIGVycm9yT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWVzc2FnZShlcnJvci0+bWVzc2FnZSgpKQotICAgICAgICAuc2V0Q29kZShlcnJv
ci0+Y29kZSgpKTsKLSAgICByZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKG51bGxwdHIsIG51
bGxwdHIsIGVycm9yT2JqZWN0LnJlbGVhc2UoKSk7CisgICAgICAgIC5zZXRDb2RlKGVycm9yLT5j
b2RlKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CisgICAgcmVxdWVzdENhbGxiYWNrLnNlbmRTdWNj
ZXNzKG51bGxwdHIsIG51bGxwdHIsIFdURjo6bW92ZShlcnJvck9iamVjdCkpOwogfQogCiBjbGFz
cyBTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRDYWxsYmFjayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShQYXNz
UmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBS
ZWY8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhdGVt
ZW50Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFN0YXRlbWVudENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSk7CiAgICAg
fQogCiAgICAgdmlydHVhbCB+U3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KQEAgLTc5LDU3ICs4MCw2
MCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dMaXN0
ID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gY29sdW1uTmFtZXMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGNvbHVtbnMgPSByb3dMaXN0LT5jb2x1bW5OYW1lcygpOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBj
b2x1bW5OYW1lcy0+YWRkSXRlbShjb2x1bW5zW2ldKTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+PiB2YWx1ZXMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT46OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHZhbHVlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPjo6Y3Jl
YXRlKCk7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGRhdGEgPSByb3dMaXN0LT52
YWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBjb25zdCBTUUxWYWx1ZSYgdmFsdWUgPSByb3dMaXN0LT52YWx1ZXMo
KVtpXTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWU7
CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBT
UUxWYWx1ZTo6U3RyaW5nVmFsdWU6IHZhbHVlcy0+YWRkSXRlbShJbnNwZWN0b3JTdHJpbmc6OmNy
ZWF0ZSh2YWx1ZS5zdHJpbmcoKSkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6
Ok51bWJlclZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRl
KHZhbHVlLm51bWJlcigpKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVs
bFZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7IGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6IGluc3BlY3RvclZhbHVlID0g
SW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUuc3RyaW5nKCkpOyBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgU1FMVmFsdWU6Ok51bWJlclZhbHVlOiBpbnNwZWN0b3JWYWx1ZSA9IEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZS5udW1iZXIoKSk7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBTUUxWYWx1ZTo6TnVsbFZhbHVlOiBpbnNwZWN0b3JWYWx1ZSA9IEluc3BlY3RvclZhbHVl
OjpudWxsKCk7IGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICB2YWx1ZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKGluc3BlY3RvclZhbHVlKSk7CiAgICAgICAgIH0K
LSAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKGNvbHVtbk5hbWVzLnJlbGVh
c2UoKSwgdmFsdWVzLnJlbGVhc2UoKSwgbnVsbHB0cik7CisgICAgICAgIG1fcmVxdWVzdENhbGxi
YWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUoY29sdW1uTmFtZXMpLCBXVEY6Om1vdmUodmFsdWVz
KSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBTdGF0ZW1lbnRDYWxsYmFjayhQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVz
dENhbGxiYWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykg
eyB9Ci0gICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7Cisg
ICAgU3RhdGVtZW50Q2FsbGJhY2soUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2Fs
bGJhY2spCisgICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxs
YmFjaykpIHsgfQorICAgIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNr
OwogfTsKIAogY2xhc3MgU3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNy
ZWF0ZShSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhdGVtZW50RXJyb3JDYWxsYmFjayhyZXF1ZXN0
Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RhdGVtZW50RXJyb3JD
YWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAogICAgIHZpcnR1
YWwgflN0YXRlbWVudEVycm9yQ2FsbGJhY2soKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKiBlcnJvcikgb3ZlcnJpZGUKICAgICB7
Ci0gICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKG1fcmVxdWVzdENhbGxiYWNrLmdldCgp
LCBlcnJvcik7CisgICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKG1fcmVxdWVzdENhbGxi
YWNrLmNvcHlSZWYoKSwgZXJyb3IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsgIAogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKFBhc3NSZWZQdHI8RXhlY3V0ZVNR
TENhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCi0gICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2so
cmVxdWVzdENhbGxiYWNrKSB7IH0KLSAgICBSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3Jl
cXVlc3RDYWxsYmFjazsKKyAgICBTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKFJlZjxFeGVjdXRlU1FM
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNr
KFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSB7IH0KKyAgICBSZWY8RXhlY3V0ZVNRTENhbGxi
YWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIGNsYXNzIFRyYW5zYWN0aW9uQ2FsbGJhY2sg
OiBwdWJsaWMgU1FMVHJhbnNhY3Rpb25DYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VHJhbnNhY3Rpb25DYWxsYmFjaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3FsU3Rh
dGVtZW50LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQor
ICAgIHN0YXRpYyBSZWY8VHJhbnNhY3Rpb25DYWxsYmFjaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
c3FsU3RhdGVtZW50LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25DYWxsYmFjayhz
cWxTdGF0ZW1lbnQsIHJlcXVlc3RDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUcmFuc2FjdGlvbkNhbGxiYWNrKHNxbFN0YXRlbWVudCwgV1RGOjptb3ZlKHJlcXVlc3RD
YWxsYmFjaykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5UcmFuc2FjdGlvbkNhbGxiYWNrKCkg
eyB9CkBAIC0xNDAsMjQgKzE0NCwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgICAgICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICAgICAgUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayhTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRl
KG1fcmVxdWVzdENhbGxiYWNrLmdldCgpKSk7Ci0gICAgICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0
ZShtX3JlcXVlc3RDYWxsYmFjay5nZXQoKSkpOwotICAgICAgICB0cmFuc2FjdGlvbi0+ZXhlY3V0
ZVNRTChtX3NxbFN0YXRlbWVudCwgc3FsVmFsdWVzLCBjYWxsYmFjay5yZWxlYXNlKCksIGVycm9y
Q2FsbGJhY2sucmVsZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgUmVmPFNRTFN0
YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayhTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKG1fcmVx
dWVzdENhbGxiYWNrLmNvcHlSZWYoKSkpOworICAgICAgICBSZWY8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjayhTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpjcmVhdGUobV9y
ZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5leGVjdXRl
U1FMKG1fc3FsU3RhdGVtZW50LCBzcWxWYWx1ZXMsIFdURjo6bW92ZShjYWxsYmFjayksIFdURjo6
bW92ZShlcnJvckNhbGxiYWNrKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIHByaXZhdGU6Ci0gICAgVHJhbnNhY3Rpb25DYWxsYmFjayhjb25zdCBTdHJp
bmcmIHNxbFN0YXRlbWVudCwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RD
YWxsYmFjaykKKyAgICBUcmFuc2FjdGlvbkNhbGxiYWNrKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVt
ZW50LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICAgICAg
OiBtX3NxbFN0YXRlbWVudChzcWxTdGF0ZW1lbnQpCi0gICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJh
Y2socmVxdWVzdENhbGxiYWNrKSB7IH0KKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6
Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9CiAgICAgU3RyaW5nIG1fc3FsU3RhdGVtZW50Owot
ICAgIFJlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJl
ZjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogY2xhc3MgVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFj
aykKKyAgICBzdGF0aWMgUmVmPFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gY3JlYXRlKFJlZjxF
eGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2socmVxdWVzdENhbGxiYWNr
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgflRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQpAQCAtMTY4LDE2ICsxNzIsMTYgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwcml2YXRlOgotICAgIFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxi
YWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0g
ICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQorICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2Fs
bGJhY2spKSB7IH0KKyAgICBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFj
azsKIH07CiAKIGNsYXNzIFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrIDogcHVibGljIFZvaWRD
YWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25TdWNj
ZXNzQ2FsbGJhY2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxUcmFuc2FjdGlvblN1Y2Nlc3ND
YWxsYmFjaz4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJh
bnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgflRy
YW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkgeyB9CkBAIC0yNzIsMTAgKzI3Niw4IEBAIHZvaWQg
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5n
JiBlcnJvciwgY29uc3QgU3RyCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiBwcnBSZXF1
ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogewotICAgIFJlZlB0
cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjayA9IHBycFJlcXVlc3RDYWxsYmFj
azsKLQogICAgIGlmICghbV9lbmFibGVkKSB7CiAgICAgICAgIHJlcXVlc3RDYWxsYmFjay0+c2Vu
ZEZhaWx1cmUoIkRhdGFiYXNlIGFnZW50IGlzIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVy
bjsKQEAgLTI4NywxMCArMjg5LDEwIEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhl
Y3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxs
YmFjayhUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUocXVlcnksIHJlcXVlc3RDYWxsYmFjay5n
ZXQoKSkpOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2soVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUocmVxdWVzdENhbGxiYWNrLmdl
dCgpKSk7Ci0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0
aW9uU3VjY2Vzc0NhbGxiYWNrOjpjcmVhdGUoKSk7Ci0gICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9u
KGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxs
YmFjay5yZWxlYXNlKCkpOworICAgIFJlZjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
ayhUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUocXVlcnksIHJlcXVlc3RDYWxsYmFjay5nZXQo
KSkpOworICAgIFJlZjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2so
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUocmVxdWVzdENhbGxiYWNrLmdldCgpKSk7
CisgICAgUmVmPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0aW9uU3VjY2Vz
c0NhbGxiYWNrOjpjcmVhdGUoKSk7CisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKFdURjo6bW92
ZShjYWxsYmFjayksIFdURjo6bW92ZShlcnJvckNhbGxiYWNrKSwgV1RGOjptb3ZlKHN1Y2Nlc3ND
YWxsYmFjaykpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJ
ZChEYXRhYmFzZSogZGF0YWJhc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuaAppbmRleCA3N2VmZWRmLi4zOGUzZjMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAgLTY0
LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiYgbmFtZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
U1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4pIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQuCiAgICAgU3Ry
aW5nIGRhdGFiYXNlSWQoRGF0YWJhc2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggZDZj
YjYyMy4uY2RlYzNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKQEAgLTM4LDExICszOCwxMSBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLWlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBj
b25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8RGF0YWJhc2U+JiYg
ZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIGRpZE9wZW5EYXRhYmFzZUltcGwoKmluc3Ry
dW1lbnRpbmdBZ2VudHMsIGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOworICAgICAg
ICBkaWRPcGVuRGF0YWJhc2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1vdmUoZGF0
YWJhc2UpLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGRhdGFiYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAppbmRleCA4
M2I4ODQyLi45YmFmNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCkBAIC00MywxMiArNDMsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW50IG5leHRVbnVzZWRJZCA9IDE7CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6
Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCitSZWY8SW5zcGVj
dG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6Y3JlYXRlKFJl
ZlB0cjxEYXRhYmFzZT4mJiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2
ZXJzaW9uKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZShXVEY6Om1vdmUoZGF0YWJhc2UpLCBkb21haW4sIG5hbWUsIHZlcnNpb24pKTsKIH0KIAot
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShSZWZQdHI8RGF0YWJhc2U+JiYgZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbikKICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgLCBtX2lkKFN0cmlu
Zzo6bnVtYmVyKG5leHRVbnVzZWRJZCsrKSkKICAgICAsIG1fZG9tYWluKGRvbWFpbikKQEAgLTU5
LDEyICs1OSwxMyBAQCBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpJbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYQogCiB2b2lkIEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2U6OmJpbmQoSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIq
IGRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2U+IGpzb25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RGF0YWJhc2U6OmNyZWF0ZSgpCisgICAgYXV0byBqc29uT2JqZWN0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0SWQobV9pZCkKICAgICAgICAgLnNldERvbWFpbihtX2RvbWFpbikKICAgICAgICAgLnNl
dE5hbWUobV9uYW1lKQotICAgICAgICAuc2V0VmVyc2lvbihtX3ZlcnNpb24pOwotICAgIGRhdGFi
YXNlRnJvbnRlbmREaXNwYXRjaGVyLT5hZGREYXRhYmFzZShqc29uT2JqZWN0KTsKKyAgICAgICAg
LnNldFZlcnNpb24obV92ZXJzaW9uKQorICAgICAgICAucmVsZWFzZSgpOworICAgIGRhdGFiYXNl
RnJvbnRlbmREaXNwYXRjaGVyLT5hZGREYXRhYmFzZShXVEY6Om1vdmUoanNvbk9iamVjdCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaAppbmRleCA5ODhhMjc3Li5jYWE2OGFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAm
JiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDUsMTUgKzQ0LDE1IEBAIGNsYXNzIERhdGFiYXNlOwog
CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBk
YXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2U+IGNyZWF0ZShSZWZQdHI8RGF0YWJhc2U+JiYsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAKICAgICB2b2lkIGJpbmQo
SW5zcGVjdG9yOjpJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciopOwogICAgIERh
dGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldERhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKSB7IG1fZGF0YWJhc2Ug
PSBkYXRhYmFzZTsgfQorICAgIHZvaWQgc2V0RGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlPiYmIGRh
dGFiYXNlKSB7IG1fZGF0YWJhc2UgPSBkYXRhYmFzZTsgfQogICAgIFN0cmluZyBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UoUmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogCiAgICAgUmVmUHRyPERhdGFi
YXNlPiBtX2RhdGFiYXNlOwogICAgIFN0cmluZyBtX2lkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oCmluZGV4IDFhNzRlZGIuLjUwYmZlMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhv
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmgKQEAgLTQ1LDkgKzQ1LDkgQEAgY2xhc3MgUGFnZTsKIAogY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUo
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAg
IHN0YXRpYyBSZWY8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQYWdlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50LCBmcm9udGVuZFBh
Z2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
KGNsaWVudCwgZnJvbnRlbmRQYWdlKSk7CiAgICAgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgfklu
c3BlY3RvckZyb250ZW5kSG9zdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggZGExNmE4NC4uZjc5YzAyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwCkBAIC05Miw5ICs5Miw5IEBAIG5hbWVzcGFjZSB7CiBjbGFzcyBHZXREYXRhYmFzZU5h
bWVzQ2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPFJlcXVl
c3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBz
ZWN1cml0eU9yaWdpbikKKyAgICBzdGF0aWMgUmVmPEdldERhdGFiYXNlTmFtZXNDYWxsYmFjaz4g
Y3JlYXRlKFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaywgc2Vj
dXJpdHlPcmlnaW4pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2V0RGF0YWJhc2VO
YW1lc0NhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBzZWN1cml0eU9yaWdpbikp
OwogICAgIH0KIAogICAgIHZpcnR1YWwgfkdldERhdGFiYXNlTmFtZXNDYWxsYmFjaygpIHsgfQpA
QCAtMTI2LDE4ICsxMjYsMTggQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXNMaXN0ID0gcmVxdWVzdFJlc3VsdC0+ZG9tU3Ry
aW5nTGlzdCgpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gZGF0YWJhc2VOYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46
OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gZGF0YWJhc2VOYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNy
ZWF0ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXNMaXN0
LT5sZW5ndGgoKTsgKytpKQogICAgICAgICAgICAgZGF0YWJhc2VOYW1lcy0+YWRkSXRlbShkYXRh
YmFzZU5hbWVzTGlzdC0+aXRlbShpKSk7Ci0gICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5k
U3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7CisgICAgICAgIG1fcmVxdWVzdENhbGxi
YWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUoZGF0YWJhc2VOYW1lcykpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxSZXF1ZXN0RGF0
YWJhc2VOYW1lc0NhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgc2VjdXJp
dHlPcmlnaW4pCisgICAgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKFJlZjxSZXF1ZXN0RGF0YWJh
c2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBzZWN1cml0
eU9yaWdpbikKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50
TGlzdGVuZXJUeXBlKQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFj
aykKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNr
KSkKICAgICAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKSB7IH0KLSAgICBS
ZWZQdHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7Cisg
ICAgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwog
ICAgIFN0cmluZyBtX3NlY3VyaXR5T3JpZ2luOwogfTsKIApAQCAtMTQ3LDggKzE0Nyw4IEBAIHB1
YmxpYzoKICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkgeyB9CiAgICAgdmlydHVhbCB+RXhl
Y3V0YWJsZVdpdGhEYXRhYmFzZSgpIHsgfTsKICAgICB2b2lkIHN0YXJ0KElEQkZhY3RvcnkqLCBT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlPikgPSAwOwotICAgIHZpcnR1YWwg
UmVxdWVzdENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmKSA9IDA7CisgICAgdmlydHVhbCBSZXF1ZXN0
Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpID0gMDsKICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OwogcHJpdmF0ZToKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CkBAIC0xNTYsOSArMTU2LDkgQEAgcHJpdmF0
ZToKIAogY2xhc3MgT3BlbkRhdGFiYXNlQ2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNy
ZWF0ZShFeGVjdXRhYmxlV2l0aERhdGFiYXNlKiBleGVjdXRhYmxlV2l0aERhdGFiYXNlKQorICAg
IHN0YXRpYyBSZWY8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0ZShFeGVjdXRhYmxlV2l0aERh
dGFiYXNlKiBleGVjdXRhYmxlV2l0aERhdGFiYXNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBPcGVuRGF0YWJhc2VDYWxsYmFjayhleGVjdXRhYmxlV2l0aERhdGFiYXNlKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9wZW5EYXRhYmFzZUNhbGxiYWNrKGV4ZWN1
dGFibGVXaXRoRGF0YWJhc2UpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5PcGVuRGF0YWJhc2VD
YWxsYmFjaygpIHsgfQpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5z
dWNjZXNzRXZlbnQpIHsKLSAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVx
dWVzdENhbGxiYWNrKCktPnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUuIik7Cisg
ICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNl
bmRGYWlsdXJlKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUuIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMTc5LDE2ICsxNzksMTYgQEAgcHVibGljOgogICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgUmVmUHRyPElEQkFueT4gcmVxdWVzdFJlc3VsdCA9
IGlkYk9wZW5EQlJlcXVlc3QtPnJlc3VsdChlYyk7CiAgICAgICAgIGlmIChlYykgewotICAgICAg
ICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS0+c2VuZEZh
aWx1cmUoIkNvdWxkIG5vdCBnZXQgcmVzdWx0IGluIGNhbGxiYWNrLiIpOworICAgICAgICAgICAg
bV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgi
Q291bGQgbm90IGdldCByZXN1bHQgaW4gY2FsbGJhY2suIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlcXVlc3RSZXN1bHQtPnR5cGUoKSAhPSBJREJBbnk6
OklEQkRhdGFiYXNlVHlwZSkgewotICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNl
LT5yZXF1ZXN0Q2FsbGJhY2soKS0+c2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUu
Iik7CisgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFj
aygpLnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIHJlc3VsdCB0eXBlLiIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRh
YmFzZSA9IHJlcXVlc3RSZXN1bHQtPmlkYkRhdGFiYXNlKCk7Ci0gICAgICAgIG1fZXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZShpZGJEYXRhYmFzZSk7CisgICAgICAgIG1fZXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZShXVEY6Om1vdmUoaWRiRGF0YWJhc2UpKTsKICAgICAgICAg
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6ZGVhY3RpdmF0ZU5ld1RyYW5zYWN0aW9ucygp
OwogICAgICAgICBpZGJEYXRhYmFzZS0+Y2xvc2UoKTsKICAgICB9CkBAIC0yMDIsMTI3ICsyMDIs
MTM2IEBAIHByaXZhdGU6CiAKIHZvaWQgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZTo6c3RhcnQoSURC
RmFjdG9yeSogaWRiRmFjdG9yeSwgU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSkKIHsKLSAgICBSZWZQdHI8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrID0g
T3BlbkRhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzKTsKKyAgICBSZWY8T3BlbkRhdGFiYXNl
Q2FsbGJhY2s+IGNhbGxiYWNrID0gT3BlbkRhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4g
aWRiT3BlbkRCUmVxdWVzdCA9IGlkYkZhY3RvcnktPm9wZW4oY29udGV4dCgpLCBkYXRhYmFzZU5h
bWUsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdENhbGxiYWNrKCktPnNlbmRG
YWlsdXJlKCJDb3VsZCBub3Qgb3BlbiBkYXRhYmFzZS4iKTsKKyAgICAgICAgcmVxdWVzdENhbGxi
YWNrKCkuc2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBvcGVuIGRhdGFiYXNlLiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlkYk9wZW5EQlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICBpZGJPcGVuREJS
ZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIFdURjo6
bW92ZShjYWxsYmFjayksIGZhbHNlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgSURCRGF0YWJhc2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJp
bmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2RlID0gSURCVHJhbnNhY3Rpb246
Om1vZGVSZWFkT25seSgpKQorc3RhdGljIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b25Gb3JEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBJREJEYXRhYmFzZSogaWRiRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVO
YW1lLCBjb25zdCBTdHJpbmcmIG1vZGUgPSBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRPbmx5KCkp
CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiBpZGJUcmFuc2FjdGlvbiA9IGlkYkRhdGFiYXNlLT50cmFuc2FjdGlvbihzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIG1vZGUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBpZGJUcmFuc2FjdGlvbjsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKGlkYlRyYW5zYWN0aW9uKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlRm9yVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24qIGlk
YlRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKK3N0YXRpYyBSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlRm9yVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b24qIGlkYlRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9i
amVjdFN0b3JlID0gaWRiVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGlk
Yk9iamVjdFN0b3JlOworICAgIHJldHVybiBXVEY6Om1vdmUoaWRiT2JqZWN0U3RvcmUpOwogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gaW5kZXhGb3JPYmplY3RTdG9yZShJREJPYmpl
Y3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQorc3RhdGlj
IFJlZlB0cjxJREJJbmRleD4gaW5kZXhGb3JPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSogaWRi
T2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQogewogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIFJlZlB0cjxJREJJbmRleD4gaWRiSW5kZXggPSBpZGJPYmplY3RTdG9y
ZS0+aW5kZXgoaW5kZXhOYW1lLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gaWRiSW5kZXg7CisgICAgcmV0dXJuIFdURjo6bW92ZShpZGJJbmRl
eCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5UGF0
aChjb25zdCBJREJLZXlQYXRoJiBpZGJLZXlQYXRoKQorc3RhdGljIFJlZlB0cjxLZXlQYXRoPiBr
ZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYgaWRiS2V5UGF0aCkKIHsKICAg
ICBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aDsKICAgICBzd2l0Y2ggKGlkYktleVBhdGgudHlwZSgp
KSB7CiAgICAgY2FzZSBJREJLZXlQYXRoOjpOdWxsVHlwZToKLSAgICAgICAga2V5UGF0aCA9IEtl
eVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6TnVsbCk7CisgICAgICAgIGtl
eVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFR5cGUoS2V5UGF0aDo6
VHlwZTo6TnVsbCkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSURCS2V5UGF0aDo6U3RyaW5nVHlwZToKLSAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6
OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAga2V5UGF0
aCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBl
OjpTdHJpbmcpCisgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRoLT5zZXRT
dHJpbmcoaWRiS2V5UGF0aC5zdHJpbmcoKSk7CisKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
REJLZXlQYXRoOjpBcnJheVR5cGU6IHsKLSAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0
ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpOwotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYXJyYXkgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcnJheSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3RyaW5nQXJyYXkgPSBpZGJLZXlQYXRoLmFycmF5KCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5nQXJyYXkuc2l6ZSgpOyArK2kpCiAgICAgICAgICAg
ICBhcnJheS0+YWRkSXRlbShzdHJpbmdBcnJheVtpXSk7Ci0gICAgICAgIGtleVBhdGgtPnNldEFy
cmF5KGFycmF5KTsKKyAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpBcnJheSkKKyAgICAgICAgICAgIC5yZWxlYXNl
KCk7CisgICAgICAgIGtleVBhdGgtPnNldEFycmF5KFdURjo6bW92ZShhcnJheSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGtleVBhdGgucmVsZWFzZSgpOworICAgIHJldHVybiBX
VEY6Om1vdmUoa2V5UGF0aCk7CiB9CiAKIGNsYXNzIERhdGFiYXNlTG9hZGVyIDogcHVibGljIEV4
ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQorICAgIHN0
YXRpYyBSZWY8RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUxvYWRlcihjb250ZXh0
LCByZXF1ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJh
c2VMb2FkZXIoY29udGV4dCwgV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIH5EYXRhYmFzZUxvYWRlcigpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gcHJwRGF0YWJhc2UpIG92ZXJyaWRlCisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKSBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IHBy
cERhdGFiYXNlOwotICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLT5pc0FjdGl2ZSgpKQor
ICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLmlzQWN0aXZlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSBkYXRhYmFzZU1ldGFk
YXRhID0gaWRiRGF0YWJhc2UtPm1ldGFkYXRhKCk7CisgICAgICAgIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEgZGF0YWJhc2VNZXRhZGF0YSA9IGRhdGFiYXNlLT5tZXRhZGF0YSgpOwogCi0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPj4gb2JqZWN0U3RvcmVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT46
OmNyZWF0ZSgpOworICAgICAgICBhdXRvIG9iamVjdFN0b3JlcyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+Ojpj
cmVhdGUoKTsKIAogICAgICAgICBmb3IgKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEgOiBkYXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy52YWx1ZXMo
KSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD4+IGluZGV4ZXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6
Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gaW5kZXhlcyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwogCiAgICAgICAgICAgICBmb3IgKGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgOiBvYmplY3RTdG9yZU1ldGFkYXRhLmlu
ZGV4ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8T2JqZWN0U3RvcmVJbmRl
eD4gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAgICAgUmVmPE9iamVjdFN0b3JlSW5kZXg+IG9iamVjdFN0b3JlSW5kZXggPSBPYmplY3RT
dG9yZUluZGV4OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleE1l
dGFkYXRhLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9t
SURCS2V5UGF0aChpbmRleE1ldGFkYXRhLmtleVBhdGgpKQogICAgICAgICAgICAgICAgICAgICAu
c2V0VW5pcXVlKGluZGV4TWV0YWRhdGEudW5pcXVlKQotICAgICAgICAgICAgICAgICAgICAuc2V0
TXVsdGlFbnRyeShpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpOwotICAgICAgICAgICAgICAgIGlu
ZGV4ZXMtPmFkZEl0ZW0ob2JqZWN0U3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIC5z
ZXRNdWx0aUVudHJ5KGluZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkKKyAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBpbmRleGVzLT5hZGRJdGVtKFdURjo6bW92
ZShvYmplY3RTdG9yZUluZGV4KSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZlB0
cjxPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBPYmplY3RTdG9yZTo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgIFJlZjxPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBPYmplY3RTdG9yZTo6Y3JlYXRl
KCkKICAgICAgICAgICAgICAgICAuc2V0TmFtZShvYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUpCiAg
ICAgICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5UGF0aEZyb21JREJLZXlQYXRoKG9iamVjdFN0
b3JlTWV0YWRhdGEua2V5UGF0aCkpCiAgICAgICAgICAgICAgICAgLnNldEF1dG9JbmNyZW1lbnQo
b2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50KQotICAgICAgICAgICAgICAgIC5zZXRJ
bmRleGVzKGluZGV4ZXMpOworICAgICAgICAgICAgICAgIC5zZXRJbmRleGVzKFdURjo6bW92ZShp
bmRleGVzKSkKKyAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgICAgICAgICBvYmpl
Y3RTdG9yZXMtPmFkZEl0ZW0ob2JqZWN0U3RvcmUpOworICAgICAgICAgICAgb2JqZWN0U3RvcmVz
LT5hZGRJdGVtKFdURjo6bW92ZShvYmplY3RTdG9yZSkpOwogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcz4gcmVzdWx0ID0gRGF0YWJhc2VXaXRoT2Jq
ZWN0U3RvcmVzOjpjcmVhdGUoKQorICAgICAgICBSZWY8RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVz
PiByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAuc2V0TmFtZShkYXRhYmFzZU1ldGFkYXRhLm5hbWUpCiAgICAgICAgICAgICAuc2V0VmVyc2lv
bihkYXRhYmFzZU1ldGFkYXRhLnZlcnNpb24pCi0gICAgICAgICAgICAuc2V0T2JqZWN0U3RvcmVz
KG9iamVjdFN0b3Jlcyk7CisgICAgICAgICAgICAuc2V0T2JqZWN0U3RvcmVzKFdURjo6bW92ZShv
YmplY3RTdG9yZXMpKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgICAgICBtX3JlcXVl
c3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MocmVzdWx0KTsKKyAgICAgICAgbV9yZXF1ZXN0Q2FsbGJh
Y2stPnNlbmRTdWNjZXNzKFdURjo6bW92ZShyZXN1bHQpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IFJlcXVlc3RDYWxsYmFjayogcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9y
ZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVx
dWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7
IH0KIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gcmVxdWVzdENhbGxi
YWNrKQorICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAg
IDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQotICAgICAgICAsIG1fcmVxdWVzdENh
bGxiYWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0gICAgUmVmUHRyPFJlcXVlc3REYXRhYmFzZUNh
bGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9CisgICAgUmVmPFJlcXVlc3REYXRhYmFzZUNh
bGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKLXN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3JPYmplY3QqIGtleSkKK3N0YXRp
YyBSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rvck9iamVj
dCoga2V5KQogewogICAgIFJlZlB0cjxJREJLZXk+IGlkYktleTsKIApAQCAtMzUyLDcgKzM2MSw5
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChJ
bnNwZWN0b3JPYmplY3QqIGtleSkKICAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRl
KGRhdGUpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBhcnJheVR5cGUpIHsKICAgICAgICAgSURC
S2V5OjpLZXlBcnJheSBrZXlBcnJheTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cnJheSA9IGtleS0+Z2V0QXJyYXkoImFycmF5Iik7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJyYXk7CisgICAgICAgIGlmICgha2V5LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJheSkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB2YWx1ZSA9IGFycmF5LT5nZXQoaSk7CiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3Q7CkBAIC0zNjcsMTYgKzM3OCwyMCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBrZXkp
CiAgICAgcmV0dXJuIGlkYktleS5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5nZShJbnNwZWN0b3JPYmplY3QqIGtleVJh
bmdlKQorc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uo
SW5zcGVjdG9yT2JqZWN0KiBrZXlSYW5nZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBsb3dlciA9IGtleVJhbmdlLT5nZXRPYmplY3QoImxvd2VyIik7Ci0gICAgUmVmUHRyPElEQktl
eT4gaWRiTG93ZXIgPSBsb3dlciA/IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIuZ2V0
KCkpIDogbnVsbHB0cjsKLSAgICBpZiAobG93ZXIgJiYgIWlkYkxvd2VyKQorICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGxvd2VyOworICAgIGlmICgha2V5UmFuZ2UtPmdldE9iamVjdCgibG93
ZXIiLCBsb3dlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxJREJLZXk+
IGlkYkxvd2VyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5nZXQoKSk7CisgICAg
aWYgKCFpZGJMb3dlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB1cHBlciA9IGtleVJhbmdlLT5nZXRPYmplY3QoInVwcGVyIik7Ci0gICAg
UmVmUHRyPElEQktleT4gaWRiVXBwZXIgPSB1cHBlciA/IGlkYktleUZyb21JbnNwZWN0b3JPYmpl
Y3QodXBwZXIuZ2V0KCkpIDogbnVsbHB0cjsKLSAgICBpZiAodXBwZXIgJiYgIWlkYlVwcGVyKQor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwcGVyOworICAgIGlmICgha2V5UmFuZ2UtPmdl
dE9iamVjdCgidXBwZXIiLCB1cHBlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJl
ZlB0cjxJREJLZXk+IGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1cHBlci5n
ZXQoKSk7CisgICAgaWYgKCFpZGJVcHBlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBib29sIGxvd2VyT3BlbjsKQEAgLTM4OSwxNyArNDA0LDE2IEBAIHN0YXRpYyBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5nZShJbnNwZWN0b3JPYmplY3QqIGtl
eVJhbmdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIElEQktleVJhbmdlOjpVcHBlckJv
dW5kVHlwZSB1cHBlckJvdW5kVHlwZSA9IHVwcGVyT3BlbiA/IElEQktleVJhbmdlOjpVcHBlckJv
dW5kT3BlbiA6IElEQktleVJhbmdlOjpVcHBlckJvdW5kQ2xvc2VkOwogCi0gICAgUmVmUHRyPElE
QktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IElEQktleVJhbmdlOjpjcmVhdGUoaWRiTG93ZXIsIGlk
YlVwcGVyLCBsb3dlckJvdW5kVHlwZSwgdXBwZXJCb3VuZFR5cGUpOwotICAgIHJldHVybiBpZGJL
ZXlSYW5nZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoaWRiTG93
ZXIsIGlkYlVwcGVyLCBsb3dlckJvdW5kVHlwZSwgdXBwZXJCb3VuZFR5cGUpOwogfQogCiBjbGFz
cyBEYXRhTG9hZGVyOwogCiBjbGFzcyBPcGVuQ3Vyc29yQ2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRM
aXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlbkN1cnNvckNhbGxi
YWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQsIFBhc3NSZWZQdHI8UmVx
dWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25l
ZCBwYWdlU2l6ZSkKKyAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gY3JlYXRlKElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuQ3Vyc29yQ2FsbGJhY2soaW5qZWN0ZWRT
Y3JpcHQsIHJlcXVlc3RDYWxsYmFjaywgc2tpcENvdW50LCBwYWdlU2l6ZSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuQ3Vyc29yQ2FsbGJhY2soaW5qZWN0ZWRTY3JpcHQsIFdU
Rjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBza2lwQ291bnQsIHBhZ2VTaXplKSk7CiAgICAgfQog
CiAgICAgdmlydHVhbCB+T3BlbkN1cnNvckNhbGxiYWNrKCkgeyB9CkBAIC00NTgsOCArNDcyLDkg
QEAgcHVibGljOgogICAgICAgICBSZWZQdHI8RGF0YUVudHJ5PiBkYXRhRW50cnkgPSBEYXRhRW50
cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9i
amVjdChpZGJDdXJzb3ItPmtleSgpLCBTdHJpbmcoKSkpCiAgICAgICAgICAgICAuc2V0UHJpbWFy
eUtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT5wcmltYXJ5S2V5KCks
IFN0cmluZygpKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0LndyYXBP
YmplY3QoaWRiQ3Vyc29yLT52YWx1ZSgpLCBTdHJpbmcoKSkpOwotICAgICAgICBtX3Jlc3VsdC0+
YWRkSXRlbShkYXRhRW50cnkpOworICAgICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdChpZGJDdXJzb3ItPnZhbHVlKCksIFN0cmluZygpKSkKKyAgICAgICAgICAg
IC5yZWxlYXNlKCk7CisgICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURjo6bW92ZShkYXRhRW50
cnkpKTsKIAogICAgIH0KIApAQCAtNDY3LDQxICs0ODIsNDAgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKCFtX3JlcXVlc3RDYWxsYmFjay0+aXNBY3RpdmUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKG1fcmVzdWx0LnJl
bGVhc2UoKSwgaGFzTW9yZSk7CisgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2Vz
cyhXVEY6Om1vdmUobV9yZXN1bHQpLCBoYXNNb3JlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
T3BlbkN1cnNvckNhbGxiYWNrKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBQYXNzUmVm
UHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaywgaW50IHNraXBDb3VudCwg
dW5zaWduZWQgcGFnZVNpemUpCisgICAgT3BlbkN1cnNvckNhbGxiYWNrKEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJh
Y2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiAgICAgICAgICwgbV9p
bmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKLSAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFj
ayhyZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3Zl
KHJlcXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9za2lwQ291bnQoc2tpcENvdW50KQogICAg
ICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCisgICAgICAgICwgbV9yZXN1bHQoQXJyYXk8RGF0
YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgewotICAgICAgICBtX3Jlc3VsdCA9IEFycmF5PERhdGFF
bnRyeT46OmNyZWF0ZSgpOwogICAgIH0KICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVkU2Ny
aXB0OwotICAgIFJlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsK
KyAgICBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAgaW50
IG1fc2tpcENvdW50OwogICAgIHVuc2lnbmVkIG1fcGFnZVNpemU7Ci0gICAgUmVmUHRyPEFycmF5
PERhdGFFbnRyeT4+IG1fcmVzdWx0OworICAgIFJlZjxBcnJheTxEYXRhRW50cnk+PiBtX3Jlc3Vs
dDsKIH07CiAKIGNsYXNzIERhdGFMb2FkZXIgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YUxvYWRlcj4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxs
YmFjaz4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3Jp
cHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFt
ZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVu
c2lnbmVkIHBhZ2VTaXplKQorICAgIHN0YXRpYyBSZWY8RGF0YUxvYWRlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0
cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFn
ZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFMb2FkZXIoY29u
dGV4dCwgcmVxdWVzdENhbGxiYWNrLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVOYW1lLCBp
bmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERhdGFMb2FkZXIoY29udGV4dCwgV1RGOjptb3ZlKHJlcXVlc3RD
YWxsYmFjayksIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4TmFtZSwgV1RG
Ojptb3ZlKGlkYktleVJhbmdlKSwgc2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KIAogICAg
IHZpcnR1YWwgfkRhdGFMb2FkZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2U+IHBycERhdGFiYXNlKSBvdmVycmlkZQorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlKFJlZlB0cjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBwcnBEYXRhYmFz
ZTsKLSAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS0+aXNBY3RpdmUoKSkKKyAgICAgICAg
aWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uID0gdHJhbnNhY3Rp
b25Gb3JEYXRhYmFzZShjb250ZXh0KCksIGlkYkRhdGFiYXNlLmdldCgpLCBtX29iamVjdFN0b3Jl
TmFtZSk7CisgICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24gPSB0
cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgZGF0YWJhc2UuZ2V0KCksIG1fb2JqZWN0
U3RvcmVOYW1lKTsKICAgICAgICAgaWYgKCFpZGJUcmFuc2FjdGlvbikgewogICAgICAgICAgICAg
bV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHRyYW5zYWN0aW9u
Iik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTIsNyArNTI2LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPE9wZW5DdXJzb3JD
YWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNrID0gT3BlbkN1cnNvckNhbGxiYWNrOjpjcmVhdGUo
bV9pbmplY3RlZFNjcmlwdCwgbV9yZXF1ZXN0Q2FsbGJhY2ssIG1fc2tpcENvdW50LCBtX3BhZ2VT
aXplKTsKKyAgICAgICAgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNr
ID0gT3BlbkN1cnNvckNhbGxiYWNrOjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdCwgbV9yZXF1ZXN0
Q2FsbGJhY2suY29weVJlZigpLCBtX3NraXBDb3VudCwgbV9wYWdlU2l6ZSk7CiAKICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBpZGJSZXF1
ZXN0OwpAQCAtNTIzLDIzICs1MzcsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlkYkluZGV4LT5v
cGVuQ3Vyc29yKGNvbnRleHQoKSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4obV9pZGJLZXlSYW5n
ZSksIGVjKTsKKyAgICAgICAgICAgIGlkYlJlcXVlc3QgPSBpZGJJbmRleC0+b3BlbkN1cnNvcihj
b250ZXh0KCksIG1faWRiS2V5UmFuZ2UuY29weVJlZigpLCBlYyk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlkYk9iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKGNvbnRl
eHQoKSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4obV9pZGJLZXlSYW5nZSksIGVjKTsKLSAgICAg
ICAgaWRiUmVxdWVzdC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50
LCBvcGVuQ3Vyc29yQ2FsbGJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIGlkYlJlcXVlc3QgPSBp
ZGJPYmplY3RTdG9yZS0+b3BlbkN1cnNvcihjb250ZXh0KCksIG1faWRiS2V5UmFuZ2UuY29weVJl
ZigpLCBlYyk7CisgICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLnN1Y2Nlc3NFdmVudCwgV1RGOjptb3ZlKG9wZW5DdXJzb3JDYWxsYmFjayksIGZhbHNlKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayogcmVxdWVzdENhbGxiYWNrKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KLSAgICBEYXRhTG9h
ZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBhc3NS
ZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3Rl
ZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBj
b25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFu
Z2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIHZpcnR1YWwgUmVxdWVz
dENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RD
YWxsYmFjay5nZXQoKTsgfQorICAgIERhdGFMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElE
QktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUp
CiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
KQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKICAgICAgICAg
LCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0KQogICAgICAgICAsIG1fb2JqZWN0U3Rv
cmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAgLCBtX2luZGV4TmFtZShpbmRleE5hbWUp
Ci0gICAgICAgICwgbV9pZGJLZXlSYW5nZShpZGJLZXlSYW5nZSkKKyAgICAgICAgLCBtX2lkYktl
eVJhbmdlKFdURjo6bW92ZShpZGJLZXlSYW5nZSkpCiAgICAgICAgICwgbV9za2lwQ291bnQoc2tp
cENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpIHsgfQotICAgIFJlZlB0cjxS
ZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8UmVxdWVzdERh
dGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmpl
Y3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RTdG9yZU5hbWU7CiAgICAgU3RyaW5nIG1f
aW5kZXhOYW1lOwpAQCAtNjA1LDcgKzYxOSw3IEBAIHN0YXRpYyBJREJGYWN0b3J5KiBhc3NlcnRJ
REJGYWN0b3J5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50CiAg
ICAgcmV0dXJuIGlkYkZhY3Rvcnk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6
OnJlcXVlc3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxi
YWNrPiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1
ZXN0RGF0YWJhc2VOYW1lcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
c2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVl
c3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1l
V2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjIzLDEwICs2Mzcs
MTAgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVu
dCwgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpjcmVhdGUocmVxdWVzdENhbGxiYWNrLCBkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSksIGZhbHNlKTsKKyAgICBpZGJS
ZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIEdldERh
dGFiYXNlTmFtZXNDYWxsYmFjazo6Y3JlYXRlKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSksIGZhbHNlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+IHJlcXVl
c3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFz
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5m
aW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9yU3RyaW5nLCBmcmFtZSk7CkBAIC02Mzcs
MTEgKzY1MSwxMSBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJh
c2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgIGlmICghaWRiRmFjdG9y
eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPERhdGFiYXNlTG9hZGVyPiBkYXRhYmFz
ZUxvYWRlciA9IERhdGFiYXNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQsIHJlcXVlc3RDYWxsYmFj
ayk7CisgICAgUmVmPERhdGFiYXNlTG9hZGVyPiBkYXRhYmFzZUxvYWRlciA9IERhdGFiYXNlTG9h
ZGVyOjpjcmVhdGUoZG9jdW1lbnQsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKTsKICAgICBk
YXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJl
cXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0
eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBh
Z2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pioga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJ
bmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29u
c3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQg
c2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
a2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3Jp
Z2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1
bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjU0LDIyICs2NjgsMjIgQEAgdm9pZCBJbnNw
ZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0
ZShmcmFtZSkpOwogCi0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IGtleVJh
bmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UtPmdldCgpKSA6IG51bGxwdHI7
CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IGtleVJhbmdlID8gaWRiS2V5
UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UuZ2V0KCkpIDogbnVsbHB0cjsKICAgICBpZiAoa2V5
UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRl
cmFsKCJDYW4gbm90IHBhcnNlIGtleSByYW5nZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFJlZlB0cjxEYXRhTG9hZGVyPiBkYXRhTG9hZGVyID0gRGF0YUxvYWRlcjo6Y3JlYXRl
KGRvY3VtZW50LCByZXF1ZXN0Q2FsbGJhY2ssIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5h
bWUsIGluZGV4TmFtZSwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUpOworICAgIFJl
ZjxEYXRhTG9hZGVyPiBkYXRhTG9hZGVyID0gRGF0YUxvYWRlcjo6Y3JlYXRlKGRvY3VtZW50LCBX
VEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0ZWRTY3JpcHQsIG9iamVjdFN0b3JlTmFt
ZSwgaW5kZXhOYW1lLCBXVEY6Om1vdmUoaWRiS2V5UmFuZ2UpLCBza2lwQ291bnQsIHBhZ2VTaXpl
KTsKICAgICBkYXRhTG9hZGVyLT5zdGFydChpZGJGYWN0b3J5LCBkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAogY2xhc3MgQ2xlYXJPYmplY3RTdG9yZUxpc3Rl
bmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0
b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0
U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVl
c3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xlYXJPYmpl
Y3RTdG9yZUxpc3RlbmVyKHJlcXVlc3RDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFj
aykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5DbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoKSB7
IH0KQEAgLTY5MSwzNiArNzA1LDM1IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJh
Y2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDbGVhck9iamVjdFN0b3Jl
TGlzdGVuZXIoUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxs
YmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPENsZWFyT2JqZWN0U3RvcmVD
YWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVu
dExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgLCBtX3JlcXVlc3RDYWxs
YmFjayhyZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjpt
b3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxDbGVhck9i
amVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxDbGVhck9iamVj
dFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogCiBjbGFzcyBDbGVhck9i
amVjdFN0b3JlIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUGFzc1Jl
ZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0
aWMgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3Rv
cmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENsZWFyT2JqZWN0U3RvcmUoY29udGV4dCwgb2JqZWN0U3RvcmVOYW1lLCByZXF1
ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RT
dG9yZShjb250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2sp
KSk7CiAgICAgfQogCi0gICAgQ2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUGFzc1JlZlB0cjxDbGVh
ck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0
b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0aERhdGFiYXNlKGNvbnRleHQpCiAgICAgICAgICwg
bV9vYmplY3RTdG9yZU5hbWUob2JqZWN0U3RvcmVOYW1lKQotICAgICAgICAsIG1fcmVxdWVzdENh
bGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6
Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gcHJwRGF0YWJhc2UpIG92ZXJyaWRlCisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9
IHBycERhdGFiYXNlOwotICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLT5pc0FjdGl2ZSgp
KQorICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLmlzQWN0aXZlKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24g
PSB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgaWRiRGF0YWJhc2UuZ2V0KCksIG1f
b2JqZWN0U3RvcmVOYW1lLCBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgpKTsKKyAgICAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uRm9y
RGF0YWJhc2UoY29udGV4dCgpLCBkYXRhYmFzZS5nZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUsIElE
QlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRlKCkpOwogICAgICAgICBpZiAoIWlkYlRyYW5zYWN0
aW9uKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxk
IG5vdCBnZXQgdHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTczOCwxNiAr
NzUxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kRmFp
bHVyZShTdHJpbmc6OmZvcm1hdCgiQ291bGQgbm90IGNsZWFyIG9iamVjdCBzdG9yZSAnJXMnOiAl
ZCIsIG1fb2JqZWN0U3RvcmVOYW1lLnV0ZjgoKS5kYXRhKCksIGVjKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWRiVHJhbnNhY3Rpb24tPmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6
Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrKSwgZmFsc2UpOworICAgICAgICBpZGJUcmFuc2FjdGlv
bi0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgQ2xlYXJPYmpl
Y3RTdG9yZUxpc3RlbmVyOjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSwgZmFs
c2UpOwogICAgIH0KIAotICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJh
Y2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQorICAgIHZp
cnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVy
biBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQogcHJpdmF0ZToKICAgICBjb25zdCBTdHJpbmcg
bV9vYmplY3RTdG9yZU5hbWU7Ci0gICAgUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9y
ZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpjbGVh
ck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gcmVxdWVz
dENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6Y2xlYXJPYmplY3RTdG9y
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdp
bihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9jdW1l
bnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTc1Nyw3ICs3NzAsNyBAQCB2b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgUwogICAgIGlmICghaWRiRmFjdG9yeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPENsZWFyT2JqZWN0U3RvcmU+IGNsZWFyT2JqZWN0U3RvcmUgPSBDbGVhck9iamVjdFN0
b3JlOjpjcmVhdGUoZG9jdW1lbnQsIG9iamVjdFN0b3JlTmFtZSwgcmVxdWVzdENhbGxiYWNrKTsK
KyAgICBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY2xlYXJPYmplY3RTdG9yZSA9IENsZWFyT2JqZWN0
U3RvcmU6OmNyZWF0ZShkb2N1bWVudCwgb2JqZWN0U3RvcmVOYW1lLCBXVEY6Om1vdmUocmVxdWVz
dENhbGxiYWNrKSk7CiAgICAgY2xlYXJPYmplY3RTdG9yZS0+c3RhcnQoaWRiRmFjdG9yeSwgZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKaW5kZXggOGFm
NGUxNy4uM2IwZTlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmgKQEAgLTU4LDEwICs1OCwxMCBAQCBwdWJsaWM6CiAgICAgLy8g
Q2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBQYXNzUmVmUHRyPFJlcXVlc3RE
YXRhYmFzZU5hbWVzQ2FsbGJhY2s+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dERhdGFiYXNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJh
Y2s+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGEoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
ZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1l
LCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIGtleVJhbmdlLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgaW5fc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgaW5fZGF0
YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIGluX29iamVjdFN0b3JlTmFtZSwgUGFzc1JlZlB0cjxD
bGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERh
dGFiYXNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0
YShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGluX3NlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmIGluX2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RTdG9yZU5hbWUsIFJl
ZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKaW5kZXggMzU4OWVmZi4uODM5OTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTY4OSwx
MCArNjg5LDEwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkb2N1bWVudFRocmVh
ZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudEltCiAgICAgICAgIHJlc291cmNlQWdl
bnQtPmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KGlkZW50
aWZpZXIsIGNsaWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3Qg
VVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKK3ZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFJlZlB0
cjxGb3JtRGF0YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9v
bCBpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CiAgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKLSAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbExvYWRYSFIoY2xpZW50LCBtZXRob2Qs
IHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOworICAg
ICAgICByZXNvdXJjZUFnZW50LT53aWxsTG9hZFhIUihjbGllbnQsIG1ldGhvZCwgdXJsLCBhc3lu
YywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZhaWxYSFJMb2FkaW5nSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50KiBjbGllbnQpCkBAIC05MTYsNyArOTE2LDcgQEAgc3RhdGljIGJvb2wgaXNDb25zb2xl
QXNzZXJ0TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSkKIH0K
IAogLy8gRklYTUU6IERyb3AgdGhpcyBvbmNlIHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mg
b3V0c2lkZSBvZiBJbnNwZWN0b3IuCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRk
TWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ssIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dElkZW50aWZpZXIpCiB7CiAgICAgaWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFn
ZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNh
bGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOwpAQCAtOTI3LDcgKzkyNyw3IEBAIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0CiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVz
c2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBs
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0
cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVu
dGlmaWVyKQogewogICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+
YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzdGF0ZSwg
YXJndW1lbnRzLCByZXF1ZXN0SWRlbnRpZmllcik7CkBAIC05NDksNyArOTQ5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3QKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+
IGFyZ3VtZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAgICAg
aWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53
ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5jb3VudChzdGF0ZSwgYXJn
dW1lbnRzKTsKQEAgLTk2Myw3ICs5NjMsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cgogICAg
ICAgICBjb25zb2xlQWdlbnQtPnN0YXJ0VGltaW5nKHRpdGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0
bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFjaykKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmIHN0YWNrKQogewogICAgIGlmIChXZWJDb25zb2xlQWdl
bnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkp
CiAgICAgICAgIGNvbnNvbGVBZ2VudC0+c3RvcFRpbWluZyh0aXRsZSwgc3RhY2spOwpAQCAtOTcx
LDcgKzk3MSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRp
bWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1CiAgICAgICAgIHRpbWVsaW5lQWdl
bnQtPnRpbWVFbmQoZnJhbWUsIHRpdGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1w
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJh
bWUsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewogICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7CkBAIC05
ODYsNyArOTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJvZmls
aW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW4KICAgICAgICAgdGltZWxpbmVB
Z2VudC0+c3RhcnRGcm9tQ29uc29sZShleGVjLCB0aXRsZSk7CiB9CiAKLVBhc3NSZWZQdHI8SlND
OjpQcm9maWxlPiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmdJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQorUmVmUHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0
aXRsZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkK
ICAgICAgICAgcmV0dXJuIHRpbWVsaW5lQWdlbnQtPnN0b3BGcm9tQ29uc29sZShleGVjLCB0aXRs
ZSk7CkBAIC05OTQsNyArOTk0LDcgQEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZ0ltcGwoSW5zdHJ1bWVudGkKIH0KIAogI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
T3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPERhdGFiYXNlPiYmIGRhdGFiYXNlLCBjb25zdCBT
dHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
CiB7CiAgICAgaWYgKCFpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckVudmlyb25tZW50KCku
ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTA3LDQwICsx
MTA3LDQwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTZW5kV2ViU29ja2V0
RnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluCiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
RUJfUkVQTEFZKQotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRy
PFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2Vzc2lvbkNyZWF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAgICAgaWYgKEluc3BlY3Rv
clJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
UmVwbGF5QWdlbnQoKSkKLSAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25DcmVhdGVkKHNlc3Np
b24pOworICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbkNyZWF0ZWQoV1RGOjptb3ZlKHNlc3Np
b24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Mb2FkZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZXNzaW9uTG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewogICAgIGlmIChJbnNwZWN0b3JS
ZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJl
cGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTG9hZGVkKHNlc3Npb24p
OworICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbkxvYWRlZChXVEY6Om1vdmUoc2Vzc2lvbikp
OwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJl
cGxheVNlc3Npb24+IHNlc3Npb24pCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vz
c2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewogICAgIGlmIChJbnNwZWN0b3JS
ZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJl
cGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTW9kaWZpZWQoc2Vzc2lv
bik7CisgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTW9kaWZpZWQoV1RGOjptb3ZlKHNlc3Np
b24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRy
PFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKIHsKICAg
ICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVu
dENyZWF0ZWQoc2VnbWVudCk7CisgICAgICAgIHJlcGxheUFnZW50LT5zZWdtZW50Q3JlYXRlZChX
VEY6Om1vdmUoc2VnbWVudCkpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+
JiYgc2VnbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAgICAgICBy
ZXBsYXlBZ2VudC0+c2VnbWVudENvbXBsZXRlZChzZWdtZW50KTsKKyAgICAgICAgcmVwbGF5QWdl
bnQtPnNlZ21lbnRDb21wbGV0ZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+
IHNlZ21lbnQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxh
eVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7CiAgICAgaWYgKEluc3BlY3RvclJlcGxheUFn
ZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdl
bnQoKSkKLSAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRMb2FkZWQoc2VnbWVudCk7CisgICAg
ICAgIHJlcGxheUFnZW50LT5zZWdtZW50TG9hZGVkKFdURjo6bW92ZShzZWdtZW50KSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50VW5sb2FkZWRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggZDdjYWE1OS4u
MzIyMTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaApAQCAtMTg2LDcgKzE4Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICBzdGF0aWMgdm9pZCBkaWRG
YWlsTG9hZGluZyhGcmFtZSosIERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgc3RhdGljIHZvaWQgZG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQoRG9jdW1lbnQmLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqKTsKLSAgICBzdGF0aWMgdm9p
ZCB3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGJvb2wsIFBhc3NSZWZQdHI8Rm9ybURh
dGE+LCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgd2lsbExv
YWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBib29sLCBSZWZQdHI8Rm9ybURhdGE+JiYsIGNvbnN0
IEhUVFBIZWFkZXJNYXAmLCBib29sKTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsWEhSTG9hZGlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwogICAg
IHN0YXRpYyB2b2lkIGRpZEZpbmlzaFhIUkxvYWRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBz
ZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlciwgdW5zaWduZWQgc2VuZENvbHVtbk51bWJl
cik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVhIUlJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpAQCAtMjEzLDE4ICsyMTMsMTgg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpZFdyaXRlSFRNTChjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmLCB1bnNpZ25lZCBlbmRMaW5lKTsKIAogICAgIC8vIEZJWE1F
OiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJhdGUgc3RhY2tzIG91dHNpZGUgb2YgSW5z
cGVjdG9yLgotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYsIE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25z
b2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsK
KyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBNZXNzYWdlU291cmNl
LCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYs
IE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVu
dHM+JiYsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKICAgICBzdGF0aWMg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpF
eGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDAp
OwogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdG8gU2NyaXB0QXJndW1lbnRzIHRvIG1hdGNoIG5v
bi13b3JrZXIgY29udGV4dC4KLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdv
cmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHN0YXRp
YyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291
cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllciA9IDApOwogICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29y
a2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVs
bHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogCi0gICAgc3RhdGlj
IHZvaWQgY29uc29sZUNvdW50KFBhZ2UmLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnQo
UGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
PiYmKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNvbGVUaW1pbmcoRnJhbWUmLCBjb25zdCBT
dHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYs
IGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s+KTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wKEZyYW1lJiwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOworICAgIHN0YXRpYyB2b2lkIHN0b3BDb25z
b2xlVGltaW5nKEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0Q2FsbFN0YWNrPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wKEZy
YW1lJiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKIAogICAgIHN0YXRp
YyB2b2lkIGRpZFJlcXVlc3RBbmltYXRpb25GcmFtZShEb2N1bWVudCosIGludCBjYWxsYmFja0lk
KTsKICAgICBzdGF0aWMgdm9pZCBkaWRDYW5jZWxBbmltYXRpb25GcmFtZShEb2N1bWVudCosIGlu
dCBjYWxsYmFja0lkKTsKQEAgLTIzMiwxMCArMjMyLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBkaWRGaXJlQW5pbWF0aW9uRnJhbWUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBzdGFydFByb2ZpbGluZyhQYWdlJiwgSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxK
U0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmcoUGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSk7CisgICAgc3RhdGljIFJlZlB0cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9m
aWxpbmcoUGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAKICNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHN0YXRpYyB2b2lkIGRpZE9wZW5EYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBS
ZWZQdHI8RGF0YWJhc2U+JiYsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5kaWYKIAogICAgIHN0YXRpYyB2b2lkIGRp
ZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlP
cmlnaW4qLCBQYWdlKik7CkBAIC0yNDYsMTMgKzI0NiwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgd2lsbEV2YWx1YXRlV29ya2VyU2NyaXB0KFdvcmtlckdsb2JhbFNjb3BlKiwgaW50IHdv
cmtlclRocmVhZFN0YXJ0TW9kZSk7CiAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBzdGF0
aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7
Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlT
ZXNzaW9uPik7Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkKFBhZ2UmLCBQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb24+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdl
JiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2Fk
ZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZXNz
aW9uTW9kaWZpZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKIAotICAgIHN0YXRp
YyB2b2lkIHNlZ21lbnRDcmVhdGVkKFBhZ2UmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50Pik7Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudENvbXBsZXRlZChQYWdlJiwgUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOwotICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRMb2FkZWQo
UGFnZSYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICBzdGF0aWMgdm9p
ZCBzZWdtZW50Q3JlYXRlZChQYWdlJiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsK
KyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q29tcGxldGVkKFBhZ2UmLCBSZWZQdHI8UmVwbGF5U2Vz
c2lvblNlZ21lbnQ+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRMb2FkZWQoUGFnZSYsIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJik7CiAgICAgc3RhdGljIHZvaWQgc2VnbWVudFVu
bG9hZGVkKFBhZ2UmKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhcHR1cmVTdGFydGVkKFBhZ2UmKTsK
QEAgLTM4Niw3ICszODYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExv
YWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IERvY3VtZW50TG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpOwogICAgIHN0YXRpYyB2b2lkIGRp
ZEZhaWxMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICBzdGF0
aWMgdm9pZCBkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCopOwotICAgIHN0YXRpYyB2b2lkIHdpbGxMb2FkWEhSSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFVSTCYsIGJvb2wsIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBIVFRQSGVhZGVy
TWFwJiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgd2lsbExvYWRYSFJJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
VVJMJiwgYm9vbCwgUmVmUHRyPEZvcm1EYXRhPiYmLCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9v
bCk7CiAgICAgc3RhdGljIHZvaWQgZGlkRmFpbFhIUkxvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkRmlu
aXNoWEhSTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFRocmVhZGFibGVMb2FkZXJD
bGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBz
ZW5kTGluZU51bWJlciwgdW5zaWduZWQgc2VuZENvbHVtbk51bWJlcik7CiAgICAgc3RhdGljIHZv
aWQgZGlkUmVjZWl2ZVhIUlJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTQxMiwxNiArNDEyLDE2IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsV3JpdGVIVE1MSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgc3RhcnRMaW5lLCBGcmFtZSopOwogICAgIHN0
YXRpYyB2b2lkIGRpZFdyaXRlSFRNTEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJiwgdW5zaWduZWQgZW5kTGluZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdl
VG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+LCB1bnNpZ25lZCBsb25n
IHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllcik7CiAgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNl
IHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3IuCi0gICAg
c3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYs
IE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVk
IGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0Nv
bnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CiAK
LSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBK
U0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsK
KyAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBK
U0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CiAg
ICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29u
c29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pOwotICAgIHN0
YXRpYyB2b2lkIGNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFt
ZSYsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMg
dm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYm
KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiwgRnJhbWUmLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwogCiAg
ICAgc3RhdGljIHZvaWQgZGlkUmVxdWVzdEFuaW1hdGlvbkZyYW1lSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiwgaW50IGNhbGxiYWNrSWQsIEZyYW1lKik7CiAgICAgc3RhdGljIHZvaWQgZGlkQ2Fu
Y2VsQW5pbWF0aW9uRnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBpbnQgY2FsbGJhY2tJ
ZCwgRnJhbWUqKTsKQEAgLTQyOSwxMCArNDI5LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgZGlkRmlyZUFuaW1hdGlvbkZyYW1lSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUmKTsKIAogICAgIHN0YXRpYyB2b2lkIHN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmdJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwor
ICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpQcm9maWxlPiBzdG9wUHJvZmlsaW5nSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0
cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7
CisgICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogI2VuZGlmCiAKICAgICBzdGF0aWMgdm9p
ZCBkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CkBAIC00NDIsMTMg
KzQ0MiwxMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlVGVy
bWluYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFdvcmtlckdsb2JhbFNjb3BlUHJveHkq
KTsKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVh
dGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7
Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYs
IFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOwotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Nb2Rp
ZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4p
OworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2Fk
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJik7Cisg
ICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwg
UmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOwogCi0gICAgc3RhdGljIHZvaWQgc2VnbWVudENyZWF0
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50Pik7Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKLSAgICBzdGF0aWMg
dm9pZCBzZWdtZW50TG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDcmVhdGVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsK
KyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q29tcGxldGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZWdt
ZW50TG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiYmKTsKICAgICBzdGF0aWMgdm9pZCBzZWdtZW50VW5sb2FkZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhcHR1cmVTdGFydGVkSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJik7CkBAIC0xMzg2LDExICsxMzg2LDExIEBAIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExv
YWRpbmdGb3JDCiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwm
IHVybCwgYm9vbCBhc3luYywgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQoraW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1EYXRh
PiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVD
cmVkZW50aWFscykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dCkpCi0gICAgICAgIHdpbGxMb2FkWEhSSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgY2xpZW50LCBtZXRob2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNs
dWRlQ3JlZGVudGlhbHMpOworICAgICAgICB3aWxsTG9hZFhIUkltcGwoKmluc3RydW1lbnRpbmdB
Z2VudHMsIGNsaWVudCwgbWV0aG9kLCB1cmwsIGFzeW5jLCBXVEY6Om1vdmUoZm9ybURhdGEpLCBo
ZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGNsaWVudCk7CkBAIC0xNzk2LDcyICsxNzk2LDcyIEBA
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZy
YW1lKERvY3VtZW50KiBkb2N1bWVudCwKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
Ci1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVkKFBh
Z2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK2lubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkNyZWF0ZWQoUGFnZSYgcGFnZSwgUmVm
UHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UocGFnZSkpCi0gICAgICAgIHNlc3Npb25DcmVhdGVkSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgc2Vzc2lvbik7CisgICAgICAgIHNlc3Npb25DcmVhdGVkSW1wbCgqaW5zdHJ1bWVudGlu
Z0FnZW50cywgV1RGOjptb3ZlKHNlc3Npb24pKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBh
Z2UpOwogICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Mb2FkZWQoUGFnZSYgcGFnZSwgUGFz
c1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNz
aW9uPiYmIHNlc3Npb24pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQot
ICAgICAgICBzZXNzaW9uTG9hZGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc2Vzc2lvbik7
CisgICAgICAgIHNlc3Npb25Mb2FkZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1v
dmUoc2Vzc2lvbikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNlc3Npb24pOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKFBhZ2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5
U2Vzc2lvbj4gc2Vzc2lvbikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2Vzc2lvbk1vZGlmaWVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Np
b24pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBzZXNz
aW9uTW9kaWZpZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZXNzaW9uKTsKKyAgICAgICAg
c2Vzc2lvbk1vZGlmaWVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjptb3ZlKHNlc3Np
b24pKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShz
ZXNzaW9uKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnNlZ21lbnRDcmVhdGVkKFBhZ2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNl
Z21lbnQ+IHNlZ21lbnQpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
Z21lbnRDcmVhdGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBz
ZWdtZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAg
c2VnbWVudENyZWF0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZWdtZW50KTsKKyAgICAg
ICAgc2VnbWVudENyZWF0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1vdmUoc2Vn
bWVudCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHNlZ21lbnQpOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6c2VnbWVudENvbXBsZXRlZChQYWdlJiBwYWdlLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Np
b25TZWdtZW50PiBzZWdtZW50KQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpzZWdtZW50Q29tcGxldGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVu
dD4mJiBzZWdtZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAg
ICAgICAgc2VnbWVudENvbXBsZXRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNlZ21lbnQp
OworICAgICAgICBzZWdtZW50Q29tcGxldGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RG
Ojptb3ZlKHNlZ21lbnQpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVO
VVNFRF9QQVJBTShzZWdtZW50KTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWQoUGFnZSYgcGFnZSwgUGFzc1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c2VnbWVudExvYWRlZChQYWdlJiBwYWdlLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNl
Z21lbnQ+JiYgc2VnbWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEZBU1RfUkVU
VVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkp
Ci0gICAgICAgIHNlZ21lbnRMb2FkZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZWdtZW50
KTsKKyAgICAgICAgc2VnbWVudExvYWRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIFdURjo6
bW92ZShzZWdtZW50KSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVT
RURfUEFSQU0oc2VnbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCA2Y2IyMTI0Li40NTU1ZGIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5j
cHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRo
ZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5nJgogICAgICAgICBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5kZXJM
YXllciwgbGF5ZXJzKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXll
cihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK1Jl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
bmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
JnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2lu
ZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0xNjYsMTMgKzE2NiwxNCBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpidWlsZAogICAgICAgICBub2RlID0gcmVuZGVyZXItPnBhcmVudCgpLT5lbGVt
ZW50KCk7CiAKICAgICAvLyBCYXNpYyBzZXQgb2YgcHJvcGVydGllcy4KLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gbGF5ZXJPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQorICAgIGF1dG8gbGF5ZXJP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0TGF5ZXJJZChiaW5kKHJlbmRlckxheWVyKSkKICAgICAgICAgLnNldE5vZGVJ
ZChpZEZvck5vZGUoZXJyb3JTdHJpbmcsIG5vZGUpKQogICAgICAgICAuc2V0Qm91bmRzKGJ1aWxk
T2JqZWN0Rm9ySW50UmVjdChyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpCiAg
ICAgICAgIC5zZXRNZW1vcnkoYmFja2luZy0+YmFja2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUoKSkK
ICAgICAgICAgLnNldENvbXBvc2l0ZWRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QoYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpKSkpCi0gICAgICAgIC5zZXRQ
YWludENvdW50KGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+cmVwYWludENvdW50KCkpOworICAg
ICAgICAuc2V0UGFpbnRDb3VudChiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnJlcGFpbnRDb3Vu
dCgpKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+c2hhZG93
SG9zdCgpKQogICAgICAgICBsYXllck9iamVjdC0+c2V0SXNJblNoYWRvd1RyZWUodHJ1ZSk7CkBA
IC0yMDEsNyArMjAyLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGQKICAgICAgICAgICAgIGxh
eWVyT2JqZWN0LT5zZXRQc2V1ZG9FbGVtZW50KCJmaXJzdC1saW5lIik7CiAgICAgfQogCi0gICAg
cmV0dXJuIGxheWVyT2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUobGF5ZXJPYmplY3QpOwog
fQogCiBpbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCkBAIC0yMTgsMTYgKzIxOSwxNyBAQCBpbnQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5v
ZGUqIG5vZGUpCiAgICAgcmV0dXJuIG5vZGVJZDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpi
dWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK1JlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpi
dWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0OjpjcmVhdGUoKQogICAgICAg
ICAuc2V0WChyZWN0LngoKSkKICAgICAgICAgLnNldFkocmVjdC55KCkpCiAgICAgICAgIC5zZXRX
aWR0aChyZWN0LndpZHRoKCkpCi0gICAgICAgIC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSkucmVs
ZWFzZSgpOworICAgICAgICAuc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIC5yZWxl
YXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21w
b3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBsYXll
cklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1Jl
YXNvbnM+JiBjb21wb3NpdGluZ1JlYXNvbnMpCit2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYgY29tcG9zaXRpbmdSZWFzb25zUmVzdWx0KQogewogICAg
IGNvbnN0IFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklk
KTsKIApAQCAtMjM3LDcgKzIzOSw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJl
YXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgfQog
CiAgICAgQ29tcG9zaXRpbmdSZWFzb25zIHJlYXNvbnNCaXRtYXNrID0gcmVuZGVyTGF5ZXItPmNv
bXBvc2l0b3IoKS5yZWFzb25zRm9yQ29tcG9zaXRpbmcoKnJlbmRlckxheWVyKTsKLSAgICBjb21w
b3NpdGluZ1JlYXNvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0
aW5nUmVhc29uczo6Y3JlYXRlKCk7CisgICAgYXV0byBjb21wb3NpdGluZ1JlYXNvbnMgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29uczo6Y3JlYXRlKCku
cmVsZWFzZSgpOwogCiAgICAgaWYgKHJlYXNvbnNCaXRtYXNrICYgQ29tcG9zaXRpbmdSZWFzb24z
RFRyYW5zZm9ybSkKICAgICAgICAgY29tcG9zaXRpbmdSZWFzb25zLT5zZXRUcmFuc2Zvcm0zRCh0
cnVlKTsKQEAgLTMxMCw2ICszMTIsOCBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpy
ZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogCiAgICAg
aWYgKHJlYXNvbnNCaXRtYXNrICYgQ29tcG9zaXRpbmdSZWFzb25Sb290KQogICAgICAgICBjb21w
b3NpdGluZ1JlYXNvbnMtPnNldFJvb3QodHJ1ZSk7CisgICAgCisgICAgY29tcG9zaXRpbmdSZWFz
b25zUmVzdWx0ID0gV1RGOjptb3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CiB9CiAKIFN0cmluZyBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5o
CmluZGV4IDY2MzM5MzIuLjI3NGUyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC03NSw4ICs3NSw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0
cmluZyYsIFJlbmRlck9iamVjdCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mKTsKICAgICB2b2lkIGdhdGhl
ckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXll
ciosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpMYXllclRyZWU6OkxheWVyPj4mKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYs
IFJlbmRlckxheWVyKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0Jik7Cisg
ICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0
Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciopOworICAgIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25z
dCBJbnRSZWN0Jik7CiAKICAgICBpbnQgaWRGb3JOb2RlKEVycm9yU3RyaW5nJiwgTm9kZSopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXgg
Yzg0NzQ1Yy4uMjk0YzA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmNwcApAQCAtMzMxLDUwICszMzEsNTAgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5
Ojp1cGRhdGUoKQogICAgIGZvcmNlUGFpbnQoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG9iamVjdC0+c2V0RG91Ymxl
KEFTQ0lJTGl0ZXJhbCgieCIpLCBwb2ludC54KCkpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgieSIpLCBwb2ludC55KCkpOwotICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgp
OworICAgIHJldHVybiBXVEY6Om1vdmUob2JqZWN0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgieCIpLCByZWN0LngoKSk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJ5IiksIHJlY3QueSgpKTsKICAgICBvYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVy
YWwoIndpZHRoIiksIHJlY3Qud2lkdGgoKSk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJoZWlnaHQiKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIG9iamVjdC5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShvYmplY3QpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclF1YWQoY29uc3QgRmxvYXRRdWFkJiBx
dWFkKQorc3RhdGljIFJlZjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclF1YWQoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBhcnJheSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9i
amVjdEZvclBvaW50KHF1YWQucDEoKSkpOwogICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2Jq
ZWN0Rm9yUG9pbnQocXVhZC5wMigpKSk7CiAgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmpl
Y3RGb3JQb2ludChxdWFkLnAzKCkpKTsKICAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVj
dEZvclBvaW50KHF1YWQucDQoKSkpOwotICAgIHJldHVybiBhcnJheS5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIFdURjo6bW92ZShhcnJheSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQoY29uc3QgSGlnaGxpZ2h0JiBoaWdobGln
aHQpCitzdGF0aWMgUmVmPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQo
Y29uc3QgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5zaXplKCk7ICsraSkKICAgICAg
ICAgYXJyYXktPnB1c2hBcnJheShidWlsZEFycmF5Rm9yUXVhZChoaWdobGlnaHQucXVhZHNbaV0p
KTsKLSAgICBvYmplY3QtPnNldEFycmF5KCJxdWFkcyIsIGFycmF5LnJlbGVhc2UoKSk7CisgICAg
b2JqZWN0LT5zZXRBcnJheSgicXVhZHMiLCBXVEY6Om1vdmUoYXJyYXkpKTsKICAgICBvYmplY3Qt
PnNldFN0cmluZygiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvci5zZXJpYWxp
emVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGln
aGxpZ2h0LmNvbnRlbnRPdXRsaW5lQ29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBvYmplY3QtPnNl
dFN0cmluZygicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvci5zZXJpYWxpemVk
KCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodC5ib3Jk
ZXJDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJtYXJnaW5Db2xv
ciIsIGhpZ2hsaWdodC5tYXJnaW5Db2xvci5zZXJpYWxpemVkKCkpOwotICAgIHJldHVybiBvYmpl
Y3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUob2JqZWN0KTsKIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdo
dChGcmFtZVZpZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK3N0YXRpYyBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodChGcmFtZVZp
ZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKIHsKICAgICBGcmFtZVZpZXcqIGNv
bnRhaW5pbmdWaWV3ID0gcmVnaW9uLT5mcmFtZSgpLnZpZXcoKTsKICAgICBpZiAoIWNvbnRhaW5p
bmdWaWV3KQpAQCAtNDA2LDIwICs0MDYsMjAgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodChGcmFtZVZpZXcqIG1haW4KICAg
ICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBpbmNvbWluZ1Jl
Y3RRdWFkKTsKICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3
LCBvdXRnb2luZ1JlY3RRdWFkKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lv
bk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKIAogICAgIHJl
Z2lvbk9iamVjdC0+c2V0QXJyYXkoImJvcmRlclF1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChib3Jk
ZXJSZWN0UXVhZCkpOwogICAgIHJlZ2lvbk9iamVjdC0+c2V0QXJyYXkoImluY29taW5nUXVhZCIs
IGJ1aWxkQXJyYXlGb3JRdWFkKGluY29taW5nUmVjdFF1YWQpKTsKICAgICByZWdpb25PYmplY3Qt
PnNldEFycmF5KCJvdXRnb2luZ1F1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChvdXRnb2luZ1JlY3RR
dWFkKSk7CiAKLSAgICByZXR1cm4gcmVnaW9uT2JqZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGOjptb3ZlKHJlZ2lvbk9iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQoUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCitzdGF0aWMgUmVmPEluc3BlY3Rv
ckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQoUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiB7CiAgICAgRnJhbWVWaWV3KiBt
YWluRnJhbWVWaWV3ID0gcmVnaW9uLT5kb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpOwogCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogCiAgICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCA9
IGZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsKICAgICBmb3IgKGF1dG8mIGl0ZXJSZWdp
b24gOiByZWdpb25MaXN0KSB7CkBAIC00MzUsMTggKzQzNSwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KFJlbmRl
clJlZ2lvbgogICAgICAgICBhcnJheS0+cHVzaE9iamVjdChyZWdpb25IaWdobGlnaHRPYmplY3Qu
cmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gYXJyYXkucmVsZWFzZSgpOworICAgIHJl
dHVybiBXVEY6Om1vdmUoYXJyYXkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorc3RhdGljIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNldEludGVnZXIoIndpZHRoIiwgc2l6ZS53
aWR0aCgpKTsKICAgICByZXN1bHQtPnNldEludGVnZXIoImhlaWdodCIsIHNpemUuaGVpZ2h0KCkp
OwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVz
dWx0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvckNTU1JlZ2lvbkNvbnRlbnRDbGlwKFJlbmRlclJlZ2lvbiogcmVnaW9uKQorc3RhdGljIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAo
UmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IHJl
Z2lvbi0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghY29udGFpbmluZ0ZyYW1lKQpAQCAt
NDY2LDkgKzQ2Niw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRP
YmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChSZW5kZXJSZWdpCiAgICAgRmxvYXRRdWFkIGNs
aXBRdWFkID0gcmVnaW9uLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChmbGlwcGVkUmVn
aW9uUmVjdCkpOwogICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1Zp
ZXcsIGNsaXBRdWFkKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lvbk9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZWdpb25PYmpl
Y3QtPnNldEFycmF5KCJxdWFkIiwgYnVpbGRBcnJheUZvclF1YWQoY2xpcFF1YWQpKTsKLSAgICBy
ZXR1cm4gcmVnaW9uT2JqZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlZ2lv
bk9iamVjdCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvd2luZ1BhaW50UmVj
dHMoYm9vbCBzaG93aW5nUGFpbnRSZWN0cykKQEAgLTUyNiwxMSArNTI2LDExIEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6dXBkYXRlUGFpbnRSZWN0c1RpbWVyRmlyZWQoKQogCiB2b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OmRyYXdQYWludFJlY3RzKCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGZyYWdtZW50c0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJ
bnNwZWN0b3JBcnJheT4gZnJhZ21lbnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogbV9wYWludFJlY3RzKQogICAgICAgICBmcmFn
bWVudHNBcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclJlY3QocGFpci5zZWNvbmQpKTsK
IAotICAgIGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJTGl0ZXJhbCgidXBkYXRlUGFpbnRSZWN0cyIp
LCBmcmFnbWVudHNBcnJheS5yZWxlYXNlKCkpOworICAgIGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJ
TGl0ZXJhbCgidXBkYXRlUGFpbnRSZWN0cyIpLCBXVEY6Om1vdmUoZnJhZ21lbnRzQXJyYXkpKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3V0dGVyKCkKQEAgLTUzOCw5ICs1Mzgs
OSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHdXR0ZXIoKQogICAgIGV2YWx1YXRlSW5P
dmVybGF5KEFTQ0lJTGl0ZXJhbCgiZHJhd0d1dHRlciIpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9yUmVuZGVyZXJGcmFnbWVudHMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBjb25maWcpCitzdGF0aWMg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvclJlbmRlcmVyRnJhZ21lbnRzKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgY29uZmlnKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZnJhZ21lbnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBmcmFnbWVudHNBcnJheSA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGNvbnRhaW5p
bmdGbG93VGhyZWFkID0gcmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAg
ICBpZiAoIWNvbnRhaW5pbmdGbG93VGhyZWFkKSB7CkBAIC01NjIsMTggKzU2MiwxOCBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JSZW5kZXJlckZyYWdt
ZW50cyhSZW5kZXJPYmplY3QqCiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgaGlnaGxp
Z2h0IG9mIHRoZSBmcmFnbWVudCBpbnNpZGUgdGhlIGN1cnJlbnQgcmVnaW9uLgogICAgICAgICAg
ICAgICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CiAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJl
ckhpZ2hsaWdodChyZW5kZXJlciwgcmVnaW9uLCBjb25maWcsICZoaWdobGlnaHQsIEluc3BlY3Rv
ck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXcpOwotICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGZyYWdtZW50T2JqZWN0ID0gYnVpbGRPYmplY3RGb3JIaWdobGln
aHQoaGlnaGxpZ2h0KTsKKyAgICAgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBmcmFn
bWVudE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CiAKICAgICAg
ICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjbGlwcGluZyBhcmVhIG9mIHRoZSByZWdpb24uCiAg
ICAgICAgICAgICAgICAgZnJhZ21lbnRPYmplY3QtPnNldE9iamVjdCgicmVnaW9uIiwgYnVpbGRP
YmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChyZWdpb24pKTsKLSAgICAgICAgICAgICAgICBm
cmFnbWVudHNBcnJheS0+cHVzaE9iamVjdChmcmFnbWVudE9iamVjdC5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgICAgIGZyYWdtZW50c0FycmF5LT5wdXNoT2JqZWN0KFdURjo6bW92ZShmcmFnbWVu
dE9iamVjdCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRS
ZWdpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gZnJhZ21lbnRzQXJyYXkucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZnJh
Z21lbnRzQXJyYXkpOwogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCkBAIC02MzMsMTMgKzYz
MywxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRQYXRoU2VnbWVudCh2b2lkKiBpbmZvLCBjb25zdCBQ
YXRoRWxlbWVudCogcGF0aEVsZW1lbnQpCiAgICAgfQogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2hhcGVPdXRzaWRlKEZyYW1lKiBjb250YWlu
aW5nRnJhbWUsIFJlbmRlckJveCogcmVuZGVyZXIpCitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUoRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSwg
UmVuZGVyQm94KiByZW5kZXJlcikKIHsKICAgICBjb25zdCBTaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGVJbmZvID0gcmVuZGVyZXItPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoIXNo
YXBlT3V0c2lkZUluZm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc2hhcGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBMYXlvdXRSZWN0IHNoYXBlQm91bmRzID0gc2hhcGVPdXRzaWRlSW5mby0+
Y29tcHV0ZWRTaGFwZVBoeXNpY2FsQm91bmRpbmdCb3goKTsKICAgICBGbG9hdFF1YWQgc2hhcGVR
dWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHNoYXBlQm91bmRz
KSk7CiAgICAgY29udGVudHNRdWFkVG9QYWdlKGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWlu
RnJhbWUoKS52aWV3KCksIGNvbnRhaW5pbmdGcmFtZS0+dmlldygpLCBzaGFwZVF1YWQpOwpAQCAt
NjQ5LDM5ICs2NDksMzkgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvclNoYXBlT3V0c2lkZShGcmFtZSogY29udGFpbmluZ0YKICAgICBzaGFwZU91dHNp
ZGVJbmZvLT5jb21wdXRlZFNoYXBlKCkuYnVpbGREaXNwbGF5UGF0aHMocGF0aHMpOwogCiAgICAg
aWYgKHBhdGhzLnNoYXBlLmxlbmd0aCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5z
cGVjdG9yQXJyYXk+IHNoYXBlUGF0aCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICAgUGF0aEFwcGx5SW5mbyBpbmZvOwogICAgICAgICBpbmZvLnJvb3RWaWV3ID0gY29udGFpbmlu
Z0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKICAgICAgICAgaW5mby52aWV3ID0g
Y29udGFpbmluZ0ZyYW1lLT52aWV3KCk7Ci0gICAgICAgIGluZm8uYXJyYXkgPSBzaGFwZVBhdGgu
Z2V0KCk7CisgICAgICAgIGluZm8uYXJyYXkgPSAmc2hhcGVQYXRoLmdldCgpOwogICAgICAgICBp
bmZvLnJlbmRlcmVyID0gcmVuZGVyZXI7CiAgICAgICAgIGluZm8uc2hhcGVPdXRzaWRlSW5mbyA9
IHNoYXBlT3V0c2lkZUluZm87CiAKICAgICAgICAgcGF0aHMuc2hhcGUuYXBwbHkoJmluZm8sICZh
cHBlbmRQYXRoU2VnbWVudCk7CiAKLSAgICAgICAgc2hhcGVPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgic2hhcGUiKSwgc2hhcGVQYXRoLnJlbGVhc2UoKSk7CisgICAgICAgIHNoYXBlT2Jq
ZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoInNoYXBlIiksIHNoYXBlUGF0aC5jb3B5UmVmKCkp
OwogCiAgICAgICAgIGlmIChwYXRocy5tYXJnaW5TaGFwZS5sZW5ndGgoKSkgewogICAgICAgICAg
ICAgc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgaW5m
by5hcnJheSA9IHNoYXBlUGF0aC5nZXQoKTsKKyAgICAgICAgICAgIGluZm8uYXJyYXkgPSAmc2hh
cGVQYXRoLmdldCgpOwogCiAgICAgICAgICAgICBwYXRocy5tYXJnaW5TaGFwZS5hcHBseSgmaW5m
bywgJmFwcGVuZFBhdGhTZWdtZW50KTsKIAotICAgICAgICAgICAgc2hhcGVPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgibWFyZ2luU2hhcGUiKSwgc2hhcGVQYXRoLnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICBzaGFwZU9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJtYXJnaW5TaGFw
ZSIpLCBzaGFwZVBhdGguY29weVJlZigpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBzaGFwZU9iamVjdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShzaGFwZU9iamVj
dCk7CiB9CiAjZW5kaWYKIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUpCitzdGF0aWMgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogewogICAgIEFT
U0VSVChub2RlKTsKICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSB8fCAhbm9kZS0+ZG9jdW1l
bnQoKS5mcmFtZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
OwogICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc1hIVE1MRG9jdW1lbnQo
KTsKQEAgLTc0NiwxMCArNzQ2LDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogICAgICAgICAgICAgZWxl
bWVudEluZm8tPnNldFN0cmluZygicm9sZSIsIGF4T2JqZWN0LT5jb21wdXRlZFJvbGVTdHJpbmco
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGVsZW1lbnRJbmZvLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKGVsZW1lbnRJbmZvKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29u
c3QKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0
Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NjMsNyArNzYzLDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0
ZWROb2RlKCkgY28KICAgICBpZiAoIWhpZ2hsaWdodEZyYWdtZW50cykKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaWdobGlnaHRPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGhp
Z2hsaWdodE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAKICAgICAvLyBUaGUg
bWFpbiB2aWV3J3Mgc2Nyb2xsIG9mZnNldCBpcyBzaGFyZWQgYWNyb3NzIGFsbCBxdWFkcy4KICAg
ICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKTsKQEAgLTc3
Nyw3ICs3NzcsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT3Zlcmxh
eTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjbwogICAgICAgICAgICAgaGlnaGxp
Z2h0T2JqZWN0LT5zZXRPYmplY3QoImVsZW1lbnRJbmZvIiwgZWxlbWVudEluZm8ucmVsZWFzZSgp
KTsKICAgICB9CiAgICAgICAgIAotICAgIHJldHVybiBoaWdobGlnaHRPYmplY3QucmVsZWFzZSgp
OworICAgIHJldHVybiBXVEY6Om1vdmUoaGlnaGxpZ2h0T2JqZWN0KTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCgpCkBAIC04NTksMzMgKzg1OSwzMyBAQCB2
b2lkIEluc3BlY3Rvck92ZXJsYXk6OmZvcmNlUGFpbnQoKQogCiB2b2lkIEluc3BlY3Rvck92ZXJs
YXk6OnJlc2V0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgZnJh
bWVWaWV3RnVsbFNpemUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzZXREYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNldERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc2V0RGF0YS0+c2V0
RG91YmxlKCJkZXZpY2VTY2FsZUZhY3RvciIsIG1fcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
ICAgICByZXNldERhdGEtPnNldE9iamVjdCgidmlld3BvcnRTaXplIiwgYnVpbGRPYmplY3RGb3JT
aXplKHZpZXdwb3J0U2l6ZSkpOwogICAgIHJlc2V0RGF0YS0+c2V0T2JqZWN0KCJmcmFtZVZpZXdG
dWxsU2l6ZSIsIGJ1aWxkT2JqZWN0Rm9yU2l6ZShmcmFtZVZpZXdGdWxsU2l6ZSkpOwotICAgIGV2
YWx1YXRlSW5PdmVybGF5KCJyZXNldCIsIHJlc2V0RGF0YS5yZWxlYXNlKCkpOworICAgIGV2YWx1
YXRlSW5PdmVybGF5KCJyZXNldCIsIFdURjo6bW92ZShyZXNldERhdGEpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKICAgICBvdmVy
bGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2Rl
KG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNPTlN0cmluZygpLCAnKScpKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3Ry
aW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZjxJ
bnNwZWN0b3JBcnJheT4gY29tbWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBj
b21tYW5kLT5wdXNoU3RyaW5nKG1ldGhvZCk7CiAgICAgY29tbWFuZC0+cHVzaFN0cmluZyhhcmd1
bWVudCk7CiAgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXZhbHVhdGUo
U2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05T
dHJpbmcoKSwgJyknKSkpOwogfQogCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5P
dmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBh
cmd1bWVudCkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiBhcmd1bWVudCkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKLSAgICBjb21tYW5kLT5w
dXNoVmFsdWUoYXJndW1lbnQpOworICAgIGNvbW1hbmQtPnB1c2hWYWx1ZShXVEY6Om1vdmUoYXJn
dW1lbnQpKTsKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0
ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNP
TlN0cmluZygpLCAnKScpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5oCmluZGV4IDRlZmI0NTguLmU1Y2ZlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpOwogCi0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHRl
ZE5vZGUoKSBjb25zdDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1
aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIGZyZWVQYWdl
KCk7CiBwcml2YXRlOgpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNl
dChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGZyYW1lVmlld0Z1
bGxTaXplKTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9k
KTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KTsKLSAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGFyZ3Vt
ZW50KTsKKyAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiBhcmd1bWVudCk7CiAKICAgICBQYWdl
JiBtX3BhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggN2UyY2JkYi4uMTBk
ZWY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgYm9vbCBoYXNUZXh0Q29udGVudChDYWNo
ZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgcmV0dXJuIHR5cGUgPT0gSW5zcGVjdG9y
UGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50
OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlw
dFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKIH0K
IAotc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlWEhSVGV4dERl
Y29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdO
YW1lKQorc3RhdGljIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGVYSFJUZXh0RGVj
b2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05h
bWUpCiB7CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXI7CiAgICAgaWYg
KCF0ZXh0RW5jb2RpbmdOYW1lLmlzRW1wdHkoKSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGVYSFJUZXh0RGVjb2Rlcihjb25z
dCBTdHJpbmcmIG1pbWVUeQogICAgICAgICBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y3JlYXRlKCJ0ZXh0L2h0bWwiLCAiVVRGLTgiKTsKICAgICBlbHNlCiAgICAgICAgIGRlY29kZXIg
PSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCAiVVRGLTgiKTsKLSAg
ICByZXR1cm4gZGVjb2RlcjsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRlY29kZXIpOwogfQogCiBi
b29sIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hlZFJlc291
cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQp
CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgZnJhbWUubG9hZGVyKCkuY2hhbmdl
TG9jYXRpb24oZnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUuZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3
YXJkTGlzdDo6Tm8pOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2ll
KQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2Jq
ZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQogewogICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXROYW1lKGNv
b2tpZS5uYW1lKQpAQCAtNDM1LDE0ICs0MzUsMTQgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdAog
ICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFy
cmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKK3N0YXRpYyBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2ll
c0xpc3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGNvb2tpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGNvb2tpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKIAotICAgIGZvciAoYXV0byYgY29va2ll
IDogY29va2llc0xpc3QpCisgICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBjb29raWVzTGlz
dCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNvb2tpZShjb29raWUp
KTsKIAotICAgIHJldHVybiBjb29raWVzOworICAgIHJldHVybiBXVEY6Om1vdmUoY29va2llcyk7
CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JG
cmFtZShGcmFtZSogZnJhbWUpCkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIGMKICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0
QnlMaW5lcyhjb250ZW50LCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4g
YnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBT
dHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQog
ewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwodXJsKQpAQCAtODUxLDEzICs4NTEsMTMgQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IExheW91dFJlY3QmIHJlY3QKIAogICAgIExheW91dFJlY3QgYWJzb2x1dGVSZWN0ID0gTGF5b3V0
UmVjdChyZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVjdCkpLmJvdW5k
aW5nQm94KCkpOwogICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLnZp
ZXcoKTsKLSAgICAKKwogICAgIExheW91dFJlY3Qgcm9vdFJlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAg
ICAgaWYgKCF2aWV3LT5mcmFtZSgpLmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgSW50UmVjdCBy
b290Vmlld1JlY3QgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoc25hcHBlZEludFJlY3QoYWJz
b2x1dGVSZWN0KSk7CiAgICAgICAgIHJvb3RSZWN0ID0gdmlldy0+ZnJhbWUoKS5tYWluRnJhbWUo
KS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhyb290Vmlld1JlY3QpOwogICAgIH0KLSAgICAK
KwogICAgIGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSkgewogICAgICAg
ICBtX2NsaWVudC0+c2hvd1BhaW50UmVjdChyb290UmVjdCk7CiAgICAgICAgIHJldHVybjsKQEAg
LTg5OCwxNCArODk4LDE1IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzY3JpcHRzRW5hYmxl
ZChib29sIGlzRW5hYmxlZCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0c0VuYWJs
ZWQoaXNFbmFibGVkKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBm
cmFtZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0
SWQoZnJhbWVJZChmcmFtZSkpCiAgICAgICAgIC5zZXRMb2FkZXJJZChsb2FkZXJJZChmcmFtZS0+
bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpCiAgICAgICAgIC5zZXRVcmwoZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpKQogICAgICAgICAuc2V0TWltZVR5cGUoZnJhbWUtPmxvYWRl
cigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSkKLSAgICAgICAgLnNldFNl
Y3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0
cmluZygpKTsKKyAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0cmluZygpKQorICAgICAgICAucmVsZWFzZSgpOwogICAg
IGlmIChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKQogICAgICAgICBmcmFtZU9iamVjdC0+c2V0UGFy
ZW50SWQoZnJhbWVJZChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKSk7CiAgICAgaWYgKGZyYW1lLT5v
d25lckVsZW1lbnQoKSkgewpAQCAtOTE1LDIyICs5MTYsMjQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVj
dEZvckYKICAgICAgICAgZnJhbWVPYmplY3QtPnNldE5hbWUobmFtZSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIGZyYW1lT2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUoZnJhbWVPYmplY3QpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBm
cmFtZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4g
SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZnJhbWUp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9i
amVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNl
Pj4gc3VicmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCi0gICAgICAg
ICAuc2V0RnJhbWUoZnJhbWVPYmplY3QpCi0gICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJlc291
cmNlcyk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9i
amVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIGF1dG8gc3VicmVzb3VyY2Vz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRG
cmFtZShXVEY6Om1vdmUoZnJhbWVPYmplY3QpKQorICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJl
c291cmNlcy5jb3B5UmVmKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBmb3IgKGF1dG8q
IGNhY2hlZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPiByZXNv
dXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNy
ZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFVybChjYWNo
ZWRSZXNvdXJjZS0+dXJsKCkpCiAgICAgICAgICAgICAuc2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5
cGVKc29uKCpjYWNoZWRSZXNvdXJjZSkpCi0gICAgICAgICAgICAuc2V0TWltZVR5cGUoY2FjaGVk
UmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7CisgICAgICAgICAgICAuc2V0TWltZVR5
cGUoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSkKKyAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkKICAg
ICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRDYW5jZWxlZCh0cnVlKTsKICAgICAgICAgZWxz
ZSBpZiAoY2FjaGVkUmVzb3VyY2UtPnN0YXR1cygpID09IENhY2hlZFJlc291cmNlOjpMb2FkRXJy
b3IpCkBAIC05MzgsNyArOTQxLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWkKICAgICAgICAg
U3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVS
TEZvclJlc291cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICAgICAgaWYgKCFzb3VyY2VNYXBwaW5n
VVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRTb3VyY2VNYXBV
Ukwoc291cmNlTWFwcGluZ1VSTCk7Ci0gICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShyZXNv
dXJjZU9iamVjdCk7CisgICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShXVEY6Om1vdmUocmVz
b3VyY2VPYmplY3QpKTsKICAgICB9CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBjaGls
ZHJlbkFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oCmluZGV4IDUzNDNhZjguLmJmMjY0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTE2Niw4ICsxNjYsOCBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBib29sIG1haW5SZXNvdXJjZUNvbnRlbnQoRnJhbWUqLCBib29sIHdpdGhCYXNlNjRF
bmNvZGUsIFN0cmluZyogcmVzdWx0KTsKICAgICBzdGF0aWMgYm9vbCBkYXRhQ29udGVudChjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05h
bWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpOwogCi0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gYnVpbGRPYmplY3RGb3JGcmFt
ZShGcmFtZSopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJh
bWVSZXNvdXJjZVRyZWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKik7CisgICAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBidWlsZE9iamVjdEZvckZyYW1lKEZy
YW1lKik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiBidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSopOwogICAgIFBhZ2UqIG1fcGFnZTsK
ICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclBhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRj
aGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxh
eUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2Vu
dC5jcHAKaW5kZXggNzc5YmU2Mi4uOGZjNDQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCkBAIC01NCw0MCArNTQsMzYgQEAgdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiBi
dWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3Np
dGlvbikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3Np
dGlvbj4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlv
biYgcG9zaXRpb24pCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6
UmVwbGF5UG9zaXRpb24+IHBvc2l0aW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlZ21l
bnRPZmZzZXQocG9zaXRpb24uc2VnbWVudE9mZnNldCkKLSAgICAgICAgLnNldElucHV0T2Zmc2V0
KHBvc2l0aW9uLmlucHV0T2Zmc2V0KTsKLQotICAgIHJldHVybiBwb3NpdGlvbk9iamVjdC5yZWxl
YXNlKCk7CisgICAgICAgIC5zZXRJbnB1dE9mZnNldChwb3NpdGlvbi5pbnB1dE9mZnNldCkKKyAg
ICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dChj
b25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90IG9mZnNldCkKK3N0
YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBp
bnB1dCwgc2l6ZV90IG9mZnNldCkKIHsKICAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZElucHV0ID0g
RW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46OmVuY29kZVZhbHVlKGlu
cHV0KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1
dD4gaW5wdXRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0
OjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxh
eUlucHV0OjpjcmVhdGUoKQogICAgICAgICAuc2V0VHlwZShpbnB1dC50eXBlKCkpCiAgICAgICAg
IC5zZXRPZmZzZXQob2Zmc2V0KQotICAgICAgICAuc2V0RGF0YShlbmNvZGVkSW5wdXQuYXNPYmpl
Y3QoKSk7Ci0KLSAgICByZXR1cm4gaW5wdXRPYmplY3QucmVsZWFzZSgpOworICAgICAgICAuc2V0
RGF0YShlbmNvZGVkSW5wdXQuYXNPYmplY3QoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNz
aW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24oUGFzc1JlZlB0cjxSZXBsYXlTZXNz
aW9uPiBwcnBTZXNzaW9uKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6
OlJlcGxheVNlc3Npb24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihSZWZQdHI8UmVw
bGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewotICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNz
aW9uID0gcHJwU2Vzc2lvbjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U2VnbWVudElkZW50aWZpZXI+PiBzZWdtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFNlZ21lbnRJZGVudGlmaWVyPjo6Y3JlYXRlKCk7CisgICAgYXV0byBzZWdtZW50cyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFNlZ21lbnRJZGVudGlmaWVyPjo6Y3JlYXRlKCk7CiAKICAg
ICBmb3IgKGF1dG8gaXQgPSBzZXNzaW9uLT5iZWdpbigpOyBpdCAhPSBzZXNzaW9uLT5lbmQoKTsg
KytpdCkKICAgICAgICAgc2VnbWVudHMtPmFkZEl0ZW0oKCppdCktPmlkZW50aWZpZXIoKSk7CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBz
ZXNzaW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9u
OjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxh
eVNlc3Npb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChzZXNzaW9uLT5pZGVudGlmaWVyKCkp
CiAgICAgICAgIC5zZXRUaW1lc3RhbXAoc2Vzc2lvbi0+dGltZXN0YW1wKCkpCi0gICAgICAgIC5z
ZXRTZWdtZW50cyhzZWdtZW50cy5yZWxlYXNlKCkpOwotCi0gICAgcmV0dXJuIHNlc3Npb25PYmpl
Y3QucmVsZWFzZSgpOworICAgICAgICAuc2V0U2VnbWVudHMoV1RGOjptb3ZlKHNlZ21lbnRzKSkK
KyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
cGxheTo6U2Vzc2lvblN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdl
YkNvcmU6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCkBAIC0xMTEsNyArMTA3LDcgQEAgc3Rh
dGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9yU2VnbWVudFMKIAogY2xhc3MgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9y
IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5
cGU7CisgICAgdHlwZWRlZiBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5cGU7CiAKICAgICBT
ZXJpYWxpemVJbnB1dFRvSlNPTkZ1bmN0b3IoKQogICAgICAgICA6IG1faW5wdXRzKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5w
dXQ+OjpjcmVhdGUoKSkgeyB9CkBAIC0xMzAsMzAgKzEyNiwyOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBs
YXk6OlJlcGxheUlucHV0Pj4gbV9pbnB1dHM7CiB9OwogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiBidWlsZEluc3BlY3Rvck9i
amVjdEZvclNlZ21lbnQoUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gcHJwU2VnbWVu
dCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVu
dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KFJlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4mJiBzZWdtZW50KQogewotICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2Vn
bWVudCA9IHBycFNlZ21lbnQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXRRdWV1ZT4+IHF1ZXVlc09i
amVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
cGxheTo6UmVwbGF5SW5wdXRRdWV1ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcXVldWVzT2JqZWN0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5
OjpSZXBsYXlJbnB1dFF1ZXVlPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHNpemVfdD4oSW5wdXRRdWV1ZTo6Q291bnQpOyBpKyspIHsKICAgICAg
ICAgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yIGNvbGxlY3RvcjsKICAgICAgICAgSW5wdXRR
dWV1ZSBxdWV1ZSA9IHN0YXRpY19jYXN0PElucHV0UXVldWU+KGkpOwotICAgICAgICBSZWZQdHI8
RnVuY3RvcklucHV0Q3Vyc29yPiBmdW5jdG9yQ3Vyc29yID0gRnVuY3RvcklucHV0Q3Vyc29yOjpj
cmVhdGUoc2VnbWVudCk7CisgICAgICAgIFJlZlB0cjxGdW5jdG9ySW5wdXRDdXJzb3I+IGZ1bmN0
b3JDdXJzb3IgPSBGdW5jdG9ySW5wdXRDdXJzb3I6OmNyZWF0ZShzZWdtZW50LmNvcHlSZWYoKSk7
CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gcXVldWVJbnB1dHMgPSBmdW5jdG9yQ3Vyc29y
LT5mb3JFYWNoSW5wdXRJblF1ZXVlKHF1ZXVlLCBjb2xsZWN0b3IpOwogCi0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU+IHF1ZXVlT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVh
dGUoKQorICAgICAgICBhdXRvIHF1ZXVlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFR5cGUoRW5j
b2RpbmdUcmFpdHM8SW5wdXRRdWV1ZT46OmVuY29kZVZhbHVlKHF1ZXVlKS5jb252ZXJ0VG88U3Ry
aW5nPigpKQotICAgICAgICAgICAgLnNldElucHV0cyhxdWV1ZUlucHV0cyk7Ci0KLSAgICAgICAg
cXVldWVzT2JqZWN0LT5hZGRJdGVtKHF1ZXVlT2JqZWN0LnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICAuc2V0SW5wdXRzKHF1ZXVlSW5wdXRzKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAg
ICAgcXVldWVzT2JqZWN0LT5hZGRJdGVtKFdURjo6bW92ZShxdWV1ZU9iamVjdCkpOwogICAgIH0K
IAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50
PiBzZWdtZW50T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2Vn
bWVudDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpT
ZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKHNlZ21lbnQtPmlkZW50aWZp
ZXIoKSkKICAgICAgICAgLnNldFRpbWVzdGFtcChzZWdtZW50LT50aW1lc3RhbXAoKSkKLSAgICAg
ICAgLnNldFF1ZXVlcyhxdWV1ZXNPYmplY3QucmVsZWFzZSgpKTsKLQotICAgIHJldHVybiBzZWdt
ZW50T2JqZWN0LnJlbGVhc2UoKTsKKyAgICAgICAgLnNldFF1ZXVlcyhXVEY6Om1vdmUocXVldWVz
T2JqZWN0KSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
Okluc3BlY3RvclJlcGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQpAQCAtMzM3LDcgKzMzMSw3IEBA
IHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc3RvcENhcHR1cmluZygp
OwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHBvc2l0
aW9uT2JqZWN0LCBib29sIGZhc3RSZXBsYXkpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpy
ZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBwb3NpdGlvbk9iamVjdCwgYm9vbCBmYXN0UmVwbGF5KQogewogICAg
IFJlcGxheVBvc2l0aW9uIHBvc2l0aW9uOwogICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldElu
dGVnZXIoQVNDSUlMaXRlcmFsKCJzZWdtZW50T2Zmc2V0IiksIHBvc2l0aW9uLnNlZ21lbnRPZmZz
ZXQpKSB7CkBAIC01MDcsNyArNTAxLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0
U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlAKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rv
ck9iamVjdEZvclNlc3Npb24oc2Vzc2lvbik7CisgICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQogCiB2b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXIgaWRl
bnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21l
bnQ+JiBzZXJpYWxpemVkT2JqZWN0KQpAQCAtNTE4LDcgKzUxMiw3IEBAIHZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OmdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5z
cGVjdG9yOjpQCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXJpYWxpemVkT2JqZWN0
ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KHNlZ21lbnQpOworICAgIHNlcmlhbGl6
ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnQoV1RGOjptb3ZlKHNlZ21l
bnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAppbmRleCAxNzNhZWE3Li45NDI5NTExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaApA
QCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0Q2FwdHVyaW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BDYXB0dXJpbmco
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUb1Bvc2l0
aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYsIGJvb2wgc2hvdWxkRmFzdEZvcndhcmQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBy
ZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYmLCBib29sIHNob3VsZEZhc3RGb3J3YXJkKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRG
YXN0Rm9yd2FyZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUGxheWJhY2soRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGxheWJhY2soRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAppbmRleCBlMjY0NTYwLi41YzJkYjk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
CkBAIC0xOTAsMTYgKzE5MCwxNiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZQogICAgIGRpc2Fi
bGUodW51c2VkKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRl
ck1hcCYgaGVhZGVycykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3Qt
PnNldFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBoZWFkZXJz
T2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUoaGVhZGVyc09iamVjdCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5n
PiBidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBSZXNvdXJjZUxvYWRUaW1pbmcmIHRpbWluZywg
RG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IFJlc291
cmNlTG9hZFRpbWluZyYgdGltaW5nLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRl
KCkKICAgICAgICAgLnNldE5hdmlnYXRpb25TdGFydChsb2FkZXItPnRpbWluZygpLT5uYXZpZ2F0
aW9uU3RhcnQoKSkKQEAgLTIxMyw1NiArMjEzLDU4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWlsZE9iamVjdEZvclRp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAg
ICAgICAuc2V0VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2Qo
cmVxdWVzdC5odHRwTWV0aG9kKCkpCi0gICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpOworICAgICAgICAuc2V0SGVhZGVy
cyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQorICAg
ICAgICAucmVsZWFzZSgpOwogICAgIGlmIChyZXF1ZXN0Lmh0dHBCb2R5KCkgJiYgIXJlcXVlc3Qu
aHR0cEJvZHkoKS0+aXNFbXB0eSgpKQogICAgICAgICByZXF1ZXN0T2JqZWN0LT5zZXRQb3N0RGF0
YShyZXF1ZXN0Lmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVx
dWVzdE9iamVjdDsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlcXVlc3RPYmplY3QpOwogfQogCi1z
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4g
YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogewogICAgIGlmIChyZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBkb3VibGUgc3RhdHVzID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJz
KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
aGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRz
KCkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
PiByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
OjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXNwb25zZS51
cmwoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhzdGF0dXMpCiAgICAgICAgIC5zZXRT
dGF0dXNUZXh0KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCi0gICAgICAgIC5zZXRIZWFkZXJz
KGhlYWRlcnMpCisgICAgICAgIC5zZXRIZWFkZXJzKFdURjo6bW92ZShoZWFkZXJzKSkKICAgICAg
ICAgLnNldE1pbWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCiAgICAgICAgIC5zZXRDb25uZWN0
aW9uUmV1c2VkKHJlc3BvbnNlLmNvbm5lY3Rpb25SZXVzZWQoKSkKLSAgICAgICAgLnNldENvbm5l
Y3Rpb25JZChyZXNwb25zZS5jb25uZWN0aW9uSUQoKSk7CisgICAgICAgIC5zZXRDb25uZWN0aW9u
SWQocmVzcG9uc2UuY29ubmVjdGlvbklEKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBy
ZXNwb25zZU9iamVjdC0+c2V0RnJvbURpc2tDYWNoZShyZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNv
dXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZSB8fCByZXNwb25zZS5zb3VyY2UoKSA9PSBS
ZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZUFmdGVyVmFsaWRhdGlvbik7CiAgICAg
cmVzcG9uc2VPYmplY3QtPnNldFRpbWluZyhidWlsZE9iamVjdEZvclRpbWluZyhyZXNwb25zZS5y
ZXNvdXJjZUxvYWRUaW1pbmcoKSwgbG9hZGVyKSk7CiAKLSAgICByZXR1cm4gcmVzcG9uc2VPYmpl
Y3Q7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXNwb25zZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiBi
dWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJj
ZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJj
ZT4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRS
ZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRV
cmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpKQogICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3JQYWdl
QWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24oKmNhY2hlZFJlc291cmNlKSkKLSAgICAgICAg
LnNldEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5lbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAgLnNl
dEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5lbmNvZGVkU2l6ZSgpKQorICAgICAgICAucmVsZWFz
ZSgpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
PiByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hl
ZFJlc291cmNlLT5yZXNwb25zZSgpLCBsb2FkZXIpOwotICAgIGlmIChyZXNvdXJjZVJlc3BvbnNl
KQotICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZSk7
CisgICAgYXV0byByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCBsb2FkZXIpOworICAgIHJlc291cmNlT2Jq
ZWN0LT5zZXRSZXNwb25zZShXVEY6Om1vdmUocmVzb3VyY2VSZXNwb25zZSkpOwogCiAgICAgU3Ry
aW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZv
clJlc291cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNF
bXB0eSgpKQogICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0U291cmNlTWFwVVJMKHNvdXJjZU1h
cHBpbmdVUkwpOwogCi0gICAgcmV0dXJuIHJlc291cmNlT2JqZWN0OworICAgIHJldHVybiBXVEY6
Om1vdmUocmVzb3VyY2VPYmplY3QpOwogfQogCiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp+SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudCgpCkBAIC00ODQsOSArNDg2LDkgQEAgdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50Ojpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNs
aWVudCh1bnMKICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFhIUlJlcGxheURhdGEocmVxdWVzdElk
LCB4aHJSZXBsYXlEYXRhKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxs
TG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9y
bURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRp
YWxzKQordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUihUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVy
bCwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1EYXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVh
ZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKIHsKLSAgICBSZWZQdHI8
WEhSUmVwbGF5RGF0YT4geGhyUmVwbGF5RGF0YSA9IFhIUlJlcGxheURhdGE6OmNyZWF0ZShtZXRo
b2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOwor
ICAgIFJlZlB0cjxYSFJSZXBsYXlEYXRhPiB4aHJSZXBsYXlEYXRhID0gWEhSUmVwbGF5RGF0YTo6
Y3JlYXRlKG1ldGhvZCwgdXJsLCBhc3luYywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywg
aW5jbHVkZUNyZWRlbnRpYWxzKTsKIAogICAgIG1fcGVuZGluZ1hIUlJlcGxheURhdGEuc2V0KGNs
aWVudCwgV1RGOjptb3ZlKHhoclJlcGxheURhdGEpKTsKIH0KQEAgLTU1MiwyMiArNTU0LDI0IEBA
IHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRp
b24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgICAgICBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRp
YXRvciA9IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KCZkb2N1bWVudCk7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQpCitSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSA9IGNyZWF0ZVNjcmlwdENhbGxTdGFj
ayhKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpLCBTY3JpcHRDYWxsU3RhY2s6
Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpOwogICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNr
VHJhY2UtPnNpemUoKSA+IDApIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpOworICAg
ICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQorICAgICAgICAgICAgLnJl
bGVhc2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRTdGFja1RyYWNlKHN0YWNrVHJh
Y2UtPmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSk7Ci0gICAgICAgIHJldHVybiBpbml0aWF0b3JPYmpl
Y3Q7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUoaW5pdGlhdG9yT2JqZWN0KTsKICAgICB9CiAK
ICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigp
KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRp
YXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6UGFyc2VyKTsKKyAgICAgICAgYXV0byBpbml0aWF0
b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0
ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJ
bml0aWF0b3I6OlR5cGU6OlBhcnNlcikKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAg
IGluaXRpYXRvck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CiAgICAg
ICAgIGluaXRpYXRvck9iamVjdC0+c2V0TGluZU51bWJlcihkb2N1bWVudC0+c2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZS5vbmVCYXNlZEludCgpKTsKLSAg
ICAgICAgcmV0dXJuIGluaXRpYXRvck9iamVjdDsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShp
bml0aWF0b3JPYmplY3QpOwogICAgIH0KIAogICAgIGlmIChtX2lzUmVjYWxjdWxhdGluZ1N0eWxl
ICYmIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQpAQCAtNTg3LDE4ICs1OTEsMjAgQEAg
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdAogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Ondp
bGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4gcmVxdWVzdE9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCi0g
ICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFk
ZXJGaWVsZHMoKSkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRXaWxsU2Vu
ZEhhbmRzaGFrZVJlcXVlc3QoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmll
ciksIHRpbWVzdGFtcCgpLCByZXF1ZXN0T2JqZWN0KTsKKyAgICBhdXRvIHJlcXVlc3RPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUo
KQorICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRw
SGVhZGVyRmllbGRzKCkpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoSWRlbnRpZmllcnNGYWN0
b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBXVEY6Om1vdmUocmVxdWVz
dE9iamVjdCkpOwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4gcmVzcG9uc2VPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKKyAg
ICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0YXR1
c1RleHQoKSkKLSAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVz
dElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgcmVzcG9uc2VPYmplY3QpOworICAgICAgICAu
c2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVl
c3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShyZXNwb25zZU9iamVjdCkp
OwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZENsb3NlV2ViU29ja2V0KHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcikKQEAgLTYwOCwyMCArNjE0LDIyIEBAIHZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRG
cmFtZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0
RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29j
a2V0RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bj
b2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAg
ICAuc2V0UGF5bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpKTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVSZWNlaXZlZChJ
ZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIGZy
YW1lT2JqZWN0KTsKKyAgICAgICAgLnNldFBheWxvYWREYXRhKFN0cmluZyhmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6
OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShmcmFtZU9iamVj
dCkpOwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFNlbmRXZWJTb2NrZXRG
cmFtZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0
RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29j
a2V0RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bj
b2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2VkKQotICAgICAg
ICAuc2V0UGF5bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpKTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVTZW50KElkZW50
aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgZnJhbWVP
YmplY3QpOworICAgICAgICAuc2V0UGF5bG9hZERhdGEoU3RyaW5nKGZyYW1lLnBheWxvYWQsIGZy
YW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT53ZWJTb2NrZXRGcmFtZVNlbnQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0
SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBXVEY6Om1vdmUoZnJhbWVPYmplY3QpKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVF
cnJvcih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KQpAQCAtNjUyLDkgKzY2MCw5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlzYWJs
ZShFcnJvclN0cmluZyYpCiAgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzLmNsZWFyKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoZWFkZXJzKQordm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoZWFkZXJzKQogewotICAgIG1fZXh0cmFSZXF1
ZXN0SGVhZGVycyA9IGhlYWRlcnM7CisgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzID0gaGVhZGVy
cy5jb3B5UmVmKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Z2V0UmVzcG9u
c2VCb2R5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKQEAgLTc0MSw3ICs3NDksNyBA
QCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldENhY2hlRGlzYWJsZWQoRXJyb3JTdHJp
bmcmLCBib29sIGNhY2hlRGlzYWJsZWQpCiAgICAgICAgIG1lbW9yeUNhY2hlKCkuZXZpY3RSZXNv
dXJjZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpsb2FkUmVzb3VyY2Uo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nLCBQYXNzUmVmUHRyPExvYWRSZXNvdXJjZUNhbGxiYWNrPiBwcnBDYWxs
YmFjaykKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIEZy
YW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJ
ZCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTc1Myw4ICs3NjEsNiBAQCB2b2lkIEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPExvYWRSZXNvdXJj
ZUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNrOwotCiAgICAgVVJMIHVybCA9IGRvY3Vt
ZW50LT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KHVybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKEFTQ0lJTGl0ZXJhbCgiR0VUIikpOwpA
QCAtNzY2LDcgKzc3Miw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291
cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgb3B0aW9ucy5j
cm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CiAKICAg
ICAvLyBJbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IGRlbGV0ZXMgaXRzZWxmIHdoZW4g
dGhlIGxvYWQgY29tcGxldGVzLgotICAgIEluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQq
IGluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQgPSBuZXcgSW5zcGVjdG9yVGhyZWFkYWJs
ZUxvYWRlckNsaWVudChjYWxsYmFjayk7CisgICAgSW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNs
aWVudCogaW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCA9IG5ldyBJbnNwZWN0b3JUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KFdURjo6bW92ZShjYWxsYmFjaykpOwogCiAgICAgUmVmUHRyPERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUoKmRvY3VtZW50LCAqaW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgcmVx
dWVzdCwgb3B0aW9ucyk7CiAgICAgaWYgKCFsb2FkZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCmluZGV4IDljMzEzM2IuLjcwMGNm
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuaApAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGYWlsTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyJiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOwogICAgIHZvaWQgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3Vt
ZW50TG9hZGVyJiwgQ2FjaGVkUmVzb3VyY2UmKTsKICAgICB2b2lkIGRvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwotICAgIHZvaWQgd2lsbExvYWRYSFIoVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFz
eW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBib2R5LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFk
ZXJzLCBib29sIGluY2x1ZGVDcmVuZGVudGlhbHMpOworICAgIHZvaWQgd2lsbExvYWRYSFIoVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmLCBi
b29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgYm9keSwgY29uc3QgSFRUUEhlYWRlck1hcCYg
aGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlbmRlbnRpYWxzKTsKICAgICB2b2lkIGRpZEZhaWxYSFJM
b2FkaW5nKFRocmVhZGFibGVMb2FkZXJDbGllbnQqKTsKICAgICB2b2lkIGRpZEZpbmlzaFhIUkxv
YWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVhIUlJlc3Bv
bnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC0xMTgsMTIgKzExOCwxMiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50Jik7
CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRv
cj4gYnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1
bWVudCopOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gZnJvbnRlbmQuCiAgICAgdmlydHVhbCB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhl
YWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJy
b3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNv
ZGVkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5WEhSKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjYW5D
bGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmluZyYsIGJvb2wqKSBvdmVycmlkZTsKQEAgLTEzMSw3
ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNhbkNsZWFyQnJvd3NlckNvb2tp
ZXMoRXJyb3JTdHJpbmcmLCBib29sKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
QnJvd3NlckNvb2tpZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2FjaGVEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgY2FjaGVEaXNhYmxlZCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8TG9hZFJlc291cmNl
Q2FsbGJhY2s+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPExv
YWRSZXNvdXJjZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGVu
YWJsZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwCmluZGV4IDcwZjA4ZDIuLmE0M2EzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRGF0YS5nZXQoKTsgfQogICAgIHZvaWQgc2V0U291cmNlRGF0YShzdGQ6OnVuaXF1ZV9w
dHI8UnVsZVNvdXJjZURhdGFMaXN0Pik7CiAgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VEYXRhICE9IG51bGxwdHI7IH0KLSAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkKSBjb25zdDsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhQXQo
dW5zaWduZWQpIGNvbnN0OwogCiBwcml2YXRlOgogCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBQ
YXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKHN0ZDo6dW5pcXVlX3B0cjxSdWxlU291cmNl
RGF0YUxpc3Q+IHNvdXJjZUQKICAgICBmbGF0dGVuU291cmNlRGF0YShzb3VyY2VEYXRhLmdldCgp
LCBtX3NvdXJjZURhdGEuZ2V0KCkpOwogfQogCi1QYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVT
b3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHls
ZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlm
ICghaGFzU291cmNlRGF0YSgpIHx8IGluZGV4ID49IG1fc291cmNlRGF0YS0+c2l6ZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0NCw3ICsxNDQsNyBAQCBlbnVtIE1lZGlhTGlzdFNv
dXJjZSB7CiAgICAgTWVkaWFMaXN0U291cmNlSW1wb3J0UnVsZQogfTsKIAotc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIFZlY3RvcjxzaXplX3Q+KiBsaW5l
RW5kaW5ncykKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VS
YW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIFZl
Y3RvcjxzaXplX3Q+KiBsaW5lRW5kaW5ncykKIHsKICAgICBpZiAoIWxpbmVFbmRpbmdzKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdl
T2JqZWN0KAogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhPiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1l
ZGlhTGlzdCogbWVkaWEsIE1lZGlhTGlzdFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U01lZGlhPiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1lZGlhTGlzdCogbWVkaWEsIE1lZGlhTGlz
dFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewogICAg
IC8vIE1ha2UgY2VydGFpbiBjb21waWxlcnMgaGFwcHkgYnkgaW5pdGlhbGl6aW5nIHxzb3VyY2V8
IHVwLWZyb250LgogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE6OlNvdXJj
ZSBzb3VyY2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6Oklu
bGluZVNoZWV0OwpAQCAtMTc4LDE4ICsxNzgsMTkgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChjb25zdCBNZWQK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTTWVkaWE+IG1lZGlhT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NNZWRpYTo6Y3JlYXRlKCkKKyAgICBhdXRvIG1lZGlhT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NNZWRpYTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRleHQobWVkaWEtPm1l
ZGlhVGV4dCgpKQotICAgICAgICAuc2V0U291cmNlKHNvdXJjZSk7CisgICAgICAgIC5zZXRTb3Vy
Y2Uoc291cmNlKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKCFzb3VyY2VVUkwuaXNF
bXB0eSgpKSB7CiAgICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTb3VyY2VVUkwoc291cmNlVVJMKTsK
ICAgICAgICAgbWVkaWFPYmplY3QtPnNldFNvdXJjZUxpbmUobWVkaWEtPnF1ZXJpZXMoKS0+bGFz
dExpbmUoKSk7CiAgICAgfQotICAgIHJldHVybiBtZWRpYU9iamVjdC5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIFdURjo6bW92ZShtZWRpYU9iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCitzdGF0
aWMgUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQpCiB7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTIwMiwxMCArMjAzLDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NT
U1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgbGlzdFJ1bGVzLmFwcGVuZChpdGVtKTsKICAgICB9Ci0gICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUobGlzdCk7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCitzdGF0
aWMgUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiB7CiAg
ICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIyMiw3ICsyMjMsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBy
dWxlKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0
Q2hhaW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NN
ZWRpYT4qIG1lZGlhQXJyYXkpCitzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVs
ZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4mIG1lZGlh
QXJyYXkpCiB7CiAgICAgTWVkaWFMaXN0KiBtZWRpYUxpc3Q7CiAgICAgQ1NTUnVsZSogcGFyZW50
UnVsZSA9IHJ1bGU7CkBAIC0yNTAsNyArMjUxLDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlz
dENoYWluKENTU1J1bGUqIHJ1bGUsIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MK
ICAgICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwogCiAgICAgICAgIGlmIChtZWRpYUxpc3QgJiYg
bWVkaWFMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1lZGlhQXJyYXktPmFkZEl0ZW0oYnVp
bGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIGlzTWVkaWFSdWxlID8gTWVkaWFMaXN0U291cmNlTWVk
aWFSdWxlIDogTWVkaWFMaXN0U291cmNlSW1wb3J0UnVsZSwgc291cmNlVVJMKSk7CisgICAgICAg
ICAgICBtZWRpYUFycmF5LmFkZEl0ZW0oYnVpbGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIGlzTWVk
aWFSdWxlID8gTWVkaWFMaXN0U291cmNlTWVkaWFSdWxlIDogTWVkaWFMaXN0U291cmNlSW1wb3J0
UnVsZSwgc291cmNlVVJMKSk7CiAKICAgICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUo
KSkKICAgICAgICAgICAgIHBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCk7CkBA
IC0yNjYsNyArMjY3LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUq
IHJ1bGUsIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuYmFzZVVSTCgpOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VV
UkwgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFBcnJheS0+YWRkSXRlbShidWlsZE1l
ZGlhT2JqZWN0KG1lZGlhTGlzdCwgc3R5bGVTaGVldC0+b3duZXJOb2RlKCkgPyBNZWRpYUxpc3RT
b3VyY2VMaW5rZWRTaGVldCA6IE1lZGlhTGlzdFNvdXJjZUlubGluZVNoZWV0LCBzb3VyY2VVUkwp
KTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFBcnJheS5hZGRJdGVtKGJ1aWxkTWVkaWFPYmpl
Y3QobWVkaWFMaXN0LCBzdHlsZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxp
bmtlZFNoZWV0IDogTWVkaWFMaXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwYXJlbnRSdWxlID0gc3R5bGVTaGVldC0+
b3duZXJSdWxlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFJ1bGUpCkBAIC0yODIsMTIg
KzI4MywxMiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlcj4gY3JlYXRlQ1NTUGFy
c2VyKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDU1NQ
YXJzZXI+KGRvY3VtZW50ID8gQ1NTUGFyc2VyQ29udGV4dCgqZG9jdW1lbnQpIDogc3RyaWN0Q1NT
UGFyc2VyQ29udGV4dCgpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OmNyZWF0ZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFzc1JlZlB0
cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50
U3R5bGVTaGVldCkKK1JlZjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShj
b25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+
JiYgc3R5bGUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZShzdHlsZUlkLCBzdHlsZSwgcGFyZW50
U3R5bGVTaGVldCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclN0eWxlKHN0
eWxlSWQsIFdURjo6bW92ZShzdHlsZSksIHBhcmVudFN0eWxlU2hlZXQpKTsKIH0KIAotSW5zcGVj
dG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQ
YXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0KQorSW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0
IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4mJiBz
dHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCkKICAgICA6IG1fc3R5
bGVJZChzdHlsZUlkKQogICAgICwgbV9zdHlsZShzdHlsZSkKICAgICAsIG1fcGFyZW50U3R5bGVT
aGVldChwYXJlbnRTdHlsZVNoZWV0KQpAQCAtMzAwLDkgKzMwMSw5IEBAIEluc3BlY3RvclN0eWxl
Ojp+SW5zcGVjdG9yU3R5bGUoKQogewogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkg
Y29uc3QKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0
b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJlc3VsdCA9IHN0eWxlV2l0aFByb3BlcnRp
ZXMoKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0
ID0gc3R5bGVXaXRoUHJvcGVydGllcygpOwogICAgIGlmICghbV9zdHlsZUlkLmlzRW1wdHkoKSkK
ICAgICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZUlkPigpKTsKIApAQCAtMzEzLDI0ICszMTQs
MjUgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHkKICAgICBpZiAoc291cmNlRGF0YSkKICAgICAg
ICAgcmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1
bGVCb2R5UmFuZ2UsIG1fcGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKS5nZXQoKSkpOwog
Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1
bHQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gSW5zcGVjdG9yU3R5
bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1JlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQ
cm9wZXJ0eT4+IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNv
bnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gcmVzdWx0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRl
ZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHls
ZVByb3BlcnR5Pjo6Y3JlYXRlKCk7CiAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+
IHByb3BlcnRpZXM7CiAgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKIAog
ICAgIGZvciAoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVyYXRvciBpdCA9IHBy
b3BlcnRpZXMuYmVnaW4oKSwgaXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBpdCAhPSBpdEVuZDsg
KytpdCkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50
cnkgPSBpdC0+c291cmNlRGF0YTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShwcm9wZXJ0eUVudHJ5Lm5hbWUpCi0g
ICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSk7Ci0gICAgICAgIHJlc3Vs
dC0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOworICAgICAgICAgICAgLnNldFZhbHVlKHByb3Bl
cnR5RW50cnkudmFsdWUpCisgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICByZXN1bHQt
PmFkZEl0ZW0oV1RGOjptb3ZlKGVudHJ5KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCiAvLyBUaGlzIG1l
dGhvZCBkb2VzIHRoZSBmb2xsb3dpbmcgcHJlcHJvY2Vzc2luZyBvZiB8cHJvcGVydHlUZXh0fCB3
aXRoIHxvdmVyd3JpdGV8ID09IGZhbHNlIGFuZCB8aW5kZXh8IHBhc3QgdGhlIGxhc3QgYWN0aXZl
IHByb3BlcnR5OgpAQCAtNTAzLDEzICs1MDUsMTMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6cG9w
dWxhdGVBbGxQcm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWwK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0
CitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6
OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIFZlY3RvcjxJbnNwZWN0b3JTdHls
ZVByb3BlcnR5PiBwcm9wZXJ0aWVzOwogICAgIHBvcHVsYXRlQWxsUHJvcGVydGllcygmcHJvcGVy
dGllcyk7CiAKLSAgICBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eT4+IHByb3BlcnRpZXNPYmplY3QgPSBBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+PiBzaG9ydGhhbmRFbnRyaWVzID0gQXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgpOworICAg
IGF1dG8gcHJvcGVydGllc09iamVjdCA9IEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhhc2hT
ZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3RyaW5nIHByZXZpb3VzUHJpb3JpdHk7
CkBAIC01MzIsOSArNTM0LDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpCiAKICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgIC5zZXROYW1lKG5hbWUubG93ZXIoKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0
eUVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVl
KQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5h
ZGRJdGVtKHByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllc09iamVjdC0+YWRkSXRlbShwcm9w
ZXJ0eS5jb3B5UmVmKCkpOwogCiAgICAgICAgIC8vIERlZmF1bHQgInBhcnNlZE9rIiA9PSB0cnVl
LgogICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkucGFyc2VkT2spCkBAIC02MDAsMTAgKzYwMywx
MSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aQogICAgICAgICAgICAgICAgIGlmICghc2hvcnRo
YW5kLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU2hvcnRoYW5k
cy5jb250YWlucyhzaG9ydGhhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFNo
b3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT4gZW50cnkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRo
YW5kRW50cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUo
c2hvcnRoYW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9ydGhh
bmRWYWx1ZShzaG9ydGhhbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZEVu
dHJpZXMtPmFkZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuc2V0VmFsdWUoc2hvcnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRo
YW5kRW50cmllcy0+YWRkSXRlbShXVEY6Om1vdmUoZW50cnkpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTYxNSwxMiArNjE5LDEy
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpCiAgICAgfQogCiAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRDc3NQcm9w
ZXJ0aWVzKHByb3BlcnRpZXNPYmplY3QucmVsZWFzZSgpKQotICAgICAgICAuc2V0U2hvcnRoYW5k
RW50cmllcyhzaG9ydGhhbmRFbnRyaWVzLnJlbGVhc2UoKSkKKyAgICAgICAgLnNldENzc1Byb3Bl
cnRpZXMoV1RGOjptb3ZlKHByb3BlcnRpZXNPYmplY3QpKQorICAgICAgICAuc2V0U2hvcnRoYW5k
RW50cmllcyhXVEY6Om1vdmUoc2hvcnRoYW5kRW50cmllcykpCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlOjpleHRy
YWN0U291cmNlRGF0YSgpIGNvbnN0CitSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3Rv
clN0eWxlOjpleHRyYWN0U291cmNlRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhcmVudFN0
eWxlU2hlZXQgfHwgIW1fcGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzQ5LDkgKzc1Myw5IEBAIE5ld0xpbmVBbmRX
aGl0ZXNwYWNlJiBJbnNwZWN0b3JTdHlsZTo6bmV3TGluZUFuZFdoaXRlc3BhY2VEZWxpbWl0ZXJz
KCkgY29uc3QKICAgICByZXR1cm4gbV9mb3JtYXQ7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
U3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIp
CitSZWY8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NT
U3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVu
ZXIqIGxpc3RlbmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVT
aGVldChwYWdlQWdlbnQsIGlkLCBwYWdlU3R5bGVTaGVldCwgb3JpZ2luLCBkb2N1bWVudFVSTCwg
bGlzdGVuZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0
KHBhZ2VBZ2VudCwgaWQsIFdURjo6bW92ZShwYWdlU3R5bGVTaGVldCksIG9yaWdpbiwgZG9jdW1l
bnRVUkwsIGxpc3RlbmVyKSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNzYyLDEwICs3NjYsMTAgQEAg
U3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUluc3BlY3Rv
clN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0
eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3Bl
Y3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VT
dHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAg
OiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQotICAgICwgbV9wYWdlU3R5
bGVTaGVldChwYWdlU3R5bGVTaGVldCkKKyAgICAsIG1fcGFnZVN0eWxlU2hlZXQoV1RGOjptb3Zl
KHBhZ2VTdHlsZVNoZWV0KSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAsIG1fZG9jdW1l
bnRVUkwoZG9jdW1lbnRVUkwpCiAgICAgLCBtX2lzUmV2YWxpZGF0aW5nKGZhbHNlKQpAQCAtOTUz
LDcgKzk1Nyw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUZvcklk
KGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKIAogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFn
ZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCkBAIC05NjEsMTkgKzk2NSwyMCBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aQogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NS
dWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qoc3R5bGVTaGVldCk7CiAKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gcmVzdWx0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJl
c3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKLSAgICAgICAgLnNldFJ1bGVzKGJ1
aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpOworICAgICAgICAuc2V0UnVs
ZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgpKSkKKyAgICAgICAgLnJl
bGVhc2UoKTsKIAogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKICAgICBib29sIHN1Y2Nlc3Mg
PSBnZXRUZXh0KCZzdHlsZVNoZWV0VGV4dCk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJl
c3VsdC0+c2V0VGV4dChzdHlsZVNoZWV0VGV4dCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCkKK1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKQEAgLTk5
MSwzMCArOTk2LDMxIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpiCiAgICAgICAgIC5yZWxlYXNl
KCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxwZXIoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvclRleHQsIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvcikKK3N0YXRpYyBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvckhl
bHBlcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVj
dG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
PiBpbnNwZWN0b3JTZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0
b3I6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRUZXh0KHNlbGVjdG9yVGV4dCk7CisgICAgYXV0byBp
bnNwZWN0b3JTZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6
OmNyZWF0ZSgpCisgICAgICAgIC5zZXRUZXh0KHNlbGVjdG9yVGV4dCkKKyAgICAgICAgLnJlbGVh
c2UoKTsKIAogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkgPSBzZWxlY3Rv
ci5zdGF0aWNTcGVjaWZpY2l0eShvayk7CiAKICAgICBpZiAob2spIHsKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+IHR1cGxlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gdHVwbGUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICAgICAgdHVwbGUtPmFkZEl0
ZW0oc3RhdGljX2Nhc3Q8aW50Pigoc3BlY2lmaWNpdHkgJiBDU1NTZWxlY3Rvcjo6aWRNYXNrKSA+
PiAxNikpOwogICAgICAgICB0dXBsZS0+YWRkSXRlbShzdGF0aWNfY2FzdDxpbnQ+KChzcGVjaWZp
Y2l0eSAmIENTU1NlbGVjdG9yOjpjbGFzc01hc2spID4+IDgpKTsKICAgICAgICAgdHVwbGUtPmFk
ZEl0ZW0oc3RhdGljX2Nhc3Q8aW50PihzcGVjaWZpY2l0eSAmIENTU1NlbGVjdG9yOjplbGVtZW50
TWFzaykpOwotICAgICAgICBpbnNwZWN0b3JTZWxlY3Rvci0+c2V0U3BlY2lmaWNpdHkodHVwbGUu
cmVsZWFzZSgpKTsKKyAgICAgICAgaW5zcGVjdG9yU2VsZWN0b3ItPnNldFNwZWNpZmljaXR5KFdU
Rjo6bW92ZSh0dXBsZSkpOwogICAgIH0KIAotICAgIHJldHVybiBpbnNwZWN0b3JTZWxlY3Rvci5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShpbnNwZWN0b3JTZWxlY3Rvcik7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENT
U1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29u
c3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCitzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBz
ZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENTU1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBj
b25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxp
c3QpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEpTQzo6WWFycjo6UmVn
dWxhckV4cHJlc3Npb24sIGNvbW1lbnQsICgiL1xcKlteXSo/XFwqLyIsIFRleHRDYXNlU2Vuc2l0
aXZlLCBKU0M6OllhcnI6Ok11bHRpbGluZUVuYWJsZWQpKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rv
cj46OmNyZWF0ZSgpOwogICAgIGNvbnN0IFNlbGVjdG9yUmFuZ2VMaXN0JiByYW5nZXMgPSBzb3Vy
Y2VEYXRhLT5zZWxlY3RvclJhbmdlczsKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ig
PSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJh
bmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKQEAgLTEwMjcsMTUgKzEwMzMsMTUgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTZWxlY3QKIAogICAgICAgICBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzZWxlY3Rvcik7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK1JlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWls
ZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBy
ZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0b3JUZXh0
KCksICpzZWxlY3Rvcik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0
b3JMaXN0KENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMDUz
LDI2ICsxMDU5LDI3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxl
Y3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqCiAgICAgICAgIGZvciAoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAgICAgICAgICAg
ICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxlY3RvcikpOwog
ICAgIH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+
IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUo
KQorICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxp
c3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWxlY3RvcnMoc2VsZWN0b3JzLnJlbGVhc2UoKSkK
ICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFu
Z2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygpLmdldCgp
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShy
ZXN1bHQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSog
cnVsZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAg
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYg
KCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlbGVjdG9yTGlz
dChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlKSkKICAgICAgICAgLnNldFNvdXJjZUxp
bmUocnVsZS0+c3R5bGVSdWxlKCkuc291cmNlTGluZSgpKQogICAgICAgICAuc2V0T3JpZ2luKG1f
b3JpZ2luKQotICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5
bGUoKSkpOworICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5
bGUoKSkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAvLyAic291cmNlVVJMIiBpcyBwcmVz
ZW50IG9ubHkgZm9yIHJlZ3VsYXIgcnVsZXMsIG90aGVyd2lzZSAib3JpZ2luIiBzaG91bGQgYmUg
dXNlZCBpbiB0aGUgZnJvbnRlbmQuCiAgICAgaWYgKG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcikKQEAgLTEwODQsMTYgKzEwOTEs
MTYgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm8KICAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVs
ZUlkKGlkLmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJ
ZD4oKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTTWVkaWE+PiBtZWRpYUFycmF5ID0gQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NNZWRpYT46OmNyZWF0ZSgpOworICAgIGF1dG8gbWVkaWFBcnJheSA9IEFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE+OjpjcmVhdGUoKTsKIAogICAgIGZpbGxNZWRp
YUxpc3RDaGFpbihydWxlLCBtZWRpYUFycmF5LmdldCgpKTsKICAgICBpZiAobWVkaWFBcnJheS0+
bGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0TWVkaWEobWVkaWFBcnJheS5yZWxlYXNlKCkp
OworICAgICAgICByZXN1bHQtPnNldE1lZGlhKFdURjo6bW92ZShtZWRpYUFycmF5KSk7CiAKLSAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7
CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKICAg
ICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMTE5LDcgKzExMjYsNyBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0RgogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCiBib29sIElu
c3BlY3RvclN0eWxlU2hlZXQ6OnNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJiBlYykK
QEAgLTExNjQsNyArMTE3MSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJv
cGVydHkoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCB1bnNpZ25lZCBwcm9wCiAgICAgYm9vbCBz
dWNjZXNzID0gaW5zcGVjdG9yU3R5bGUtPnRvZ2dsZVByb3BlcnR5KHByb3BlcnR5SW5kZXgsIGRp
c2FibGUsIGVjKTsKICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICBpZiAoZGlzYWJsZSkKLSAg
ICAgICAgICAgIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUpOworICAgICAg
ICAgICAgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShpbnNwZWN0b3JTdHlsZS5jb3B5UmVmKCkpOwog
ICAgICAgICBlbHNlIGlmICghaW5zcGVjdG9yU3R5bGUtPmhhc0Rpc2FibGVkUHJvcGVydGllcygp
KQogICAgICAgICAgICAgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUtPmNzc1N0
eWxlKCkpOwogICAgICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKQEAgLTExOTUsNyArMTIw
Miw3IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCkK
ICAgICAgICAgbV9saXN0ZW5lci0+c3R5bGVTaGVldENoYW5nZWQodGhpcyk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxl
Rm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQorUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNT
U0lkJiBpZCkKIHsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQo
aWQpOwogICAgIGlmICghc3R5bGUpCkBAIC0xMjA3LDcgKzEyMTQsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNv
bnN0IEluc3BlYwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5
bGVTaGVldDo6cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGlu
c3BlY3RvclN0eWxlKQordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3Rv
clN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4mJiBpbnNwZWN0b3JTdHlsZSkKIHsKICAgICBt
X2luc3BlY3RvclN0eWxlcy5zZXQoaW5zcGVjdG9yU3R5bGUtPmNzc1N0eWxlKCksIGluc3BlY3Rv
clN0eWxlKTsKIH0KQEAgLTE0MTcsMjMgKzE0MjQsMjMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWls
ZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQorUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxp
c3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFydWxlTGlzdCkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0
KTsKIAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcmVmUnVsZUxpc3QgPSBydWxlTGlzdDsKICAg
ICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7Ci0gICAgY29sbGVjdEZsYXRSdWxlcyhyZWZSdWxl
TGlzdCwgJnJ1bGVzKTsKKyAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURjo6bW92ZShyZWZSdWxlTGlz
dCksICZydWxlcyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JSdWxlKHJ1bGVzLmF0KGkpLmdldCgpKSk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5
bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlz
dCwgQ1NTU3R5bGVSdWxlVmVjdG9yKiByZXN1bHQpCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmNvbGxlY3RGbGF0UnVsZXMoUmVmUHRyPENTU1J1bGVMaXN0PiYmIHJ1bGVMaXN0LCBDU1NTdHls
ZVJ1bGVWZWN0b3IqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAgICAgICByZXR1
cm47CkBAIC0xNDQ2LDE5ICsxNDUzLDE5IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29s
bGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCwgQ1NTCiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjaGlsZFJ1bGVMaXN0
ID0gYXNDU1NSdWxlTGlzdChydWxlKTsKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVMaXN0KQot
ICAgICAgICAgICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoY2hpbGRSdWxlTGlzdCwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURjo6bW92ZShjaGlsZFJ1bGVMaXN0
KSwgcmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlk
LCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcm
IGlkLCBSZWZQdHI8RWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFn
ZW50LCBpZCwgZWxlbWVudCwgb3JpZ2luLCBsaXN0ZW5lcikpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShwYWdlQWdlbnQsIGlkLCBX
VEY6Om1vdmUoZWxlbWVudCksIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUo
SW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9y
UGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYm
IGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFn
ZW50LCBpZCwgbnVsbHB0ciwgb3JpZ2luLCAiIiwgbGlzdGVuZXIpCi0gICAgLCBtX2VsZW1lbnQo
ZWxlbWVudCkKKyAgICAsIG1fZWxlbWVudChXVEY6Om1vdmUoZWxlbWVudCkpCiAgICAgLCBtX3J1
bGVTb3VyY2VEYXRhKG51bGxwdHIpCiAgICAgLCBtX2lzU3R5bGVUZXh0VmFsaWQoZmFsc2UpCiB7
CkBAIC0xNTMxLDEwICsxNTM4LDEwIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU6Omluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQorUmVmUHRy
PEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3Bl
Y3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQogewogICAgIEFTU0VSVF9V
TlVTRUQoaWQsICFpZC5vcmRpbmFsKCkpOwotICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlOwor
ICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlLmNvcHlSZWYoKTsKIH0KIAogQ1NTU3R5bGVEZWNs
YXJhdGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbmxpbmVTdHlsZSgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
aAppbmRleCBmZGJmNzhkLi5kZWNkMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTY0LDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KIAotICAgIGV4cGxpY2l0IEluc3BlY3RvckNTU0lkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCF2YWx1ZS0+Z2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJZCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IG9yZGluYWxWYWx1ZSA9IHZhbHVlLT5nZXQoIm9yZGluYWwiKTsKLSAgICAgICAgaWYg
KCFvcmRpbmFsVmFsdWUgfHwgIW9yZGluYWxWYWx1ZS0+YXNJbnRlZ2VyKG1fb3JkaW5hbCkpCisg
ICAgICAgIGludCBvcmRpbmFsVmFsdWU7CisgICAgICAgIGlmICghdmFsdWUtPmdldEludGVnZXIo
Im9yZGluYWwiLCBvcmRpbmFsVmFsdWUpKQogICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSAi
IjsKICAgICB9CiAKQEAgLTg3LDE1ICs4NiwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJRCB0eXBl
IGlzIGVpdGhlciBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQgb3IgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlSWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSUQ+
Ci0gICAgUGFzc1JlZlB0cjxJRD4gYXNQcm90b2NvbFZhbHVlKCkgY29uc3QKKyAgICBSZWZQdHI8
SUQ+IGFzUHJvdG9jb2xWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgUmVmUHRyPElEPiByZXN1
bHQgPSBJRDo6Y3JlYXRlKCkKKyAgICAgICAgcmV0dXJuIElEOjpjcmVhdGUoKQogICAgICAgICAg
ICAgLnNldFN0eWxlU2hlZXRJZChtX3N0eWxlU2hlZXRJZCkKLSAgICAgICAgICAgIC5zZXRPcmRp
bmFsKG1fb3JkaW5hbCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgICAg
ICAgICAgLnNldE9yZGluYWwobV9vcmRpbmFsKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAg
ICB9CiAKIHByaXZhdGU6CkBAIC0xMzYsMTIgKzEzNSwxMiBAQCBzdHJ1Y3QgSW5zcGVjdG9yU3R5
bGVQcm9wZXJ0eSB7CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlIGZpbmFsIDogcHVibGljIFJlZkNv
dW50ZWQ8SW5zcGVjdG9yU3R5bGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4gY3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNz
UmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBw
YXJlbnRTdHlsZVNoZWV0KTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlPiBjcmVhdGUo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9u
PiYmLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKICAgICB+SW5zcGVj
dG9yU3R5bGUoKTsKIAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiBidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHls
ZSgpIGNvbnN0OworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdDsKICAgICBib29sIGhhc0Rp
c2FibGVkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuICFtX2Rpc2FibGVkUHJvcGVydGllcy5p
c0VtcHR5KCk7IH0KICAgICBib29sIHNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleCwgYm9vbCBk
aXNhYmxlLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNTAsMTUgKzE0OSwxNSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0
ZToKLSAgICBJbnNwZWN0b3JTdHlsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFz
c1JlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldCk7CisgICAgSW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NT
SWQmIHN0eWxlSWQsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiYmLCBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2Ug
YWxpYXNlcyBhbmQgdXBkYXRlIGFsbCB0aGUgY3VycmVudCBjYWxsIHNpdGVzIHRvIHVzZSB0aGUg
bmV3IHB1YmxpYyBtZXRob2RzLgogICAgIGJvb2wgc3R5bGVUZXh0KFN0cmluZyogcmVzdWx0KSBj
b25zdCB7IHJldHVybiBnZXRUZXh0KHJlc3VsdCk7IH0KICAgICBib29sIGFwcGx5U3R5bGVUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkgeyBFeGNlcHRpb25Db2RlIGVjID0gMDsgcmV0dXJuIHNldFRl
eHQodGV4dCwgZWMpOyB9CiAKICAgICBib29sIHBvcHVsYXRlQWxsUHJvcGVydGllcyhWZWN0b3I8
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBzdHlsZVdpdGhQcm9wZXJ0aWVzKCkg
Y29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gZXh0cmFjdFNvdXJjZURh
dGEoKSBjb25zdDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4g
c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0OworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gZXh0cmFjdFNvdXJjZURhdGEoKSBjb25zdDsKICAgICBTdHJpbmcgc2hvcnRoYW5kVmFsdWUo
Y29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CiAgICAgU3RyaW5nIHNob3J0
aGFuZFByaW9yaXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0OwogICAg
IFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFu
ZFByb3BlcnR5KSBjb25zdDsKQEAgLTE4Miw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPEluc3BlY3Rv
clN0eWxlPj4gSW5zcGVjdG9yU3R5bGVNYXA7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYg
aWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVS
TCwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0
ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogICAgIHN0
YXRpYyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCk7
CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0xOTcsMTAgKzE5Niwx
MCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGRlbGV0ZVJ1bGUoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlRm9ySWQo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVl
dCgpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShD
U1NTdHlsZVJ1bGUqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBidWls
ZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
KTsKICAgICBib29sIHNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYsIGNvbnN0IFN0
cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBz
ZXRQcm9wZXJ0eVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUlu
ZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9sZFByb3Bl
cnR5VGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgdG9nZ2xlUHJvcGVydHkoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIEV4
Y2VwdGlvbkNvZGUmKTsKQEAgLTIxMywxNyArMjEyLDE3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0
b3JDU1NJZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVy
biBydWxlT3JTdHlsZUlkKHN0eWxlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5
bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRy
PENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7
CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJp
bmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50
VVJMLCBMaXN0ZW5lciopOwogCiAgICAgYm9vbCBjYW5CaW5kKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2Vy
QWdlbnQgJiYgbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luOjpVc2VyOyB9Ci0gICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5bGVJZChDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CisgICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5
bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAgICAgdmlydHVhbCBEb2N1bWVudCog
b3duZXJEb2N1bWVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7
CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9y
KENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJ
bmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBlbnN1cmVQYXJzZWREYXRhUmVhZHkoKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yU3R5bGU+IGluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5
bGU+IGluc3BlY3RvclN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOworICAgIHZpcnR1YWwgUmVmUHRyPEluc3Bl
Y3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0
eWxlPiYmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiopOwogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5z
cGVjdG9yU3R5bGUuCiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xh
cmF0aW9uKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMjMzLDcgKzIzMiw3
IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENTU1N0eWxlUnVsZT4+IENT
U1N0eWxlUnVsZVZlY3RvcjsKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGU7CiAKLSAg
ICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+LCBD
U1NTdHlsZVJ1bGVWZWN0b3IqIHJlc3VsdCk7CisgICAgc3RhdGljIHZvaWQgY29sbGVjdEZsYXRS
dWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+JiYsIENTU1N0eWxlUnVsZVZlY3RvciogcmVzdWx0KTsK
ICAgICBib29sIGNoZWNrUGFnZVN0eWxlU2hlZXQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IGJvb2wgZW5zdXJlVGV4dCgpIGNvbnN0OwogICAgIGJvb2wgZW5zdXJlU291cmNlRGF0YSgpOwpA
QCAtMjQzLDkgKzI0Miw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBvcmlnaW5hbFN0eWxlU2hlZXRU
ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICBib29sIHJlc291cmNlU3R5bGVTaGVldFRl
eHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgaW5saW5lU3R5bGVTaGVldFRleHQo
U3RyaW5nKiByZXN1bHQpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gYnVpbGRBcnJheUZv
clJ1bGVMaXN0KENTU1J1bGVMaXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1Nl
bGVjdG9yKik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVj
dG9yTGlzdD4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4+IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCopOworICAgIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0PiBidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUq
KTsKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgU3RyaW5nIG1f
aWQ7CkBAIC0yNjEsMjEgKzI2MCwyMSBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGUgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwg
UGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVmUHRyPEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0
ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoaWQsICFp
ZC5vcmRpbmFsKCkpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNv
bnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwg
UmVmUHRyPEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
cnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IG92ZXJy
aWRlIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVy
biBtX3J1bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CiAg
ICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25z
dCBJbnNwZWN0b3JDU1NJZCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZW1lbWJlcklu
c3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4pIG92ZXJyaWRlIHsgfQorICAgIHZp
cnR1YWwgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IElu
c3BlY3RvckNTU0lkJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlbWVtYmVySW5zcGVj
dG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiYmKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIG92ZXJy
aWRlIHsgfQogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5zcGVjdG9y
U3R5bGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5jcHAKaW5kZXggYmQzMjc4ZS4uOWFiOGYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtMTk3LDkgKzE5
Nyw5IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nCiAKICAgICAvLyBVc2UgYW4gaW5kZXBlbmRl
bnQgc3RvcHdhdGNoIGZvciBjb25zb2xlLWluaXRpYXRlZCBwcm9maWxpbmcsIHNpbmNlIHRoZSB1
c2VyIHdpbGwgZXhwZWN0IGl0CiAgICAgLy8gdG8gYmUgcmVsYXRpdmUgdG8gd2hlbiB0aGVpciBj
b21tYW5kIHdhcyBpc3N1ZWQuCi0gICAgUmVmUHRyPFN0b3B3YXRjaD4gcHJvZmlsZXJTdG9wd2F0
Y2ggPSBTdG9wd2F0Y2g6OmNyZWF0ZSgpOworICAgIFJlZjxTdG9wd2F0Y2g+IHByb2ZpbGVyU3Rv
cHdhdGNoID0gU3RvcHdhdGNoOjpjcmVhdGUoKTsKICAgICBwcm9maWxlclN0b3B3YXRjaC0+c3Rh
cnQoKTsKLSAgICBzdGFydFByb2ZpbGluZyhleGVjLCB0aXRsZSwgcHJvZmlsZXJTdG9wd2F0Y2gu
cmVsZWFzZSgpKTsKKyAgICBzdGFydFByb2ZpbGluZyhleGVjLCB0aXRsZSwgV1RGOjptb3ZlKHBy
b2ZpbGVyU3RvcHdhdGNoKSk7CiAKICAgICBtX3BlbmRpbmdDb25zb2xlUHJvZmlsZVJlY29yZHMu
YXBwZW5kKGNyZWF0ZVJlY29yZEVudHJ5KFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29u
c29sZVByb2ZpbGVEYXRhKHRpdGxlKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpDb25zb2xlUHJvZmls
ZSwgdHJ1ZSwgZnJhbWVGcm9tRXhlY1N0YXRlKGV4ZWMpKSk7CiB9CkBAIC0yMTcsNyArMjE3LDcg
QEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BG
cm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSoKICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSB8
fCByZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTQzo6UHJvZmls
ZT4gcHJvZmlsZSA9IHN0b3BQcm9maWxpbmcoZXhlYywgdGl0bGUpOwogICAgICAgICAgICAgaWYg
KHByb2ZpbGUpCi0gICAgICAgICAgICAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRQ
cm9maWxlKHJlY29yZC5kYXRhLmdldCgpLCBwcm9maWxlKTsKKyAgICAgICAgICAgICAgICBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUocmVjb3JkLmRhdGEuZ2V0KCksIHByb2Zp
bGUuY29weVJlZigpKTsKIAogICAgICAgICAgICAgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShyZWNv
cmQpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSoKICAgICAg
ICAgICAgIGlmICghbV9lbmFibGVkRnJvbUZyb250ZW5kICYmIG1fcGVuZGluZ0NvbnNvbGVQcm9m
aWxlUmVjb3Jkcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaW50ZXJuYWxTdG9wKCk7CiAK
LSAgICAgICAgICAgIHJldHVybiBwcm9maWxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om1vdmUocHJvZmlsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY0NywxNyArNjQ3
LDE3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlIHRv
UHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwcnBSZWNvcmQsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQordm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKLSAgICBwcnBSZWNvcmQt
PnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZh
bHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKKyAgICByZWNvcmQtPnNldFN0cmluZygidHlwZSIsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkp
KTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVF
dmVudD4gcmVjb3JkID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KHBycFJlY29yZCk7CisgICAgYXV0byByZWNv
cmRPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpU
aW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGOjptb3ZlKHJlY29yZCkpOwogCiAgICAgaWYg
KG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKQotICAgICAgICBzZW5kRXZlbnQocmVjb3JkLnJlbGVh
c2UoKSk7CisgICAgICAgIHNlbmRFdmVudChXVEY6Om1vdmUocmVjb3JkT2JqZWN0KSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHBhcmVudCA9IG1fcmVj
b3JkU3RhY2subGFzdCgpOwotICAgICAgICBwYXJlbnQuY2hpbGRyZW4tPnB1c2hPYmplY3QocmVj
b3JkLnJlbGVhc2UoKSk7CisgICAgICAgIHBhcmVudC5jaGlsZHJlbi0+cHVzaE9iamVjdChXVEY6
Om1vdmUocmVjb3JkKSk7CiAgICAgfQogfQogCkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5l
UmVjb3JkRW50cnkmIGUKICAgICBlbnRyeS5yZWNvcmQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
ImRhdGEiKSwgZW50cnkuZGF0YSk7CiAgICAgZW50cnkucmVjb3JkLT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImNoaWxkcmVuIiksIGVudHJ5LmNoaWxkcmVuKTsKICAgICBlbnRyeS5yZWNvcmQtPnNl
dERvdWJsZShBU0NJSUxpdGVyYWwoImVuZFRpbWUiKSwgdGltZXN0YW1wKCkpOwotICAgIGFkZFJl
Y29yZFRvVGltZWxpbmUoZW50cnkucmVjb3JkLCBlbnRyeS50eXBlKTsKKyAgICBhZGRSZWNvcmRU
b1RpbWVsaW5lKGVudHJ5LnJlY29yZC5jb3B5UmVmKCksIGVudHJ5LnR5cGUpOwogfQogCiB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGlu
ZVJlY29yZFR5cGUgdHlwZSkKQEAgLTcwNSwzNCArNzA1LDM0IEBAIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3Jk
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxs
U3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7Ci0gICAgcmVjb3JkLT5zZXRPYmplY3Qo
ImRhdGEiLCBkYXRhKTsKLSAgICBzZXRGcmFtZUlkZW50aWZpZXIocmVjb3JkLmdldCgpLCBmcmFt
ZSk7Ci0gICAgYWRkUmVjb3JkVG9UaW1lbGluZShyZWNvcmQucmVsZWFzZSgpLCB0eXBlKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENh
bGxTdGFja0RlcHRoIDogMCk7CisgICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEiLCBXVEY6Om1v
dmUoZGF0YSkpOworICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7
CisgICAgYWRkUmVjb3JkVG9UaW1lbGluZShXVEY6Om1vdmUocmVjb3JkKSwgdHlwZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBldmVudCkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZXZlbnQpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5k
RGlzcGF0Y2hlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IHJ1bnRpbWVDYXN0
IGlzIGEgaGFjay4gV2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1lbGluZUV2ZW50
IGRpcmVjdGx5IG5vdy4KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6
OlRpbWVsaW5lRXZlbnQ+IHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoZXZlbnQpOwot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKHJlY29yZENoZWNrZWQucmVs
ZWFzZSgpKTsKKyAgICBhdXRvIHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGOjpt
b3ZlKGV2ZW50KSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQoV1RG
Ojptb3ZlKHJlY29yZENoZWNrZWQpKTsKIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGlt
ZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRy
eShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQorSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVh
dGVSZWNvcmRFbnRyeShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6
OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21h
eENhbGxTdGFja0RlcHRoIDogMCk7Ci0gICAgc2V0RnJhbWVJZGVudGlmaWVyKHJlY29yZC5nZXQo
KSwgZnJhbWUpOwotICAgIHJldHVybiBUaW1lbGluZVJlY29yZEVudHJ5KHJlY29yZC5yZWxlYXNl
KCksIGRhdGEsIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSwgdHlwZSk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmlj
UmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJlQ2FsbFN0YWNrID8gbV9tYXhDYWxsU3RhY2tEZXB0
aCA6IDApOworICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7Cisg
ICAgcmV0dXJuIFRpbWVsaW5lUmVjb3JkRW50cnkoV1RGOjptb3ZlKHJlY29yZCksIFdURjo6bW92
ZShkYXRhKSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxT
dGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3Vy
cmVudFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3Jk
VHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBw
dXNoQ3VycmVudFJlY29yZChjcmVhdGVSZWNvcmRFbnRyeShkYXRhLCB0eXBlLCBjYXB0dXJlQ2Fs
bFN0YWNrLCBmcmFtZSkpOworICAgIHB1c2hDdXJyZW50UmVjb3JkKGNyZWF0ZVJlY29yZEVudHJ5
KFdURjo6bW92ZShkYXRhKSwgdHlwZSwgY2FwdHVyZUNhbGxTdGFjaywgZnJhbWUpKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjbGVhclJlY29yZFN0YWNrKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IDM1
MmExZjUuLjNlOGUxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuaApAQCAtMjI0LDE5ICsyMjQsMTkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGludGVybmFsU3RvcCgpOwogICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKIAotICAgIHZvaWQg
c2VuZEV2ZW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KTsKLSAgICB2
b2lkIGFwcGVuZFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBk
YXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsK
LSAgICB2b2lkIHB1c2hDdXJyZW50UmVjb3JkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+LCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJh
bWUqKTsKKyAgICB2b2lkIHNlbmRFdmVudChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiYpOworICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFj
aywgRnJhbWUqKTsKKyAgICB2b2lkIHB1c2hDdXJyZW50UmVjb3JkKFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxs
U3RhY2ssIEZyYW1lKik7CiAgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChjb25zdCBUaW1lbGlu
ZVJlY29yZEVudHJ5JiByZWNvcmQpIHsgbV9yZWNvcmRTdGFjay5hcHBlbmQocmVjb3JkKTsgfQog
Ci0gICAgVGltZWxpbmVSZWNvcmRFbnRyeSBjcmVhdGVSZWNvcmRFbnRyeShQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wg
Y2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0
ZVJlY29yZEVudHJ5KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBkYXRhLCBU
aW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKIAogICAg
IHZvaWQgc2V0RnJhbWVJZGVudGlmaWVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiByZWNv
cmQsIEZyYW1lKik7CiAKICAgICB2b2lkIGRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGlt
ZWxpbmVSZWNvcmRFbnRyeSYpOwogICAgIHZvaWQgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRp
bWVsaW5lUmVjb3JkVHlwZSk7CiAKLSAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4sIFRpbWVsaW5lUmVjb3JkVHlwZSk7Cisg
ICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKICAgICB2b2lkIGNsZWFyUmVjb3JkU3RhY2so
KTsKIAogICAgIHZvaWQgbG9jYWxUb1BhZ2VRdWFkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IExheW91dFJlY3QmLCBGbG9hdFF1YWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4IDUyYThjMDcuLmNhNjllYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcApA
QCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2Nvbm5lY3RG
cm9tV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkCiAgICAgICAgIGVycm9y
ID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIgaXMgZ29uZSIpOwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdv
cmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbWVzc2FnZSkKK3ZvaWQgSW5z
cGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9y
LCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkK
IHsKICAgICBXb3JrZXJGcm9udGVuZENoYW5uZWwqIGNoYW5uZWwgPSBtX2lkVG9DaGFubmVsLmdl
dCh3b3JrZXJJZCk7CiAgICAgaWYgKGNoYW5uZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCmluZGV4IDM5YmU2ZDAuLjY4NjlkNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCkBAIC02
OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FuSW5zcGVjdFdvcmtlcnMo
RXJyb3JTdHJpbmcmLCBib29sKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3RU
b1dvcmtlcihFcnJvclN0cmluZyYsIGludCB3b3JrZXJJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGRpc2Nvbm5lY3RGcm9tV29ya2VyKEVycm9yU3RyaW5nJiwgaW50IHdvcmtlcklkKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmlu
ZyYsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9Xb3Jr
ZXIoRXJyb3JTdHJpbmcmLCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJpbmcmLCBib29sIHZhbHVlKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3Jr
UmVzb3VyY2VzRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291
cmNlc0RhdGEuY3BwCmluZGV4IGRlZDY1NGIuLmU0YTI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtNTEsMTcgKzUxLDE3
IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAot
UGFzc1JlZlB0cjxYSFJSZXBsYXlEYXRhPiBYSFJSZXBsYXlEYXRhOjpjcmVhdGUoY29uc3QgU3Ry
aW5nICZtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1E
YXRhPiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRl
Q3JlZGVudGlhbHMpCitSZWY8WEhSUmVwbGF5RGF0YT4gWEhSUmVwbGF5RGF0YTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyAmbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZv
cm1EYXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGlu
Y2x1ZGVDcmVkZW50aWFscykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhIUlJlcGxheURh
dGEobWV0aG9kLCB1cmwsIGFzeW5jLCBmb3JtRGF0YSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRp
YWxzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgWEhSUmVwbGF5RGF0YShtZXRob2QsIHVy
bCwgYXN5bmMsIFdURjo6bW92ZShmb3JtRGF0YSksIGhlYWRlcnMsIGluY2x1ZGVDcmVkZW50aWFs
cykpOwogfQogCiAKLVhIUlJlcGxheURhdGE6OlhIUlJlcGxheURhdGEoY29uc3QgU3RyaW5nICZt
ZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBm
b3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVu
dGlhbHMpCitYSFJSZXBsYXlEYXRhOjpYSFJSZXBsYXlEYXRhKGNvbnN0IFN0cmluZyAmbWV0aG9k
LCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1EYXRhPiYmIGZvcm1EYXRh
LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykK
ICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKICAgICAsIG1fdXJsKHVybCkKICAgICAsIG1fYXN5bmMo
YXN5bmMpCi0gICAgLCBtX2Zvcm1EYXRhKGZvcm1EYXRhKQorICAgICwgbV9mb3JtRGF0YShXVEY6
Om1vdmUoZm9ybURhdGEpKQogICAgICwgbV9oZWFkZXJzKGhlYWRlcnMpCiAgICAgLCBtX2luY2x1
ZGVDcmVkZW50aWFscyhpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oCmluZGV4IGMyMzY5NWQuLjUzOTM4ODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5o
CkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiAKIGNsYXNzIFhI
UlJlcGxheURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxYSFJSZXBsYXlEYXRhPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WEhSUmVwbGF5RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyAmbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwg
Y29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpOwor
ICAgIHN0YXRpYyBSZWY8WEhSUmVwbGF5RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmluZyAmbWV0aG9k
LCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYsIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKTsKIAogICAgIGNvbnN0
IFN0cmluZyYgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KICAgICBjb25zdCBV
UkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9o
ZWFkZXJzOyB9CiAgICAgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMoKSBjb25zdCB7IHJldHVybiBt
X2luY2x1ZGVDcmVkZW50aWFsczsgfQogcHJpdmF0ZToKLSAgICBYSFJSZXBsYXlEYXRhKGNvbnN0
IFN0cmluZyAmbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1E
YXRhPiwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlh
bHMpOworICAgIFhIUlJlcGxheURhdGEoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYs
IGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVh
ZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpOwogCiAgICAgU3RyaW5nIG1fbWV0aG9kOwog
ICAgIFVSTCBtX3VybDsKQEAgLTEwNywxMSArMTA3LDExIEBAIHB1YmxpYzoKICAgICAgICAgU3Ry
aW5nIHRleHRFbmNvZGluZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7
IH0KICAgICAgICAgdm9pZCBzZXRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgdGV4dEVu
Y29kaW5nTmFtZSkgeyBtX3RleHRFbmNvZGluZ05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lOyB9CiAK
LSAgICAgICAgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNvZGVyOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVjb2RlcihQYXNzUmVmUHRy
PFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIpIHsgbV9kZWNvZGVyID0gZGVjb2RlcjsgfQor
ICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVjb2Rlci5jb3B5UmVmKCk7IH0KKyAgICAgICAgdm9pZCBzZXREZWNvZGVyKFJlZlB0
cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiYmIGRlY29kZXIpIHsgbV9kZWNvZGVyID0gV1RGOjptb3Zl
KGRlY29kZXIpOyB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgICAgIHZvaWQgc2V0QnVmZmVyKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpIHsgbV9idWZmZXIgPSBidWZmZXI7IH0KKyAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIu
Y29weVJlZigpOyB9CisgICAgICAgIHZvaWQgc2V0QnVmZmVyKFJlZlB0cjxTaGFyZWRCdWZmZXI+
JiYgYnVmZmVyKSB7IG1fYnVmZmVyID0gV1RGOjptb3ZlKGJ1ZmZlcik7IH0KIAogICAgICAgICBD
YWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJl
c291cmNlOyB9CiAgICAgICAgIHZvaWQgc2V0Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlKSB7IG1fY2FjaGVkUmVzb3VyY2UgPSBjYWNoZWRSZXNvdXJjZTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNw
cAppbmRleCA4MTliZmRiLi43ZTI0MDRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKQEAgLTUyLDkgKzUyLDkgQEAgdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVj
b3JkKGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCkKK1JlZjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChkb3Vi
bGUgc3RhcnRUaW1lLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVjb3JkID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHJlY29yZC0+c2V0RG91YmxlKCJzdGFydFRpbWUiLCBzdGFydFRpbWUpOwogCiAgICAgaWYgKG1h
eENhbGxTdGFja0RlcHRoKSB7CkBAIC02MiwxODUgKzYyLDE4NSBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKGRv
dWJsZSBzdAogICAgICAgICBpZiAoc3RhY2tUcmFjZSAmJiBzdGFja1RyYWNlLT5zaXplKCkpCiAg
ICAgICAgICAgICByZWNvcmQtPnNldFZhbHVlKCJzdGFja1RyYWNlIiwgc3RhY2tUcmFjZS0+YnVp
bGRJbnNwZWN0b3JBcnJheSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlY29yZC5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShyZWNvcmQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVCYWNrZ3JvdW5kUmVjb3JkKGRv
dWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkTmFtZSkKK1JlZjxJbnNwZWN0b3JP
YmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQmFja2dyb3VuZFJlY29yZChkb3Vi
bGUgc3RhcnRUaW1lLCBjb25zdCBTdHJpbmcmIHRocmVhZE5hbWUpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVjb3JkID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIHJlY29yZC0+c2V0RG91YmxlKCJzdGFydFRpbWUiLCBzdGFydFRpbWUpOwogICAgIHJlY29y
ZC0+c2V0U3RyaW5nKCJ0aHJlYWQiLCB0aHJlYWROYW1lKTsKLSAgICByZXR1cm4gcmVjb3JkLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlY29yZCk7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdDRXZlbnREYXRh
KGNvbnN0IHNpemVfdCB1c2VkSGVhcFNpemVEZWx0YSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90IHVzZWRI
ZWFwU2l6ZURlbHRhKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIoInVzZWRIZWFw
U2l6ZURlbHRhIiwgdXNlZEhlYXBTaXplRGVsdGEpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNv
bnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpCitSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3Qg
U3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRh
LT5zZXRTdHJpbmcoInNjcmlwdE5hbWUiLCBzY3JpcHROYW1lKTsKICAgICBkYXRhLT5zZXRJbnRl
Z2VyKCJzY3JpcHRMaW5lIiwgc2NyaXB0TGluZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgp
OworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShj
b25zdCBTdHJpbmcmIHRpdGxlKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVDb25zb2xlUHJvZmlsZURhdGEoY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInRpdGxlIiwgdGl0bGUpOwotICAgIHJldHVy
biBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9i
ZVNhbXBsZURhdGEoY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25l
ZCBzYW1wbGVJZCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlv
biwgdW5zaWduZWQgc2FtcGxlSWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcihB
U0NJSUxpdGVyYWwoInByb2JlSWQiKSwgYWN0aW9uLmlkZW50aWZpZXIpOwogICAgIGRhdGEtPnNl
dEludGVnZXIoQVNDSUlMaXRlcmFsKCJzYW1wbGVJZCIpLCBzYW1wbGVJZCk7Ci0gICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50
RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50JiBldmVudCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZlbnREaXNwYXRjaERhdGEoY29uc3QgRXZlbnQm
IGV2ZW50KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygidHlwZSIsIGV2ZW50LnR5
cGUoKS5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBX
VEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1lckRhdGEoaW50IHRpbWVySWQpCitSZWY8
SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1l
ckRhdGEoaW50IHRpbWVySWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidGlt
ZXJJZCIsIHRpbWVySWQpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQg
dGltZW91dCwgYm9vbCBzaW5nbGVTaG90KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQgdGlt
ZW91dCwgYm9vbCBzaW5nbGVTaG90KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIo
InRpbWVySWQiLCB0aW1lcklkKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0aW1lb3V0IiwgdGlt
ZW91dCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigic2luZ2xlU2hvdCIsIHNpbmdsZVNob3QpOwot
ICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwgaW50IHJlYWR5
U3RhdGUpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICAgZGF0
YS0+c2V0SW50ZWdlcigicmVhZHlTdGF0ZSIsIHJlYWR5U3RhdGUpOwotICAgIHJldHVybiBkYXRh
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVYSFJMb2FkRGF0
YShjb25zdCBTdHJpbmcmIHVybCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwotICAgIHJldHVybiBkYXRhLnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlwdERh
dGEoY29uc3QgU3RyaW5nJiB1cmwsIGRvdWJsZSBsaW5lTnVtYmVyKQorUmVmPEluc3BlY3Rvck9i
amVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlwdERhdGEoY29u
c3QgU3RyaW5nJiB1cmwsIGRvdWJsZSBsaW5lTnVtYmVyKQogewotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEt
PnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJsaW5lTnVtYmVy
IiwgbGluZU51bWJlcik7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBX
VEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1l
U3RhbXBEYXRhKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5z
ZXRTdHJpbmcoIm1lc3NhZ2UiLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVl
c3REYXRhKGNvbnN0IFN0cmluZyYgdXJsKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwot
ICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YShjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIGRhdGEtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgICBkYXRh
LT5zZXRTdHJpbmcoInVybCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOwogICAgIGRhdGEtPnNl
dFN0cmluZygicmVxdWVzdE1ldGhvZCIsIHJlcXVlc3QuaHR0cE1ldGhvZCgpKTsKLSAgICByZXR1
cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVz
b3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICAg
ZGF0YS0+c2V0SW50ZWdlcigic3RhdHVzQ29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkp
OwogICAgIGRhdGEtPnNldFN0cmluZygibWltZVR5cGUiLCByZXNwb25zZS5taW1lVHlwZSgpKTsK
LSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBib29sIGRp
ZEZhaWwsIGRvdWJsZSBmaW5pc2hUaW1lKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZUZpbmlzaERhdGEoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGJvb2wgZGlkRmFpbCwgZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldEJv
b2xlYW4oImRpZEZhaWwiLCBkaWRGYWlsKTsKICAgICBpZiAoZmluaXNoVGltZSkKICAgICAgICAg
ZGF0YS0+c2V0RG91YmxlKCJuZXR3b3JrVGltZSIsIGZpbmlzaFRpbWUpOwotICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZl
UmVzb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKQorUmVmPElu
c3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZlUmVzb3Vy
Y2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKQogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIGRhdGEtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgICBkYXRhLT5z
ZXRJbnRlZ2VyKCJlbmNvZGVkRGF0YUxlbmd0aCIsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGRhdGEu
cmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUxheW91dERhdGEo
dW5zaWduZWQgZGlydHlPYmplY3RzLCB1bnNpZ25lZCB0b3RhbE9iamVjdHMsIGJvb2wgcGFydGlh
bExheW91dCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0
cywgYm9vbCBwYXJ0aWFsTGF5b3V0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIo
ImRpcnR5T2JqZWN0cyIsIGRpcnR5T2JqZWN0cyk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidG90
YWxPYmplY3RzIiwgdG90YWxPYmplY3RzKTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJwYXJ0aWFs
TGF5b3V0IiwgcGFydGlhbExheW91dCk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAg
IHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9Ci0gICAgCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3Qg
U3RyaW5nJiBpbWFnZVR5cGUpCisKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygiaW1hZ2VUeXBlIiwgaW1hZ2VUeXBlKTsK
LSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUpCitSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc2l6ZUltYWdlRGF0YShib29sIHNo
b3VsZENhY2hlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oImNhY2hlZCIsIHNo
b3VsZENhY2hlKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6
bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlTWFya0RhdGEoYm9vbCBpc01haW5GcmFtZSkKK1JlZjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTWFya0RhdGEoYm9vbCBpc01h
aW5GcmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJpc01haW5GcmFtZSIs
IGlzTWFpbkZyYW1lKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdU
Rjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YSh1bnNpZ25lZCBzdGFydExpbmUpCitS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhcnNlSFRN
TERhdGEodW5zaWduZWQgc3RhcnRMaW5lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVn
ZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQg
Y2FsbGJhY2tJZCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRhKGludCBjYWxsYmFja0lkKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IGRhdGEtPnNldEludGVnZXIoImlkIiwgY2FsbGJhY2tJZCk7Ci0gICAgcmV0dXJuIGRhdGEucmVs
ZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBjcmVhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKQEAg
LTI1NCwxNCArMjU0LDE0IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjcmVh
dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICBhcnJheS0+cHVzaERvdWJsZShxdWFk
LnAzKCkueSgpKTsKICAgICBhcnJheS0+cHVzaERvdWJsZShxdWFkLnA0KCkueCgpKTsKICAgICBh
cnJheS0+cHVzaERvdWJsZShxdWFkLnA0KCkueSgpKTsKLSAgICByZXR1cm4gYXJyYXkucmVsZWFz
ZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYXJyYXkpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIGRhdGEtPnNldEFycmF5KCJjbGlwIiwgY3JlYXRlUXVhZChxdWFkKSk7Ci0gICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKIHZvaWQg
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290KEluc3BlY3Rvck9iamVjdCog
ZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQpAQCAtMjY5LDIzICsyNjksMjQgQEAgdm9pZCBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yT2JqZWN0KiBk
YXRhLCBjb25zdCBGbG9hdFEKICAgICBkYXRhLT5zZXRBcnJheSgicm9vdCIsIGNyZWF0ZVF1YWQo
cXVhZCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVBy
b2ZpbGVOb2RlQ2FsbD4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9k
ZTo6Q2FsbCYgY2FsbCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxl
Tm9kZUNhbGw+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6UHJvZmlsZU5vZGU6OkNh
bGwmIGNhbGwpCiB7Ci0gICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5v
ZGVDYWxsPiByZXN1bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbDo6
Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNh
bGw6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGFydFRpbWUoY2FsbC5zdGFydFRpbWUoKSkKLSAg
ICAgICAgLnNldFRvdGFsVGltZShjYWxsLmVsYXBzZWRUaW1lKCkpOwotICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOworICAgICAgICAuc2V0VG90YWxUaW1lKGNhbGwuZWxhcHNlZFRpbWUoKSkK
KyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlRp
bWVsaW5lOjpDUFVQcm9maWxlTm9kZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQ
cm9maWxlTm9kZSogbm9kZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9m
aWxlTm9kZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9kZSogbm9k
ZSkKIHsKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BV
UHJvZmlsZU5vZGVDYWxsPj4gY2FsbHMgPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVs
aW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNhbGxzID0gUHJv
dG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPjo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChjb25zdCBKU0M6OlByb2ZpbGVOb2RlOjpDYWxsJiBjYWxsIDogbm9k
ZS0+Y2FsbHMoKSkKICAgICAgICAgY2FsbHMtPmFkZEl0ZW0oYnVpbGRJbnNwZWN0b3JPYmplY3Qo
Y2FsbCkpOwogCi0gICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+
IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU6OmNyZWF0ZSgpCisg
ICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlOjpjcmVh
dGUoKQogICAgICAgICAuc2V0SWQobm9kZS0+aWQoKSkKLSAgICAgICAgLnNldENhbGxzKGNhbGxz
LnJlbGVhc2UoKSk7CisgICAgICAgIC5zZXRDYWxscyhXVEY6Om1vdmUoY2FsbHMpKQorICAgICAg
ICAucmVsZWFzZSgpOwogCiAgICAgaWYgKCFub2RlLT5mdW5jdGlvbk5hbWUoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJlc3VsdC0+c2V0RnVuY3Rpb25OYW1lKG5vZGUtPmZ1bmN0aW9uTmFtZSgpKTsK
QEAgLTI5NywyOCArMjk4LDI3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpUaW1lbGlu
ZTo6Q1BVUHJvZmlsZU5vZGU+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KGNvbnN0CiAgICAgfQogCiAg
ICAgaWYgKCFub2RlLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+PiBjaGlsZHJl
biA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPjo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9j
b2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKFJl
ZlB0cjxKU0M6OlByb2ZpbGVOb2RlPiBwcm9maWxlTm9kZSA6IG5vZGUtPmNoaWxkcmVuKCkpCiAg
ICAgICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZEluc3BlY3Rvck9iamVjdChwcm9maWxl
Tm9kZS5nZXQoKSkpOwotICAgICAgICByZXN1bHQtPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRDaGlsZHJlbihXVEY6Om1vdmUoY2hpbGRyZW4pKTsKICAgICB9CiAK
LSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3Vs
dCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmls
ZT4gYnVpbGRQcm9maWxlSW5zcGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6UHJvZmlsZSogcHJvZmls
ZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlPiBidWlsZFByb2Zp
bGVJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlKiBwcm9maWxlKQogewotICAgIFJl
ZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4+
IHJvb3ROb2RlcyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2Zp
bGVOb2RlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByb290Tm9kZXMgPSBQcm90b2NvbDo6QXJyYXk8
UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOwogICAgIGZvciAo
UmVmUHRyPEpTQzo6UHJvZmlsZU5vZGU+IHByb2ZpbGVOb2RlIDogcHJvZmlsZS0+cm9vdE5vZGUo
KS0+Y2hpbGRyZW4oKSkKICAgICAgICAgcm9vdE5vZGVzLT5hZGRJdGVtKGJ1aWxkSW5zcGVjdG9y
T2JqZWN0KHByb2ZpbGVOb2RlLmdldCgpKSk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OlRpbWVs
aW5lOjpDUFVQcm9maWxlPiByZXN1bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU6
OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRSb290Tm9kZXMocm9vdE5vZGVzKTsKLQotICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVBy
b2ZpbGU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRSb290Tm9kZXMoV1RGOjptb3ZlKHJvb3ROb2Rl
cykpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjphcHBlbmRQcm9maWxlKEluc3BlY3Rvck9iamVjdCogZGF0YSwgUGFzc1JlZlB0cjxKU0M6OlBy
b2ZpbGU+IHByb2ZpbGUpCit2b2lkIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kUHJvZmls
ZShJbnNwZWN0b3JPYmplY3QqIGRhdGEsIFJlZlB0cjxKU0M6OlByb2ZpbGU+JiYgcHJvZmlsZSkK
IHsKICAgICBkYXRhLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInByb2ZpbGUiKSwgYnVpbGRQcm9m
aWxlSW5zcGVjdG9yT2JqZWN0KHByb2ZpbGUuZ2V0KCkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAppbmRleCBiYjViOWU4Li4wZWY1
NjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oCkBAIC01NSw3NCArNTUsNzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgVGltZWxpbmVSZWNvcmRGYWN0b3J5IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljUmVjb3Jk
KGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCk7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCYWNrZ3JvdW5k
UmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkKTsKKyAgICAgICAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1JlY29y
ZChkb3VibGUgc3RhcnRUaW1lLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpOworICAgICAgICBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCYWNrZ3JvdW5kUmVjb3Jk
KGRvdWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkKTsKIAotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR0NFdmVudERh
dGEoY29uc3Qgc2l6ZV90IHVzZWRIZWFwU2l6ZURlbHRhKTsKKyAgICAgICAgc3RhdGljIFJlZjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90
IHVzZWRIZWFwU2l6ZURlbHRhKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcm
IHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShjb25z
dCBTdHJpbmcmIHRpdGxlKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUs
IGludCBzY3JpcHRMaW5lKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlQ29uc29sZVByb2ZpbGVEYXRhKGNvbnN0IFN0cmluZyYgdGl0bGUpOwog
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVQcm9iZVNhbXBsZURhdGEoY29uc3QgSW5zcGVjdG9yOjpTY3JpcHRCcmVha3BvaW50QWN0
aW9uJiwgdW5zaWduZWQgc2FtcGxlSWQpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9iZVNhbXBsZURhdGEoY29uc3QgSW5zcGVjdG9yOjpT
Y3JpcHRCcmVha3BvaW50QWN0aW9uJiwgdW5zaWduZWQgc2FtcGxlSWQpOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmVudERp
c3BhdGNoRGF0YShjb25zdCBFdmVudCYpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmVudERpc3BhdGNoRGF0YShjb25zdCBFdmVudCYpOwog
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVHZW5lcmljVGltZXJEYXRhKGludCB0aW1lcklkKTsKKyAgICAgICAgc3RhdGljIFJlZjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGlt
ZXJJZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBi
b29sIHNpbmdsZVNob3QpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90KTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlWEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEoY29uc3QgU3Ry
aW5nJiB1cmwsIGludCByZWFkeVN0YXRlKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlWEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEoY29uc3QgU3Ry
aW5nJiB1cmwsIGludCByZWFkeVN0YXRlKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5n
JiB1cmwpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCk7CiAKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2YWx1YXRlU2NyaXB0
RGF0YShjb25zdCBTdHJpbmcmLCBkb3VibGUgbGluZU51bWJlcik7CisgICAgICAgIHN0YXRpYyBS
ZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShj
b25zdCBTdHJpbmcmLCBkb3VibGUgbGluZU51bWJlcik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVRpbWVTdGFtcERhdGEoY29u
c3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3QgU3RyaW5nJik7CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlU2Vu
ZFJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29u
c3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmKTsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlUmVjZWl2ZVJlc3BvbnNlRGF0YShjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZWNlaXZl
UmVzb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKTsKKyAgICAg
ICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVjZWl2ZVJl
c291cmNlRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgaW50IGxlbmd0aCk7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJl
c291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRGYWlsLCBk
b3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgYm9vbCBkaWRGYWlsLCBkb3VibGUgZmluaXNoVGltZSk7CiAKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUxheW91dERhdGEodW5z
aWduZWQgZGlydHlPYmplY3RzLCB1bnNpZ25lZCB0b3RhbE9iamVjdHMsIGJvb2wgcGFydGlhbExh
eW91dCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZUxheW91dERhdGEodW5zaWduZWQgZGlydHlPYmplY3RzLCB1bnNpZ25lZCB0b3RhbE9iamVj
dHMsIGJvb2wgcGFydGlhbExheW91dCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZURlY29kZUltYWdlRGF0YShjb25zdCBTdHJp
bmcmIGltYWdlVHlwZSk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZURlY29kZUltYWdlRGF0YShjb25zdCBTdHJpbmcmIGltYWdlVHlwZSk7CiAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZVJlc2l6ZUltYWdlRGF0YShib29sIHNob3VsZENhY2hlKTsKKyAgICAgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wg
c2hvdWxkQ2FjaGUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKTsKKyAgICAgICAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlTWFya0RhdGEoYm9v
bCBpc01haW5GcmFtZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVBhcnNlSFRNTERhdGEodW5zaWduZWQgc3RhcnRMaW5lKTsK
KyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUGFy
c2VIVE1MRGF0YSh1bnNpZ25lZCBzdGFydExpbmUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVBbmltYXRpb25GcmFtZURhdGEo
aW50IGNhbGxiYWNrSWQpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGVBbmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNrSWQpOwogCi0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQ
YWludERhdGEoY29uc3QgRmxvYXRRdWFkJik7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAog
ICAgICAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBh
cHBlbmRQcm9maWxlKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiwgUGFzc1JlZlB0cjxKU0M6
OlByb2ZpbGU+KTsKKyAgICAgICAgc3RhdGljIHZvaWQgYXBwZW5kUHJvZmlsZShJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCosIFJlZlB0cjxKU0M6OlByb2ZpbGU+JiYpOwogCiAjaWYgRU5BQkxF
KFdFQl9TT0NLRVRTKQotICAgICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVdlYlNvY2tldENyZWF0ZURhdGEodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKKyAg
ICAgICAgc3RhdGljIGlubGluZSBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0
ZVdlYlNvY2tldENyZWF0ZURhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKICAgICAgICAgewotICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgZGF0YS0+c2V0SW50ZWdlcigiaWRlbnRpZmllciIsIGlkZW50aWZpZXIpOwogICAg
ICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwuc3RyaW5nKCkpOwogICAgICAgICAg
ICAgaWYgKCFwcm90b2NvbC5pc051bGwoKSkKICAgICAgICAgICAgICAgICBkYXRhLT5zZXRTdHJp
bmcoIndlYlNvY2tldFByb3RvY29sIiwgcHJvdG9jb2wpOwotICAgICAgICAgICAgcmV0dXJuIGRh
dGEucmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyKQorICAgICAgICBzdGF0aWMgaW5saW5lIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gY3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGRhdGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJp
ZGVudGlmaWVyIiwgaWRlbnRpZmllcik7Ci0gICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNl
KCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogICAgICAgICB9CiAjZW5k
aWYKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGFiYTk4ZDIuLjBkNWIxM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKQEAgLTE3Miw5ICsxNzIsOSBAQCB2b2lkIFdvcmtlckluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiBzYwogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcHdhdGNoPiBXb3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQorUmVmPFN0b3B3YXRjaD4gV29y
a2VySW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkKIHsKLSAgICByZXR1
cm4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAgcmV0dXJuIG1fZXhlY3V0aW9uU3RvcHdhdGNo
LmNvcHlSZWYoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZDQ5
OWExOS4uZTk0ODIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
ckluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VySW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kSW5pdGlhbGl6ZWQoKSBv
dmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1
dGlvblN0b3B3YXRjaCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmPFdURjo6U3RvcHdhdGNo
PiBleGVjdXRpb25TdG9wd2F0Y2goKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOwpAQCAtODUsNyArODUsNyBAQCBwcml2YXRl
OgogICAgIFdvcmtlclJ1bnRpbWVBZ2VudCogbV9ydW50aW1lQWdlbnQ7CiAgICAgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw+IG1fZnJvbnRlbmRDaGFubmVsOwotICAgIFJlZlB0cjxX
VEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAgUmVmPFdURjo6U3RvcHdh
dGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBWZWN0b3I8SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llLCAyPiBtX2luamVjdGVkU2NyaXB0SW5zdHJ1bWVu
dGF0aW9uQ29va2llczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCmluZGV4IGNlY2FmMWYuLmYwNzI3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwCkBAIC0xMDYsMTggKzEwNiwxOCBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xp
ZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbgogICAgIGFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgdXJsLCBsaW5lLCBj
b2x1bW4sIDAsIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCksIHJlcXVlc3RJ
ZGVudGlmaWVyKTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6YWRkTWVzc2FnZShNZXNz
YWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIFBhZ2VDb25z
b2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBj
YWxsU3RhY2spCiB7Ci0gICAgYWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBTdHJp
bmcoKSwgMCwgMCwgY2FsbFN0YWNrLCAwKTsKKyAgICBhZGRNZXNzYWdlKHNvdXJjZSwgbGV2ZWws
IG1lc3NhZ2UsIFN0cmluZygpLCAwLCAwLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgMCk7CiB9CiAK
LXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHVybCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojph
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3Rh
Y2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
cikKIHsKICAgICBpZiAobXV0ZUNvdW50ICYmIHNvdXJjZSAhPSBNZXNzYWdlU291cmNlOjpDb25z
b2xlQVBJKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY2FsbFN0YWNrKQotICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUobV9wYWdlLCBzb3Vy
Y2UsIE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBjYWxsU3RhY2ssIHJlcXVlc3RJ
ZGVudGlmaWVyKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdl
VG9Db25zb2xlKG1fcGFnZSwgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2Fn
ZSwgV1RGOjptb3ZlKGNhbGxTdGFjayksIHJlcXVlc3RJZGVudGlmaWVyKTsKICAgICBlbHNlCiAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShtX3Bh
Z2UsIHNvdXJjZSwgTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2UsIHVybCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogCkBAIC0xMzYs
MTMgKzEzNiwxMSBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbgogfQogCiAKLXZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cykKK3ZvaWQgUGFnZUNvbnNvbGVDbGll
bnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJn
dW1lbnRzID0gcHJwQXJndW1lbnRzOwotCiAgICAgU3RyaW5nIG1lc3NhZ2U7CiAgICAgYm9vbCBn
b3RNZXNzYWdlID0gYXJndW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcobWVzc2FnZSk7
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKG1fcGFn
ZSwgTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGV4ZWMs
IGFyZ3VtZW50cyk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9D
b25zb2xlKG1fcGFnZSwgTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1l
c3NhZ2UsIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpKTsKIAogICAgIGlmIChtX3BhZ2UudXNl
c0VwaGVtZXJhbFNlc3Npb24oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDEyICsxNTMsMTIg
QEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGwKICAgICB9CiAKICAgICBpZiAobV9wYWdlLnNldHRp
bmdzKCkubG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQoKSB8fCBQYWdlQ29u
c29sZUNsaWVudDo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCi0gICAgICAgIENvbnNvbGVDbGll
bnQ6OnByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1lc3NhZ2VTb3VyY2U6OkNvbnNv
bGVBUEksIHR5cGUsIGxldmVsLCBleGVjLCBhcmd1bWVudHMucmVsZWFzZSgpKTsKKyAgICAgICAg
Q29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNv
dXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMp
KTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6Y291bnQoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIFBhZ2VDb25z
b2xlQ2xpZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25z
b2xlQ291bnQobV9wYWdlLCBleGVjLCBhcmd1bWVudHMpOworICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29uc29sZUNvdW50KG1fcGFnZSwgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cykp
OwogfQogCiB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQpAQCAtMTcxLDcgKzE2OSw3IEBAIHZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
dGl0bGUpCiB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIGlmIChSZWZQdHI8SlNDOjpQcm9m
aWxlPiBwcm9maWxlID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nKG1f
cGFnZSwgZXhlYywgdGl0bGUpKQotICAgICAgICBtX3Byb2ZpbGVzLmFwcGVuZChwcm9maWxlLnJl
bGVhc2UoKSk7CisgICAgICAgIG1fcHJvZmlsZXMuYXBwZW5kKFdURjo6bW92ZShwcm9maWxlKSk7
CiB9CiAKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQpAQCAtMTgyLDEyICsxODAsMTIgQEAgdm9pZCBQYWdlQ29uc29sZUNs
aWVudDo6dGltZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB2b2lkIFBh
Z2VDb25zb2xlQ2xpZW50Ojp0aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIHRpdGxlKQogewogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVh
dGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xlKGV4ZWMsIDEpKTsKLSAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKG1fcGFnZS5tYWluRnJhbWUoKSwgdGl0bGUs
IGNhbGxTdGFjay5yZWxlYXNlKCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3Rv
cENvbnNvbGVUaW1pbmcobV9wYWdlLm1haW5GcmFtZSgpLCB0aXRsZSwgV1RGOjptb3ZlKGNhbGxT
dGFjaykpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAoSlNDOjpFeGVj
U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBQYWdl
Q29uc29sZUNsaWVudDo6dGltZVN0YW1wKEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
b25zb2xlVGltZVN0YW1wKG1fcGFnZS5tYWluRnJhbWUoKSwgYXJndW1lbnRzKTsKKyAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAobV9wYWdlLm1haW5GcmFtZSgp
LCBXVEY6Om1vdmUoYXJndW1lbnRzKSk7CiB9CiAKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmNs
ZWFyUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29s
ZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5oCmluZGV4
IGI2ZjYxOTkuLmIyZDQ3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmgKQEAgLTU2LDIxICs1NiwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgbXV0ZSgpOwog
ICAgIHN0YXRpYyB2b2lkIHVubXV0ZSgpOwogCi0gICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiA9IG51bGxwdHIsIEpTQzo6RXhl
Y1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsK
LSAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsK
KyAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxT
dGFjaz4mJiA9IG51bGxwdHIsIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjaz4mJik7CiAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3RJZGVudGlmaWVyID0gMCwgRG9jdW1lbnQqID0gbnVsbHB0cik7CiAKICAgICBjb25zdCBQ
cm9maWxlc0FycmF5JiBwcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZXM7IH0KICAg
ICB2b2lkIGNsZWFyUHJvZmlsZXMoKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBt
ZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4
ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhl
Y1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwcm9maWxl
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxl
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGltZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB0aW1lRW5kKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3Jp
cHRBcmd1bWVudHM+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEpTQzo6
RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBQYWdlJiBtX3BhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
UmVwbGF5Q29udHJvbGxlci5jcHAKaW5kZXggMTM5ZjA1Yy4uMDQ1N2Y4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIHZv
aWQgUmVwbGF5Q29udHJvbGxlcjo6c3dpdGNoU2Vzc2lvbihQYXNzUmVmUHRyPFJlcGxheVNlc3Np
b24+IHNlc3Npb24pCiAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBSZXBsYXlQb3NpdGlvbigwLCAw
KTsKIAogICAgIExPRyhXZWJSZXBsYXksICIlLTIwc1N3aXRjaGluZyBzZXNzaW9ucyBmcm9tICVw
IHRvICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBtX2xvYWRlZFNlc3Npb24uZ2V0KCksIHNl
c3Npb24uZ2V0KCkpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRl
ZChtX3BhZ2UsIG1fbG9hZGVkU2Vzc2lvbik7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpzZXNzaW9uTG9hZGVkKG1fcGFnZSwgbV9sb2FkZWRTZXNzaW9uLmNvcHlSZWYoKSk7CiB9CiAK
IHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6Y3JlYXRlU2VnbWVudCgpCkBAIC0yMjMsNyArMjIzLDcg
QEAgdm9pZCBSZXBsYXlDb250cm9sbGVyOjpjcmVhdGVTZWdtZW50KCkKICAgICBtX2xvYWRlZFNl
Z21lbnQgPSBSZXBsYXlTZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCk7CiAKICAgICBMT0coV2ViUmVw
bGF5LCAiJS0yMHMgQ3JlYXRlZCBzZWdtZW50OiAlcC5cbiIsICJSZXBsYXlDb250cm9sbGVyIiwg
bV9sb2FkZWRTZWdtZW50LmdldCgpKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
Z21lbnRDcmVhdGVkKG1fcGFnZSwgbV9sb2FkZWRTZWdtZW50KTsKKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkKG1fcGFnZSwgbV9sb2FkZWRTZWdtZW50LmNvcHlS
ZWYoKSk7CiAKICAgICBtX2FjdGl2ZUN1cnNvciA9IENhcHR1cmluZ0lucHV0Q3Vyc29yOjpjcmVh
dGUobV9sb2FkZWRTZWdtZW50KTsKICAgICBtX2FjdGl2ZUN1cnNvci0+YXBwZW5kSW5wdXQ8QmVn
aW5TZWdtZW50U2VudGluZWw+KCk7CkBAIC0yNDcsMTAgKzI0NywxMCBAQCB2b2lkIFJlcGxheUNv
bnRyb2xsZXI6OmNvbXBsZXRlU2VnbWVudCgpCiAgICAgdW5sb2FkU2VnbWVudChzaG91bGRTdXBw
cmVzc05vdGlmaWNhdGlvbnMpOwogCiAgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzIENvbXBsZXRl
ZCBzZWdtZW50OiAlcC5cbiIsICJSZXBsYXlDb250cm9sbGVyIiwgc2VnbWVudC5nZXQoKSk7Ci0g
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKG1fcGFnZSwgc2Vn
bWVudCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKG1f
cGFnZSwgc2VnbWVudC5jb3B5UmVmKCkpOwogCiAgICAgbV9sb2FkZWRTZXNzaW9uLT5hcHBlbmRT
ZWdtZW50KHNlZ21lbnQpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1v
ZGlmaWVkKG1fcGFnZSwgbV9sb2FkZWRTZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlc3Npb25Nb2RpZmllZChtX3BhZ2UsIG1fbG9hZGVkU2Vzc2lvbi5jb3B5UmVmKCkp
OwogfQogCiB2b2lkIFJlcGxheUNvbnRyb2xsZXI6OmxvYWRTZWdtZW50QXRJbmRleChzaXplX3Qg
c2VnbWVudEluZGV4KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6
bG9hZFNlZ21lbnRBdEluZGV4KHNpemVfdCBzZWdtZW50SW5kZXgpCiAgICAgbV9hY3RpdmVDdXJz
b3IgPSBSZXBsYXlpbmdJbnB1dEN1cnNvcjo6Y3JlYXRlKG1fbG9hZGVkU2VnbWVudCwgbV9wYWdl
LCB0aGlzKTsKIAogICAgIExPRyhXZWJSZXBsYXksICIlLTIwc0xvYWRpbmcgc2VnbWVudDogJXAu
XG4iLCAiUmVwbGF5Q29udHJvbGxlciIsIHNlZ21lbnQuZ2V0KCkpOwotICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZChtX3BhZ2UsIHNlZ21lbnQpOworICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZChtX3BhZ2UsIHNlZ21lbnQuY29weVJl
ZigpKTsKIH0KIAogdm9pZCBSZXBsYXlDb250cm9sbGVyOjp1bmxvYWRTZWdtZW50KGJvb2wgc3Vw
cHJlc3NOb3RpZmljYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1Jl
cGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBs
YXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAKaW5kZXggMGVkM2UyMy4uYjRkMWMzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMu
Y3BwCkBAIC00Niw3ICs0Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbml0aWFsTmF2aWdhdGlvbj4g
SW5pdGlhbE5hdmlnYXRpb246OmNyZWF0ZUZyb21QYWdlKGNvbnN0IFBhZ2UmCiAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5Db3B5ID0gbWFpbkZyYW1lLmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPmlzb2xhdGVkQ29weSgpOwogICAgIFVSTCB1cmwgPSBtYWluRnJhbWUuZG9j
dW1lbnQoKS0+dXJsKCk7CiAgICAgU3RyaW5nIHJlZmVycmVyID0gbWFpbkZyYW1lLmxvYWRlcigp
LnJlZmVycmVyKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5pdGlhbE5hdmlnYXRp
b24+KG9yaWdpbkNvcHksIHVybCwgcmVmZXJyZXIpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEluaXRpYWxOYXZpZ2F0aW9uPihXVEY6Om1vdmUob3JpZ2luQ29weSksIHVybCwgcmVmZXJy
ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4IDY3NDYwMzkuLjUzY2I3
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUuY3BwCkBAIC03OSwxMCArNzksMTAgQEAgU2hhcmVkV29ya2VyVGhyZWFkJiBTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZTo6dGhyZWFkKCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhcmVk
V29ya2VyVGhyZWFkJj4oQmFzZTo6dGhyZWFkKCkpOwogfQogCi12b2lkIFNoYXJlZFdvcmtlckds
b2JhbFNjb3BlOjpsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKQor
dm9pZCBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
az4mJiBjYWxsU3RhY2spCiB7Ci0gICAgV29ya2VyR2xvYmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRv
Q29uc29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBjYWxsU3RhY2spOwotICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7CisgICAgV29ya2VyR2xvYmFsU2NvcGU6
OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2suY29weVJlZigpKTsKKyAgICBhZGRNZXNzYWdlVG9X
b3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBlcnJv
ck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2su
Y29weVJlZigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oCmluZGV4IGMzMzViMmYuLjE4
MWEyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLmgKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgU2hhcmVkV29ya2VyVGhyZWFk
Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJl
ciwgaW50IGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
az4pIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xl
KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50
IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENh
bGxTdGFjaz4mJikgb3ZlcnJpZGU7CiAKICAgICAgICAgU3RyaW5nIG1fbmFtZTsKICAgICB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAppbmRleCA0NTJj
ZWI1Li5hMGI0NzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmNwcApAQCAtMjE0LDcgKzIxNCw3IEBAIEV2ZW50VGFyZ2V0KiBXb3JrZXJHbG9iYWxTY29w
ZTo6ZXJyb3JFdmVudFRhcmdldCgpCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgV29ya2Vy
R2xvYmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pCit2b2lkIFdvcmtlckdsb2JhbFNj
b3BlOjpsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJikKIHsKICAgICB0aHJlYWQoKS53b3JrZXJSZXBvcnRp
bmdQcm94eSgpLnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChlcnJvck1lc3NhZ2UsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMKTsKIH0KQEAgLTIzMCw3ICsyMzAsNyBAQCB2
b2lkIFdvcmtlckdsb2JhbFNjb3BlOjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZUxldmVsIGxldgogICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoc291
cmNlLCBsZXZlbCwgbWVzc2FnZSwgU3RyaW5nKCksIDAsIDAsIDAsIDAsIHJlcXVlc3RJZGVudGlm
aWVyKTsKIH0KIAotdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgV29y
a2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25l
ZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmICghaXNDb250ZXh0VGhyZWFkKCkp
IHsKICAgICAgICAgcG9zdFRhc2soQWRkQ29uc29sZU1lc3NhZ2VUYXNrKHNvdXJjZSwgbGV2ZWws
IFN0cmluZ0NhcHR1cmUobWVzc2FnZSkpKTsKQEAgLTIzOCwxNCArMjM4LDE0IEBAIHZvaWQgV29y
a2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uCiAgICAgfQogCiAgICAgdGhyZWFkKCkud29ya2VyUmVwb3J0aW5nUHJv
eHkoKS5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChzb3VyY2UsIGxldmVsLCBtZXNz
YWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCk7Ci0gICAgYWRkTWVzc2Fn
ZVRvV29ya2VyQ29uc29sZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgY2FsbFN0YWNrLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIp
OworICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIFdURjo6bW92ZShjYWxsU3RhY2sp
LCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCi12b2lkIFdvcmtlckdsb2JhbFNjb3Bl
OjphZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRk
TWVzc2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsK
ICAgICBpZiAoY2FsbFN0YWNrKQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFk
ZE1lc3NhZ2VUb0NvbnNvbGUodGhpcywgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwg
bWVzc2FnZSwgY2FsbFN0YWNrLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZSh0aGlzLCBzb3VyY2UsIE1lc3Nh
Z2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVz
dElkZW50aWZpZXIpOwogICAgIGVsc2UKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphZGRNZXNzYWdlVG9Db25zb2xlKHRoaXMsIHNvdXJjZSwgTWVzc2FnZVR5cGU6OkxvZywgbGV2
ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwg
cmVxdWVzdElkZW50aWZpZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9i
YWxTY29wZS5oCmluZGV4IDZmNzQ2ZWIuLjQ4NmFhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTE0Miw4ICsxNDIsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFdvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50LCBXb3JrZXJUaHJlYWQmLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0
b3BPcmlnaW4pOwogICAgICAgICB2b2lkIGFwcGx5Q29udGVudFNlY3VyaXR5UG9saWN5RnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpIZWFkZXJUeXBlKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9u
VG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRDYWxsU3RhY2s+KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhZGRNZXNzYWdl
VG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0
YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
ciA9IDApOworICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
az4mJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0
ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAKICAgICBwcml2
YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIG92
ZXJyaWRlIHsgcmVmKCk7IH0KQEAgLTE1Miw3ICsxNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsg
cmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlk
ZSBmaW5hbCB7IGRlcmVmKCk7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0
YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSBvdmVycmlkZTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdENhbGxTdGFjaz4mJiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApIG92ZXJyaWRlOwogCiAgICAgICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXQqIGVycm9yRXZlbnRUYXJnZXQoKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwMzNhNTZk
Li4zNDU2MzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTA2ICBCcmlhbiBK
LiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBwdXJnZSBQYXNzUmVmUHRyIGZyb20gSW5zcGVjdG9yIGNvZGUgYW5kIHVzZSBSZWYgZm9yIHR5
cGVkIGFuZCB1bnR5cGVkIHByb3RvY29sIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDA1MworCisgICAgICAgIFJldmlld2VkIGJ5IEFu
ZHJlYXMgS2xpbmcuCisKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5l
cmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW46IHVwZGF0ZSBzeW1ib2wuCisKIDIwMTUtMDEtMDYg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBX
ZWJLaXQxIGRhdGFiYXNlIHByb3ZpZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC52Y3hwcm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRFeHBvcnRzLmRlZi5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4
cG9ydHMuZGVmLmluCmluZGV4IDBmZmY3OTMuLjQyZjU4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMu
ZGVmLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2Vu
ZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluCkBAIC0yMDQsNyArMjA0LDcgQEAgRVhQT1JUUwog
ICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/aXRlbUBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBV
QkVQQVZOb2RlQDJASUBaLCA/aXRlbUBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBVRUJBUEVBVk5v
ZGVAMkBJQFopCiAgICAgICAgID9zZWxlY3RUYWdASFRNTE5hbWVzQFdlYkNvcmVAQDNWSFRNTFF1
YWxpZmllZE5hbWVAMkBCCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgc3ltYm9sV2l0
aFBvaW50ZXIoP2J1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlQEluc3BlY3RvckNvbnRyb2xs
ZXJAV2ViQ29yZUBAUUJFP0FWPyRQYXNzUmVmUHRyQFZJbnNwZWN0b3JPYmplY3RASW5zcGVjdG9y
QEBAV1RGQEBYWiwgP2J1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlQEluc3BlY3RvckNvbnRy
b2xsZXJAV2ViQ29yZUBAUUVCQT9BVj8kUGFzc1JlZlB0ckBWSW5zcGVjdG9yT2JqZWN0QEluc3Bl
Y3RvckBAQFdURkBAWFopCisgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9idWlsZE9iamVjdEZv
ckhpZ2hsaWdodGVkTm9kZUBJbnNwZWN0b3JDb250cm9sbGVyQFdlYkNvcmVAQFFCRT9BVj8kUmVm
UHRyQFZJbnNwZWN0b3JPYmplY3RASW5zcGVjdG9yQEBAV1RGQEBYWiwgP2J1aWxkT2JqZWN0Rm9y
SGlnaGxpZ2h0ZWROb2RlQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBAUUVCQT9BVj8kUmVm
UHRyQFZJbnNwZWN0b3JPYmplY3RASW5zcGVjdG9yQEBAV1RGQEBYWikKICAgICAgICAgc3ltYm9s
V2l0aFBvaW50ZXIoP2dldEhpZ2hsaWdodEBJbnNwZWN0b3JDb250cm9sbGVyQFdlYkNvcmVAQFFC
RVhQQVVIaWdobGlnaHRAMkBXNENvb3JkaW5hdGVTeXN0ZW1ASW5zcGVjdG9yT3ZlcmxheUAyQEBa
LCA/Z2V0SGlnaGxpZ2h0QEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBAUUVCQVhQRUFVSGln
aGxpZ2h0QDJAVzRDb29yZGluYXRlU3lzdGVtQEluc3BlY3Rvck92ZXJsYXlAMkBAWikKICAgICAg
ICAgc3ltYm9sV2l0aFBvaW50ZXIoP2luc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlQEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkBXZWJDb3JlQEBTQVBBVkluc3RydW1lbnRpbmdBZ2VudHNAMkBQQVZQ
YWdlQDJAQFosID9pbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZUBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25AV2ViQ29yZUBAU0FQRUFWSW5zdHJ1bWVudGluZ0FnZW50c0AyQFBFQVZQYWdlQDJAQFop
CiAgICAgICAgID9zX2Zyb250ZW5kQ291bnRlckBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25AV2Vi
Q29yZUBAMEhBCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244128</attachid>
            <date>2015-01-06 19:52:40 -0800</date>
            <delta_ts>2015-01-06 19:52:40 -0800</delta_ts>
            <desc>EWS round 3</desc>
            <filename>140053.patch</filename>
            <type>text/plain</type>
            <size>635181</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDcwZDJhNWEuLjQzYjhhZGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxNS0wMS0wNiAgQnJpYW4gSi4gQnVy
ZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHVy
Z2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZvciB0eXBlZCBh
bmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFz
IEtsaW5nLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdXNlcyBvZiBQYXNzUmVmUHRy
IHdpdGggdXNlcyBvZiBSZWZQdHImJiBhbmQgV1RGOjptb3ZlKCkgaW4gY29kZQorICAgICAgICBy
ZWxhdGVkIHRvIFdlYiBJbnNwZWN0b3IuIEl0IGFsc28gY29udmVydHMgbWFueSB1c2VzIG9mIFJl
ZlB0ciB0byBSZWYgd2hlcmUKKyAgICAgICAgcmVmZXJlbmNlcyBhcmUgYWx3YXlzIG5vbi1udWxs
LiBUaGVzZSB0d28gcmVmYWN0b3JpbmdzIGhhdmUgYmVlbiBjb21iaW5lZCBzaW5jZQorICAgICAg
ICB0aGV5IHRlbmQgdG8gcmVxdWlyZSBzaW1pbGFyIGNoYW5nZXMgdG8gdGhlIGNvZGUuCisKKyAg
ICAgICAgQ3JlYXRpb24gbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyBvZiBJbnNwZWN0b3JWYWx1ZSBu
b3cgcmV0dXJuIGEgUmVmLCBhbmQgY2FsbHNpdGVzCisgICAgICAgIGhhdmUgYmVlbiB1cGRhdGVk
IHRvIHRha2UgYSBSZWYgaW5zdGVhZCBvZiBSZWZQdHIuCisKKyAgICAgICAgQnVpbGRlcnMgZm9y
IHR5cGVkIHByb3RvY29sIG9iamVjdHMgbm93IHJldHVybiBhIFJlZi4gU2luY2UgdGhlcmUgaXMg
bm8gaW1wbGljaXQKKyAgICAgICAgY2FsbCB0byBvcGVyYXRvciYsIGNhbGxzaXRlcyBub3cgbXVz
dCBleHBsaWNpdGx5IGNhbGwgLnJlbGVhc2UoKSB0byBjb252ZXJ0IGEKKyAgICAgICAgYnVpbGRl
ciBvYmplY3QgaW50byB0aGUgY29ycmVzcG9uZGluZyBwcm90b2NvbCBvYmplY3Qgb25jZSByZXF1
aXJlZCBmaWVsZHMgYXJlIHNldC4KKyAgICAgICAgVXBkYXRlIGNhbGxzaXRlcyBhbmQgdXNlIGF1
dG8gdG8gZWxpbWluYXRlIHJlcGV0aXRpb24gb2YgbG9uZ3dpbmRlZCBwcm90b2NvbCB0eXBlcy4K
KworICAgICAgICBUZXN0cyBmb3IgaW5zcGVjdG9yIHByb3RvY29sIGFuZCByZXBsYXkgaW5wdXRz
IGhhdmUgYmVlbiByZWJhc2VsaW5lZC4KKworICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OmpzVG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAg
IChEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICog
YmluZGluZ3MvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpidWlsZE9iamVjdEZvclNl
YXJjaE1hdGNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Q29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlsaXRpZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QpOgorICAgICAgICAoSW5z
cGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNl
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENh
bGwpOiBTcGxpdCB0aGUgZWFybHkgZXhpdHMuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZElm
QWN0aXZlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZW5kUmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcik6CisgICAgICAgIChJbnNwZWN0b3I6Omdl
dFByb3BlcnR5VmFsdWUpOiBBZGQgYSBjb21tZW50IHRvIGNsYXJpZnkgd2hhdCB0aGlzIGNsZXZl
ciBjb2RlIGRvZXMuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOiBVc2UgYSB0eXBlZCBwcm90b2NvbCBv
YmplY3QgdG8gY29sbGVjdAorICAgICAgICBwcm90b2NvbCBlcnJvciBzdHJpbmdzLgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIpOgorICAgICAgICBDb252ZXJ0IHRo
ZSBzdXBwbGVtZW50YWwgZGlzcGF0Y2hlcidzIHJlZmVyZW5jZSB0byBSZWYgc2luY2UgaXQgaXMg
bmV2ZXIgbnVsbC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oOiBHZXQgcmlkIG9m
IEFycmF5SXRlbUhlbHBlciBhbmQKKyAgICAgICAgU3RydWN0SXRlbVRyYWl0cy4gQWRkIG1vcmUg
dmVyc2lvbnMgb2YgYWRkSXRlbSB0byBoYW5kbGUgcHVzaGluZyB2YXJpb3VzIHR5cGVzLgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6Om9wZW5BY2Nlc3NvcnMpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpTdHJ1Y3RJdGVtVHJhaXRzOjpwdXNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkFycmF5PFQ+Pjo6cnVudGltZUNhc3QpOiBBc3Nl
cnQgYXJndW1lbnQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJh
aXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5SXRlbUhlbHBlcjxTdHJpbmc+OjpUcmFpdHM6OnB1c2hSYXcpOiBEZWxldGVkLgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0czo6
cHVzaFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0
ZW1IZWxwZXI8ZG91YmxlPjo6VHJhaXRzOjpwdXNoUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBlcjxib29sPjo6VHJhaXRzOjpwdXNoUmF3
KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBl
cjxJbnNwZWN0b3JWYWx1ZT46OlRyYWl0czo6cHVzaFJlZlB0cik6IERlbGV0ZWQuCisgICAgICAg
IChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0Pjo6
VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT46OlRyYWl0czo6cHVzaFJlZlB0cik6
IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8
UHJvdG9jb2w6OkFycmF5PFQ+Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDogU3RyYWlnaHRlbiBvdXQgZ2V0QXJy
YXkgYW5kIGdldE9iamVjdCB0byBoYXZlCisgICAgICAgIHRoZSBzYW1lIGNhbGwgc2lnbmF0dXJl
IGFzIG90aGVyIGdldHRlcnMuIFVzZSBSZWYgd2hlcmUgcG9zc2libGUuCisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xlYW4pOgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2U6OmdldFZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXlCYXNlOjpnZXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5OjpjcmVhdGUpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6bnVsbCk6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZTo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaE9iamVjdCk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6cHVzaEFycmF5KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVFbmQp
OgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVT
dGFtcCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCk6CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxs
RnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkSW5z
cGVjdG9yT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrOjpidWlsZEluc3BlY3RvckFycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2Ny
aXB0Q2FsbFN0YWNrLmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50OjplbmFibGUpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdCk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWluKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2VydCk6CisgICAgICAgIChJbnNw
ZWN0b3I6OmJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZSk6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZl
QnJlYWtwb2ludCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1ApOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcyk6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291
cmNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtw
b2ludEFjdGlvblByb2JlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmJ1aWxkRXJyb3JSYW5nZU9iamVj
dCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0
aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1
bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdl
bmVyYXRvcik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3luY19oYW5k
bGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9t
YWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQpOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFy
YXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcik6
CisgICAgICAgIChfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJh
aXRzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19m
b3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChP
YmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2
ZW50KToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogcmVwbGF5L0VuY29kZWRWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6YXNPYmplY3QpOgorICAgICAgICAo
SlNDOjpFbmNvZGVkVmFsdWU6OmFzQXJyYXkpOgorICAgICAgICAoSlNDOjpFbmNvZGVkVmFsdWU6
OnB1dDxFbmNvZGVkVmFsdWU+KToKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphcHBlbmQ8
RW5jb2RlZFZhbHVlPik6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRW
YWx1ZT4pOgorICAgICAgICAqIHJlcGxheS9FbmNvZGVkVmFsdWUuaDoKKyAgICAgICAgKiByZXBs
YXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5OgorICAgICAgICAoVHlwZS5i
b3Jyb3dfdHlwZSk6CisgICAgICAgIChUeXBlLmFyZ3VtZW50X3R5cGUpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmdlbmVyYXRlX21lbWJlcl9tb3ZlX2V4cHJlc3Npb24pOgorICAgICAgICAqIHJ1bnRp
bWUvQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OnByaW50
Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVu
dDo6aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6CisgICAgICAgIChKU0M6OkNvbnNv
bGVDbGllbnQ6OmxvZ1dpdGhMZXZlbCk6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OmNs
ZWFyKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6ZGlyKToKKyAgICAgICAgKEpTQzo6
Q29uc29sZUNsaWVudDo6ZGlyWE1MKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6dGFi
bGUpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojp0cmFjZSk6CisgICAgICAgIChKU0M6
OkNvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkNvbnNvbGVD
bGllbnQ6Omdyb3VwKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6Z3JvdXBDb2xsYXBz
ZWQpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojpncm91cEVuZCk6CisgICAgICAgICog
cnVudGltZS9Db25zb2xlQ2xpZW50Lmg6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0LmNwcDoK
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKToKKyAg
ICAgICAgKEpTQzo6VHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0Lmg6CisKIDIwMTUtMDEtMDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBEcm9wIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjb25uZWN0aW9uSUQgYW5k
IGNvbm5lY3Rpb25SZXVzZWQgbWVtYmVycwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggZDA0NmFiMi4uOWUyMjUxZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCkBAIC05OCw3ICs5OCw3
IEBAIGJvb2wgU2NyaXB0VmFsdWU6OmlzRnVuY3Rpb24oKSBjb25zdAogfQogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVj
dG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgaW50IG1heERl
cHRoKQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVmFsdWUgdmFsdWUsIGludCBtYXhEZXB0aCkKIHsKICAg
ICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTIzLDcg
KzEyMyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9y
VmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWCiAKICAgICBpZiAodmFsdWUuaXNPYmpl
Y3QoKSkgewogICAgICAgICBpZiAoaXNKU0FycmF5KHZhbHVlKSkgewotICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBpbnNwZWN0b3JBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gaW5zcGVjdG9yQXJyYXkgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFz
QXJyYXkodmFsdWUpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CkBAIC0xMzEsMTEgKzEzMSwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
anNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVgogICAgICAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNUb0luc3BlY3Rv
clZhbHVlKHNjcmlwdFN0YXRlLCBlbGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFlbGVtZW50VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoZWxlbWVudFZhbHVlKTsK
KyAgICAgICAgICAgICAgICBpbnNwZWN0b3JBcnJheS0+cHVzaFZhbHVlKFdURjo6bW92ZShlbGVt
ZW50VmFsdWUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpbnNwZWN0b3JB
cnJheTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoaW5zcGVjdG9yQXJyYXkpOwogICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3Rvck9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGluc3BlY3Rvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydHlOYW1lcyhzY3JpcHRTdGF0ZSk7CiAgICAgICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHNjcmlwdFN0YXRlLCBwcm9wZXJ0
eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTE0NSwxNiArMTQ1LDE2IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoRXhl
Y1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWCiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBwcm9w
ZXJ0eVZhbHVlLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5zcGVjdG9yT2Jq
ZWN0LT5zZXRWYWx1ZShuYW1lLnN0cmluZygpLCBpbnNwZWN0b3JWYWx1ZSk7CisgICAgICAgICAg
ICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5nKCksIFdURjo6bW92ZShpbnNw
ZWN0b3JWYWx1ZSkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnNwZWN0b3JPYmplY3Q7
CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUoaW5zcGVjdG9yT2JqZWN0KTsKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFsdWU6OnRvSW5zcGVjdG9yVmFsdWUoRXhlY1N0
YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKK1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFs
dWU6OnRvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKIHsKICAg
ICBKU0xvY2tIb2xkZXIgaG9sZGVyKHNjcmlwdFN0YXRlKTsKICAgICByZXR1cm4ganNUb0luc3Bl
Y3RvclZhbHVlKHNjcmlwdFN0YXRlLCBtX3ZhbHVlLmdldCgpLCBJbnNwZWN0b3JWYWx1ZTo6bWF4
RGVwdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1Njcmlw
dFZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaApp
bmRleCBkNWZhZGU5Li5mZWY3NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvU2NyaXB0VmFsdWUuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNjcmlwdFZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOyB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0OworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB0b0lu
c3BlY3RvclZhbHVlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5j
cHAKaW5kZXggZjdkMWU1NS4uMjAyZTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAgLTE4MSwxMCArMTgxLDExIEBAIHN0
YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6TGV2ZWwg
bWVzc2FnZUxldmVsVmFsdWUoTWVzCiAKIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRl
bmQoSW5zcGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyb250ZW5kRGlz
cGF0Y2hlciwgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0
TWFuYWdlciwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlPiBqc29uT2JqID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCisgICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlPiBqc29uT2JqID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRTb3VyY2UobWVzc2FnZVNvdXJjZVZhbHVlKG1fc291cmNlKSkKICAgICAgICAgLnNldExl
dmVsKG1lc3NhZ2VMZXZlbFZhbHVlKG1fbGV2ZWwpKQotICAgICAgICAuc2V0VGV4dChtX21lc3Nh
Z2UpOworICAgICAgICAuc2V0VGV4dChtX21lc3NhZ2UpCisgICAgICAgIC5yZWxlYXNlKCk7CiAK
ICAgICAvLyBGSVhNRTogb25seSBzZW5kIG91dCB0eXBlIGZvciBDb25zb2xlQVBJIHNvdXJjZSBt
ZXNzYWdlcy4KICAgICBqc29uT2JqLT5zZXRUeXBlKG1lc3NhZ2VUeXBlVmFsdWUobV90eXBlKSk7
CkBAIC0xOTksNyArMjAwLDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJ
bnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnIKICAgICBpZiAobV9h
cmd1bWVudHMgJiYgbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0
ZWRTY3JpcHRGb3IobV9hcmd1bWVudHMtPmdsb2JhbFN0YXRlKCkpOwogICAgICAgICBpZiAoIWlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4+IGpzb25BcmdzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pj4ganNvbkFyZ3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpjcmVhdGUoKTsKICAg
ICAgICAgICAgIGlmIChtX3R5cGUgPT0gTWVzc2FnZVR5cGU6OlRhYmxlICYmIGdlbmVyYXRlUHJl
dmlldyAmJiBtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgICAgICAgICAg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdGFibGUgPSBtX2FyZ3VtZW50cy0+YXJndW1lbnRBdCgw
KTsKICAgICAgICAgICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBjb2x1bW5zID0gbV9h
cmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSA+IDEgPyBtX2FyZ3VtZW50cy0+YXJndW1lbnRBdCgx
KSA6IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CkBAIC0yMDgsNyArMjA5LDcgQEAgdm9pZCBD
b25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJbnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNw
YXRjaGVyKiBjb25zb2xlRnIKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAganNvbkFyZ3MtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUpOworICAgICAgICAg
ICAgICAgIGpzb25BcmdzLT5hZGRJdGVtKGluc3BlY3RvclZhbHVlLmNvcHlSZWYoKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gaW5z
cGVjdG9yVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1
bWVudEF0KGkpLCBBU0NJSUxpdGVyYWwoImNvbnNvbGUiKSwgZ2VuZXJhdGVQcmV2aWV3KTsKQEAg
LTIxNiwxNyArMjE3LDE3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5z
cGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciogY29uc29sZUZyCiAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBqc29u
QXJncy0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGpzb25B
cmdzLT5hZGRJdGVtKGluc3BlY3RvclZhbHVlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAganNvbk9iai0+c2V0UGFyYW1ldGVycyhqc29u
QXJncyk7CisgICAgICAgICAgICBqc29uT2JqLT5zZXRQYXJhbWV0ZXJzKFdURjo6bW92ZShqc29u
QXJncykpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1fY2FsbFN0YWNrKQogICAgICAg
ICBqc29uT2JqLT5zZXRTdGFja1RyYWNlKG1fY2FsbFN0YWNrLT5idWlsZEluc3BlY3RvckFycmF5
KCkpOwogCi0gICAgY29uc29sZUZyb250ZW5kRGlzcGF0Y2hlci0+bWVzc2FnZUFkZGVkKGpzb25P
YmopOworICAgIGNvbnNvbGVGcm9udGVuZERpc3BhdGNoZXItPm1lc3NhZ2VBZGRlZChXVEY6Om1v
dmUoanNvbk9iaikpOwogfQogCiB2b2lkIENvbnNvbGVNZXNzYWdlOjp1cGRhdGVSZXBlYXRDb3Vu
dEluQ29uc29sZShJbnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnJv
bnRlbmREaXNwYXRjaGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKaW5kZXggOGU1NzYzNy4uZjVkZjBi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2Vh
cmNoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0Nv
bnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RkOjp1bmlxdWVf
cHRyPFZlY3RvcjxzaXplX3Q+PiBsaW5lRW5kaW5ncyhjb25zdCBTdHJpbmcmIHRleHQpCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChz
aXplX3QgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBsaW5lQ29udGVudCkKK3N0YXRpYyBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gYnVpbGRPYmpl
Y3RGb3JTZWFyY2hNYXRjaChzaXplX3QgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBsaW5lQ29u
dGVudCkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpT
ZWFyY2hNYXRjaDo6Y3JlYXRlKCkKICAgICAgICAgLnNldExpbmVOdW1iZXIobGluZU51bWJlcikK
QEAgLTE1MywxNSArMTUzLDE3IEBAIGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhj
b25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdleCwgY29uCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0
QnlMaW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJv
b2wgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1JlZ2V4KQorUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0
Y2g+PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sIGlzUmVnZXgpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
Pjo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPjo6Y3JlYXRlKCk7CiAKICAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9u
IHJlZ2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnks
IGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8c2l6ZV90LCBT
dHJpbmc+PiBtYXRjaGVzID0gZ2V0UmVndWxhckV4cHJlc3Npb25NYXRjaGVzQnlMaW5lcyhyZWdl
eCwgdGV4dCk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG1hdGNoIDogbWF0Y2hlcykKLSAgICAg
ICAgcmVzdWx0LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2gobWF0Y2guZmlyc3Qs
IG1hdGNoLnNlY29uZCkpOworICAgIGZvciAoY29uc3QgYXV0byYgbWF0Y2ggOiBtYXRjaGVzKSB7
CisgICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1h
dGNoPiBtYXRjaE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2gobWF0Y2guZmlyc3Qs
IG1hdGNoLnNlY29uZCk7CisgICAgICAgIHJlc3VsdC0+YWRkSXRlbShXVEY6Om1vdmUobWF0Y2hP
YmplY3QpKTsKKyAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuaApp
bmRleCA5ODhhMGYyZC4uYjNiNjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgKQEAgLTQ2LDcgKzQ2LDcg
QEAgbmFtZXNwYWNlIENvbnRlbnRTZWFyY2hVdGlsaXRpZXMgewogCiBKU19FWFBPUlRfUFJJVkFU
RSBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIGNyZWF0ZVNlYXJjaFJlZ2V4KGNvbnN0IFN0
cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4KTsKIEpTX0VYUE9S
VF9QUklWQVRFIGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBKU0M6Ollh
cnI6OlJlZ3VsYXJFeHByZXNzaW9uJiwgY29uc3QgU3RyaW5nJik7Ci1KU19FWFBPUlRfUFJJVkFU
RSBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sIGlzUmVnZXgpOworSlNfRVhQT1JUX1BSSVZBVEUgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2Vh
cmNoTWF0Y2g+PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sIGlzUmVn
ZXgpOwogSlNfRVhQT1JUX1BSSVZBVEUgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbkZyb21PZmZz
ZXQoc2l6ZV90IG9mZnNldCwgY29uc3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzKTsKIEpT
X0VYUE9SVF9QUklWQVRFIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c2l6ZV90Pj4gbGluZUVuZGlu
Z3MoY29uc3QgU3RyaW5nJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggOTVmYTc1ZC4uM2I4M2QwOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAg
LTEwNiw3ICsxMDYsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOwor
ICAgICpyZXN1bHQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUocmVzdWx0VmFsdWUpKTsK
IH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgUmVm
UHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+KiBwcm9wZXJ0aWVzKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9i
amVjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAqcHJvcGVydGllcyA9IEJpbmRpbmdU
cmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlw
dG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CisgICAgKnByb3BlcnRpZXMgPSBCaW5kaW5nVHJh
aXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUocmVzdWx0KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+KiBwcm9wZXJ0aWVzKQpAQCAtMTM3
LDEyICsxMzcsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVD
YXN0KHJlc3VsdCk7CisgICAgYXV0byBhcnJheSA9IEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVu
dGltZUNhc3QoV1RGOjptb3ZlKHJlc3VsdCkpOwogICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPiAw
KQogICAgICAgICAqcHJvcGVydGllcyA9IGFycmF5OwogfQogCi1QYXNzUmVmUHRyPEFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6
d3JhcENhbGxGcmFtZXMoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMp
CitSZWY8QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IElu
amVjdGVkU2NyaXB0Ojp3cmFwQ2FsbEZyYW1lcyhjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgY2FsbEZyYW1lcykKIHsKICAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CiAgICAgRGVwcmVj
YXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCks
IEFTQ0lJTGl0ZXJhbCgid3JhcENhbGxGcmFtZXMiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+
ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKQEAgLTE1MywxMiArMTUzLDEyIEBAIFBhc3NSZWZQdHI8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluamVjdGVk
U2NyaXB0Ojp3cmFwCiAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcmVzdWx0ID0gY2FsbEZyYW1lc1ZhbHVlLnRvSW5zcGVjdG9yVmFsdWUoc2Ny
aXB0U3RhdGUoKSk7CiAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpU
eXBlOjpBcnJheSkKLSAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0KFdURjo6bW92ZShyZXN1bHQpKS5yZWxl
YXNlTm9uTnVsbCgpOwogCiAgICAgcmV0dXJuIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2Jq
ZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBn
cm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3KSBjb25zdAorUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmpl
Y3QoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGdy
b3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFoYXNO
b1ZhbHVlKCkpOwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCB3cmFwRnVuY3Rp
b24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJ3cmFwT2JqZWN0IiksIGlu
c3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CkBAIC0xNzksNyAr
MTc5LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWMKICAgICByZXR1cm4gQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2Fz
dChyZXN1bHRPYmplY3QpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBjb2x1bW5zKSBjb25zdAorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgdGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjb2x1bW5z
KSBjb25zdAogewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKICAgICBEZXByZWNhdGVkOjpT
Y3JpcHRGdW5jdGlvbkNhbGwgd3JhcEZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFT
Q0lJTGl0ZXJhbCgid3JhcFRhYmxlIiksIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9u
Q2FsbEhhbmRsZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmgKaW5kZXggNDJjNzkwZC4uMjkwOTJiMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtNjIsOSArNjIsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8UHJvdG9jb2w6OkFycmF5
PFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiogcmVzdWx0KTsKICAgICB2
b2lkIGdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFs
UHJvcGVydHlEZXNjcmlwdG9yPj4qIHJlc3VsdCk7CiAKLSAgICBQYXNzUmVmUHRyPFByb3RvY29s
OjpBcnJheTxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IHdyYXBDYWxsRnJhbWVzKGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7Ci0gICAgUGFzc1JlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiB3cmFwT2JqZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3ID0g
ZmFsc2UpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gd3JhcFRhYmxlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB0YWJsZSwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNvbHVtbnMpIGNvbnN0OworICAgIFJlZjxQcm90
b2NvbDo6QXJyYXk8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiB3cmFwQ2FsbEZyYW1l
cyhjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiB3cmFwT2JqZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3ID0g
ZmFsc2UpIGNvbnN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiB3cmFwVGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3Q7CiAKICAgICB2b2lkIHNldEV4
Y2VwdGlvblZhbHVlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CiAgICAgdm9pZCBj
bGVhckV4Y2VwdGlvblZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKaW5kZXggZGQxMjk4Yy4uN2RlMDUxOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRCYXNlLmNwcApAQCAtMTM1LDE1ICsxMzUsMjAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJh
c2U6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNj
cmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IHJlc3VsdFBhaXItPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInJlc3Vs
dCIpKTsKLSAgICBib29sIHdhc1Rocm93blZhbCA9IGZhbHNlOwotICAgIGlmICghcmVzdWx0T2Jq
ZWN0IHx8ICFyZXN1bHRQYWlyLT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgid2FzVGhyb3duIiks
IHdhc1Rocm93blZhbCkpIHsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmpl
Y3Q7CisgICAgaWYgKCFyZXN1bHRQYWlyLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQi
KSwgcmVzdWx0T2JqZWN0KSkgeworICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgi
SW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJv
d24gZmxhZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCB3YXNUaHJvd25W
YWx1ZSA9IGZhbHNlOworICAgIGlmICghcmVzdWx0UGFpci0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVy
YWwoIndhc1Rocm93biIpLCB3YXNUaHJvd25WYWx1ZSkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcg
PSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGEgcGFpciBvZiB2
YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
ICpvYmplY3RSZXN1bHQgPSBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOwotICAgICp3YXNUaHJvd24gPSB3YXNU
aHJvd25WYWw7CisgICAgKndhc1Rocm93biA9IHdhc1Rocm93blZhbHVlOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKaW5kZXggZGJlNzkz
ZS4uODk1YTA5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKQEAgLTM2LDggKzM2LDgg
QEAKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKQotICAgIDogbV9iYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKK0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZShSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkKKyAgICA6IG1fYmFja2VuZERpc3BhdGNoZXIo
V1RGOjptb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX2Fs
cmVhZHlTZW50KGZhbHNlKQogewpAQCAtNTQsMTggKzU0LDE4IEBAIHZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1cmUoY29uc3QgRXJyb3JTdHJp
bmcmIGVyCiAgICAgc2VuZElmQWN0aXZlKG51bGxwdHIsIGVycm9yKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kSWZBY3RpdmUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYg
aW52b2NhdGlvbkVycm9yKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlOjpzZW5kSWZBY3RpdmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJ0aWFsTWVz
c2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKIHsKICAgICBpZiAobV9h
bHJlYWR5U2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKG1faWQsIHBhcnRpYWxNZXNzYWdlLCBpbnZvY2F0aW9uRXJyb3IpOworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShtX2lkLCBXVEY6Om1vdmUocGFydGlh
bE1lc3NhZ2UpLCBpbnZvY2F0aW9uRXJyb3IpOwogICAgIG1fYWxyZWFkeVNlbnQgPSB0cnVlOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQorUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgSW5zcGVjdG9y
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpCkBAIC05MCw4ICs5MCw4
IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoQVNDSUlMaXRlcmFsKCJp
ZCIpKTsKLSAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBjYWxsSWRWYWx1ZTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgiaWQiKSwgY2FsbElkVmFsdWUpKSB7CiAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
bnVsbHB0ciwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiJ2lkJyBwcm9wZXJ0eSB3YXMg
bm90IGZvdW5kIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAyLDggKzEwMiw4IEBA
IHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSk7Ci0gICAgaWYgKCFtZXRob2RWYWx1ZSkgeworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gbWV0aG9kVmFsdWU7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRWYWx1ZShBU0NJSUxp
dGVyYWwoIm1ldGhvZCIpLCBtZXRob2RWYWx1ZSkpIHsKICAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCInbWV0aG9kJyBwcm9w
ZXJ0eSB3YXNuJ3QgZm91bmQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjgsMTAg
KzEyOCwxMCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgfQogCiAgICAgU3RyaW5nIGRvbWFpbk1ldGhvZCA9IG1l
dGhvZC5zdWJzdHJpbmcocG9zaXRpb24gKyAxKTsKLSAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNw
YXRjaChjYWxsSWQsIGRvbWFpbk1ldGhvZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNlKCkpOworICAg
IGRvbWFpbkRpc3BhdGNoZXItPmRpc3BhdGNoKGNhbGxJZCwgZG9tYWluTWV0aG9kLCBtZXNzYWdl
T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCit2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlv
bkVycm9yKQogewogICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
IHJldHVybjsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yTwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9u
c2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHJlc3Vs
dCk7CiAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwg
Y2FsbElkKTsKICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTUyLDcgKzE1Miw3
IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3Io
Y29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDCiAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25z
dCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAordm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBj
b25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBk
YXRhKSBjb25zdAogewogICAgIHN0YXRpYyBjb25zdCBpbnQgZXJyb3JDb2Rlc1tdID0gewogICAg
ICAgICAtMzI3MDAsIC8vIFBhcnNlRXJyb3IKQEAgLTE2MywyMSArMTYzLDIxIEBAIHZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyog
Y29uc3QgY2FsbElkLCBDCiAgICAgICAgIC0zMjAwMCwgLy8gU2VydmVyRXJyb3IKICAgICB9Owog
Ci0gICAgQVNTRVJUKGVycm9yQ29kZSA+PSAwKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWVycm9y
Q29kZSA8IFdURl9BUlJBWV9MRU5HVEgoZXJyb3JDb2RlcykpOwotICAgIEFTU0VSVChlcnJvckNv
ZGVzW2Vycm9yQ29kZV0pOworICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCBlcnJvckNvZGUgPj0g
MCk7CisgICAgQVNTRVJUX0FSRyhlcnJvckNvZGUsICh1bnNpZ25lZCllcnJvckNvZGUgPCBXVEZf
QVJSQVlfTEVOR1RIKGVycm9yQ29kZXMpKTsKKyAgICBBU1NFUlRfQVJHKGVycm9yQ29kZSwgZXJy
b3JDb2Rlc1tlcnJvckNvZGVdKTsKIAogICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9y
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBl
cnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZXJyb3ItPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJjb2RlIiksIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CiAgICAgZXJyb3It
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgZXJyb3JNZXNzYWdlKTsKICAgICBp
ZiAoZGF0YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBk
YXRhKTsKKyAgICAgICAgZXJyb3ItPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBXVEY6
Om1vdmUoZGF0YSkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgiZXJyb3IiKSwgZXJyb3IucmVsZWFzZSgpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5zZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCBXVEY6Om1vdmUoZXJyb3IpKTsKICAgICBpZiAo
Y2FsbElkKQogICAgICAgICBtZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwg
KmNhbGxJZCk7CiAgICAgZWxzZQpAQCAtMTg3LDM3ICsxODcsMzYgQEAgdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBj
YWxsSWQsIEMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVmFsdWVUeXBlLCB0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIERlZmF1bHRWYWx1ZVR5cGU+Ci1zdGF0aWMgUmV0dXJuVmFs
dWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzLCBEZWZhdWx0VmFsdWVUeXBlIGRlZmF1bHRWYWx1ZSwgYm9vbCAoKmFzTWV0aG9kKShJbnNw
ZWN0b3JWYWx1ZSYsIFZhbHVlVHlwZSYpLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkKK3N0YXRpYyBS
ZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycywgRGVmYXVsdFZhbHVl
VHlwZSBkZWZhdWx0VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoSW5zcGVjdG9yVmFsdWUmLCBWYWx1
ZVR5cGUmKSwgY29uc3QgY2hhciogdHlwZU5hbWUpCiB7Ci0gICAgQVNTRVJUKHByb3RvY29sRXJy
b3JzKTsKLQotICAgIFZhbHVlVHlwZSB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICBpZiAodmFs
dWVGb3VuZCkKLSAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBWYWx1ZVR5cGUgcmVz
dWx0ID0gZGVmYXVsdFZhbHVlOworICAgIC8vIG91dF9vcHRpb25hbFZhbHVlRm91bmQgc2lnbmFs
cyB0byB0aGUgY2FsbGVyIHdoZXRoZXIgYW4gb3B0aW9uYWwgcHJvcGVydHkgd2FzIGZvdW5kLgor
ICAgIC8vIGlmIG91dF9vcHRpb25hbFZhbHVlRm91bmQgPT0gbnVsbHB0ciwgdGhlbiB0aGlzIGlz
IGEgcmVxdWlyZWQgcHJvcGVydHkuCisgICAgaWYgKG91dF9vcHRpb25hbFZhbHVlRm91bmQpCisg
ICAgICAgICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gZmFsc2U7CiAKICAgICBpZiAoIW9iamVj
dCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFp
biByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCksIHR5cGVOYW1lKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgaWYgKCFv
dXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMuYWRkSXRl
bShTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBw
YXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVO
YW1lKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsK
LSAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZvdW5k
KQotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4
KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwotICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgYXV0byBm
aW5kUmVzdWx0ID0gb2JqZWN0LT5maW5kKG5hbWUpOworICAgIGlmIChmaW5kUmVzdWx0ID09IG9i
amVjdC0+ZW5kKCkpIHsKKyAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAg
ICAgICAgICAgcHJvdG9jb2xFcnJvcnMuYWRkSXRlbShTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVy
ICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IHR5cGVOYW1lKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKCFh
c01ldGhvZCgqdmFsdWVJdGVyYXRvci0+dmFsdWUsIHZhbHVlKSkgewotICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdy
b25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1l
KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoIWFzTWV0aG9kKCpmaW5kUmVzdWx0
LT52YWx1ZSwgcmVzdWx0KSkgeworICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmlu
Zzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMn
LiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgKnZhbHVlRm91bmQgPSB0
cnVlOworICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICAqb3V0X29wdGlv
bmFsVmFsdWVGb3VuZCA9IHRydWU7CiAKLSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogc3RydWN0IEFzTWV0aG9kQnJpZGdlcyB7CkBAIC0yMzAsMzkgKzIyOSwzOSBA
QCBzdHJ1Y3QgQXNNZXRob2RCcmlkZ2VzIHsKICAgICBzdGF0aWMgYm9vbCBhc1ZhbHVlKEluc3Bl
Y3RvclZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYgb3V0cHV0KSB7IHJldHVy
biB2YWx1ZS5hc1ZhbHVlKG91dHB1dCk7IH0KIH07CiAKLWludCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
CitpbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCiB7CiAgICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8aW50LCBpbnQsIGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9ycywgMCwgQXNNZXRob2RCcmlkZ2VzOjphc0ludGVnZXIsICJJbnRl
Z2VyIik7CiB9CiAKLWRvdWJsZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91Ymxl
KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK2RvdWJsZSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPGRvdWJsZSwgZG91YmxlLCBkb3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6YXNEb3VibGUsICJOdW1iZXIiKTsKIH0K
IAotU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
PiYgcHJvdG9jb2xFcnJvcnMpCiB7CiAgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5n
LCBTdHJpbmcsIFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
cywgIiIsIEFzTWV0aG9kQnJpZGdlczo6YXNTdHJpbmcsICJTdHJpbmciKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpCitib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29s
RXJyb3JzKQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGJvb2wsIGJvb2wsIGJvb2w+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIGZhbHNlLCBBc01ldGhv
ZEJyaWRnZXM6OmFzQm9vbGVhbiwgIkJvb2xlYW4iKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJv
cGVydHlWYWx1ZTxQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+LCBJbnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2JqZWN0Iik7
CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBJbnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2Jq
ZWN0LCAiT2JqZWN0Iik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBw
cm90b2NvbEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkq
PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01l
dGhvZEJyaWRnZXM6OmFzQXJyYXksICJBcnJheSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPFJlZlB0cjxJbnNwZWN0b3JBcnJheT4sIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4sIEluc3Bl
Y3RvckFycmF5Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVs
bHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc0FycmF5LCAiQXJyYXkiKTsKIH0KIAotUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEluc3BlY3Rvck9iamVjdCog
b2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQogewotICAgIHJldHVybiBn
ZXRQcm9wZXJ0eVZhbHVlPFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+LCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+LCBJbnNwZWN0b3JWYWx1ZSo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNWYWx1ZSwgIlZhbHVlIik7
CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3RvclZhbHVlPiwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiwgSW5zcGVjdG9yVmFsdWUqPihvYmplY3QsIG5hbWUsIHZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzVmFsdWUs
ICJWYWx1ZSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaAppbmRleCBhOTllNmVhLi44NmNiZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
CkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gK
ICNkZWZpbmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAogCi0jaW5jbHVkZSAiSW5zcGVj
dG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQwLDMwICs0MCwzMSBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcj4gewogcHVibGljOgotICAgIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikg
OiBtX2JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKSB7IH0KKyAgICBJbnNwZWN0
b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIpCisgICAgICAgIDogbV9iYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlcikgeyB9CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgPSAwOwogcHJv
dGVjdGVkOgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7CiB9OwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKKyAgICBzdGF0aWMg
UmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKik7CiAKICAgICBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDYWxsYmFja0Jhc2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxDYWxsYmFja0Jhc2U+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENh
bGxiYWNrQmFzZShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlk
KTsKKyAgICAgICAgQ2FsbGJhY2tCYXNlKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKIAogICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgc2VuZEZhaWx1cmUoY29uc3QgRXJyb3JTdHJpbmcmKTsKICAgICAgICAgdm9pZCBkaXNhYmxl
KCkgeyBtX2FscmVhZHlTZW50ID0gdHJ1ZTsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2
b2lkIHNlbmRJZkFjdGl2ZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFydGlhbE1lc3Nh
Z2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpOworICAgICAgICB2b2lkIHNl
bmRJZkFjdGl2ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdlLCBjb25z
dCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
KyAgICAgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwogICAgICAgICBpbnQgbV9pZDsKICAgICAgICAgYm9vbCBtX2FscmVhZHlTZW50OwogICAg
IH07CkBAIC04MiwxNyArODMsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4sIEluc3BlY3RvclN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKik7CiAgICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9y
KTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpOwogICAg
IHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1v
bkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OwotICAgIHZvaWQg
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGRhdGEpIGNvbnN0OwotCi0gICAgc3RhdGljIGludCBnZXRJbnRlZ2VyKEluc3BlY3Rvck9i
amVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgZG91YmxlIGdldERvdWJsZShJbnNwZWN0
b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoSW5z
cGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4o
SW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVjdG9y
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgdm9pZCBy
ZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JD
b2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+JiYgZGF0YSkgY29uc3Q7CisKKyAgICBzdGF0aWMgaW50IGdldElu
dGVnZXIoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7
CisgICAgc3RhdGljIGRvdWJsZSBnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoSW5z
cGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7CisgICAgc3Rh
dGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHBy
b3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXRWYWx1
ZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKKyAg
ICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
PiYgcHJvdG9jb2xFcnJvcnMpOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckVudmlyb25tZW50LmgKaW5kZXggYWUyYTdjZC4uMThkZjE0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50LmgKQEAg
LTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbEluamVjdGVk
U2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUs
IGludCBzY3JpcHRMaW5lKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENhbGxJbmplY3RlZFNj
cmlwdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmcm9u
dGVuZEluaXRpYWxpemVkKCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXVEY6OlN0b3B3
YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgPSAwOworICAgIHZpcnR1YWwgUmVmPFdURjo6U3Rv
cHdhdGNoPiBleGVjdXRpb25TdG9wd2F0Y2goKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggMTQzZGVmOC4uMjk2ZjNhOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmgKQEAgLTMxLDEyICszMSwxMyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogbmFtZXNwYWNlIFByb3RvY29sIHsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEJpbmRpbmdUcmFpdHM7CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBjbGFzcyBPcHRPdXRwdXQgewogcHVibGljOgpAQCAtNjMsMTI2ICs2NCw0MiBA
QCBwcml2YXRlOgogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wdE91dHB1dCk7CiB9OwogCi0v
LyBUaGlzIGNsYXNzIHByb3ZpZGVzICJUcmFpdHMiIHR5cGUgZm9yIHRoZSBpbnB1dCB0eXBlIFQu
IEl0IGlzIHByb2dyYW1tZWQgdXNpbmcgQysrIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uCi0vLyB0
ZWNobmlxdWUuIEJ5IGRlZmF1bHQgaXQgc2ltcGx5IHRha2VzICJJdGVtVHJhaXRzIiB0eXBlIGZy
b20gVCwgYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBiYXNlIHR5cGVzLgotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXIgewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgVDo6SXRlbVRyYWl0cyBUcmFpdHM7Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xh
c3MgQXJyYXkgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXlCYXNlIHsKIHByaXZhdGU6CiAgICAgQXJy
YXkoKSB7IH0KIAotICAgIEluc3BlY3RvckFycmF5KiBvcGVuQWNjZXNzb3JzKCkKKyAgICBJbnNw
ZWN0b3JBcnJheSYgb3BlbkFjY2Vzc29ycygpCiAgICAgewogICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoSW5zcGVjdG9yQXJyYXkpID09IHNpemVvZihBcnJheTxUPiksIGNhbm5vdF9jYXN0
KTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5Kj4oc3RhdGljX2Nh
c3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4odGhpcykpOworICAgICAgICByZXR1cm4gKnN0YXRpY19j
YXN0PEluc3BlY3RvckFycmF5Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4odGhp
cykpOwogICAgIH0KIAogcHVibGljOgotICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFQ+IHZh
bHVlKQorICAgIHZvaWQgYWRkSXRlbShSZWY8VD4mJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFy
cmF5SXRlbUhlbHBlcjxUPjo6VHJhaXRzOjpwdXNoUmVmUHRyKHRoaXMtPm9wZW5BY2Nlc3NvcnMo
KSwgdmFsdWUpOworICAgICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaFZhbHVlKCZ2YWx1ZS5nZXQo
KSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRJdGVtKFQgdmFsdWUpCisgICAgdm9pZCBhZGRJdGVt
KFJlZlB0cjxUPiYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgQXJyYXlJdGVtSGVscGVyPFQ+OjpU
cmFpdHM6OnB1c2hSYXcodGhpcy0+b3BlbkFjY2Vzc29ycygpLCB2YWx1ZSk7CisgICAgICAgIG9w
ZW5BY2Nlc3NvcnMoKS5wdXNoVmFsdWUoV1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQotCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8QXJyYXk8VD4+IGNyZWF0ZSgpCisgICAgCisgICAgdm9pZCBhZGRJ
dGVtKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEFycmF5PFQ+KCkpOworICAgICAgICBvcGVuQWNjZXNzb3JzKCkucHVzaFN0cmluZyh2YWx1
ZSk7CiAgICAgfQotfTsKIAotc3RydWN0IFN0cnVjdEl0ZW1UcmFpdHMgewotICAgIHN0YXRpYyB2
b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIGFkZEl0ZW0oaW50IHZhbHVlKQogICAgIHsKLSAgICAg
ICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CisgICAgICAgIG9wZW5BY2Nlc3NvcnMoKS5wdXNo
SW50ZWdlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWY8QXJyYXk8VD4+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcnJheTxUPigpKTsK
ICAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFN0cmluZz4g
ewotICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmF3KEluc3Bl
Y3RvckFycmF5KiBhcnJheSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXJyYXktPnB1c2hTdHJpbmcodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0K
LXRlbXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8aW50PiB7Ci0gICAgc3RydWN0IFRy
YWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkqIGFycmF5
LCBpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoSW50ZWdlcih2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IEFycmF5
SXRlbUhlbHBlcjxkb3VibGU+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGlj
IHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJheSogYXJyYXksIGRvdWJsZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hEb3VibGUodmFsdWUpOwotICAgICAgICB9Ci0g
ICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8Ym9vbD4gewot
ICAgIHN0cnVjdCBUcmFpdHMgewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmF3KEluc3BlY3Rv
ckFycmF5KiBhcnJheSwgYm9vbCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXkt
PnB1c2hCb29sZWFuKHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3RvclZhbHVlPiB7Ci0gICAgc3RydWN0IFRy
YWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFy
cmF5LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQot
dGVtcGxhdGU8Pgotc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JPYmplY3Q+IHsKLSAg
ICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJlZlB0cihJbnNwZWN0
b3JBcnJheSogYXJyYXksIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQotICAg
IH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFy
cmF5PiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQ
dHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hBcnJheSh2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBBcnJheUl0
ZW1IZWxwZXI8UHJvdG9jb2w6OkFycmF5PFQ+PiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVm
UHRyPFByb3RvY29sOjpBcnJheTxUPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFy
cmF5LT5wdXNoVmFsdWUodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKIH07CiAKIC8vIEhlbHBl
ciBtZXRob2RzIGZvciBQcm90b2NvbCBhbmQgb3RoZXIgSW5zcGVjdG9yIHR5cGVzIGFyZSBwcm92
aWRlZCBieQpAQCAtMTkyLDggKzEwOSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0cyB7CiAgICAgdHlwZWRlZiBUIEJpbmRpbmdUeXBlOwogCisgICAgc3RhdGlj
IHZvaWQgcHVzaChJbnNwZWN0b3JBcnJheSYsIEJpbmRpbmdUeXBlJik7CiAgICAgc3RhdGljIElu
c3BlY3RvclZhbHVlOjpUeXBlIHR5cGVUYWcoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUPiBy
dW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOworICAgIHN0YXRpYyBSZWZQ
dHI8VD4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJik7CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKElu
c3BlY3RvclZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRApAQCAtMjA0LDE1ICsx
MjIsMTYgQEAgc3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBU
WVBFKTsKKyAgICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUgJiYgdmFsdWUtPnR5cGUoKSA9
PSBUWVBFKTsKICAgICB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpBcnJheTxUPj4g
ewotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBydW50aW1lQ2FzdChQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICBzdGF0aWMgUmVmUHRyPEFycmF5PFQ+PiBydW50
aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiAgICAgeworICAgICAgICBB
U1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJyYXk7CiAgICAgICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5
KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
QEAgLTIyNiw2ICsxNDUsNyBAQCBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6QXJyYXk8
VD4+IHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQogICAgIHsKKyAgICAgICAgQVNT
RVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
cmF5OwogICAgICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAKaW5kZXggMmEyYTBiYy4uNDJhNmI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtMzQ3LDcgKzM0Nyw3IEBAIGJv
b2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3Ry
aW5nJiBvdXRwdXQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBj
b25zdCBVQ2hhcioqIHZhbHVlVG9rZW5FbmQsIGludCBkZXB0aCkKK1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNv
bnN0IFVDaGFyKiogdmFsdWVUb2tlbkVuZCwgaW50IGRlcHRoKQogewogICAgIGlmIChkZXB0aCA+
IHN0YWNrTGltaXQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzg1LDE0ICszODUsMTQg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3Rh
cnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgQVJSQVlfQkVHSU46IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3RvckFycmF5PiBh
cnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgc3RhcnQgPSB0b2tlbkVu
ZDsKICAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAm
dG9rZW5FbmQpOwogICAgICAgICB3aGlsZSAodG9rZW4gIT0gQVJSQVlfRU5EKSB7CiAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQs
IGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVz
aFZhbHVlKGFycmF5Tm9kZSk7CisgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdURjo6bW92
ZShhcnJheU5vZGUpKTsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVlLCB3ZSBl
eHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICAgc3RhcnQg
PSB0b2tlbkVuZDsKQEAgLTQwOSwxMSArNDA5LDExIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25z
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuICE9IEFSUkFZX0VORCkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQgPSBhcnJheS5yZWxlYXNlKCk7CisgICAg
ICAgIHJlc3VsdCA9IFdURjo6bW92ZShhcnJheSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIE9CSkVDVF9CRUdJTjogewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBzdGFy
dCA9IHRva2VuRW5kOwogICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRv
a2VuU3RhcnQsICZ0b2tlbkVuZCk7CiAgICAgICAgIHdoaWxlICh0b2tlbiAhPSBPQkpFQ1RfRU5E
KSB7CkBAIC00MzIsNyArNDMyLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRW
YWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnMKICAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQs
ICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBvYmplY3QtPnNldFZhbHVlKGtl
eSwgdmFsdWUpOworICAgICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIFdURjo6bW92ZSh2
YWx1ZSkpOwogICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKIAogICAgICAgICAgICAgLy8g
QWZ0ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0
aGUKQEAgLTQ1MCw3ICs0NTAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZh
bHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29ucwogICAgICAgICB9
CiAgICAgICAgIGlmICh0b2tlbiAhPSBPQkpFQ1RfRU5EKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHJlc3VsdCA9IG9iamVjdC5yZWxlYXNlKCk7CisgICAgICAgIHJlc3Vs
dCA9IFdURjo6bW92ZShvYmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTczOSw4
ICs3MzksOCBAQCBJbnNwZWN0b3JPYmplY3QqIEluc3BlY3Rvck9iamVjdEJhc2U6Om9wZW5BY2Nl
c3NvcnMoKQogCiBib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKLSAgICBpZiAoIXZhbHVlKQorICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB2YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7
CkBAIC03NDgsNDAgKzc0OCwzOSBAQCBib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJvb2xl
YW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRw
dXQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1l
KTsKLSAgICBpZiAoIXZhbHVlKQorICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7Cisg
ICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHJldHVybiB2YWx1ZS0+YXNTdHJpbmcob3V0cHV0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0Citib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBT
dHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CiB7Ci0g
ICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgaWYg
KCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZTsKKyAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0OwotICAgIHZh
bHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAg
IHJldHVybiB2YWx1ZS0+YXNPYmplY3Qob3V0cHV0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAorYm9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJpbmcm
IG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dHB1dCkgY29uc3QKIHsKLSAgICBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKLSAgICBpZiAoIXZhbHVl
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlOworICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdDsKLSAgICB2YWx1ZS0+YXNB
cnJheShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiB2
YWx1ZS0+YXNBcnJheShvdXRwdXQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorYm9vbCBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4mIG91dHB1dCkgY29uc3QKIHsKLSAgICBEaWN0aW9uYXJ5Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fZGF0YS5maW5kKG5hbWUpOwotICAgIGlmIChpdCA9PSBtX2RhdGEuZW5k
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBpdC0+dmFsdWU7CisgICAg
RGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fZGF0YS5maW5kKG5hbWUp
OworICAgIGlmIChmaW5kUmVzdWx0ID09IG1fZGF0YS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgb3V0cHV0ID0gZmluZFJlc3VsdC0+dmFsdWU7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKQEAgLTc5OSwxMyArNzk4LDEzIEBAIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVK
U09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQuYXBwZW5kKCd7
Jyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobV9vcmRl
cltpXSk7Ci0gICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOworICAgICAgICBhdXRv
IGZpbmRSZXN1bHQgPSBtX2RhdGEuZmluZChtX29yZGVyW2ldKTsKKyAgICAgICAgQVNTRVJUKGZp
bmRSZXN1bHQgIT0gbV9kYXRhLmVuZCgpKTsKICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCcsJyk7Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5rZXksIG91
dHB1dCk7CisgICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGZpbmRSZXN1bHQtPmtleSwgb3V0cHV0
KTsKICAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOwotICAgICAgICBpdC0+dmFsdWUtPndyaXRl
SlNPTihvdXRwdXQpOworICAgICAgICBmaW5kUmVzdWx0LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1
dCk7CiAgICAgfQogICAgIG91dHB1dC5hcHBlbmQoJ30nKTsKIH0KQEAgLTg0NSw1MCArODQ0LDUw
IEBAIEluc3BlY3RvckFycmF5QmFzZTo6SW5zcGVjdG9yQXJyYXlCYXNlKCkKIHsKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGlu
ZGV4KQorUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JBcnJheUJhc2U6OmdldChzaXpl
X3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBtX2RhdGEuc2l6ZSgpKTsKICAgICByZXR1cm4gbV9kYXRhW2luZGV4XTsKIH0KIAotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkKK1JlZjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3Rvck9iamVjdCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5z
cGVjdG9yT2JqZWN0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpCitSZWY8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQXJyYXkpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckFycmF5KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKQorUmVmPEluc3BlY3RvclZhbHVlPiBJ
bnNwZWN0b3JWYWx1ZTo6bnVsbCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0
b3JWYWx1ZSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yVmFsdWUpOwogfQog
Ci1QYXNzUmVmUHRyPEluc3BlY3RvclN0cmluZz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JTdHJpbmc+IEluc3BlY3RvclN0cmluZzo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bnNwZWN0b3JTdHJpbmcodmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0
b3JTdHJpbmcodmFsdWUpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHJpbmc+IEluc3Bl
Y3RvclN0cmluZzo6Y3JlYXRlKGNvbnN0IGNoYXIqIHZhbHVlKQorUmVmPEluc3BlY3RvclN0cmlu
Zz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHJpbmcodmFsdWUpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBJbnNwZWN0b3JTdHJpbmcodmFsdWUpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JCYXNpY1ZhbHVlPiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoYm9vbCB2YWx1ZSkK
K1JlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoYm9v
bCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUo
dmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZh
bHVlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFz
aWNWYWx1ZTo6Y3JlYXRlKGludCB2YWx1ZSkKK1JlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoaW50IHZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYXNpY1ZhbHVlPiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoZG91YmxlIHZhbHVlKQor
UmVmPEluc3BlY3RvckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShkb3Vi
bGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVl
KHZhbHVlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2
YWx1ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDI5NmFmN2QuLjU2
YThmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaApAQCAtMzIsNyArMzIsNiBAQAogI2lmbmRlZiBJbnNwZWN0b3JWYWx1ZXNfaAog
I2RlZmluZSBJbnNwZWN0b3JWYWx1ZXNfaAogCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIDog
bV90eXBlKFR5cGU6Ok51bGwpIHsgfQogICAgIHZpcnR1YWwgfkluc3BlY3RvclZhbHVlKCkgeyB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbnVsbCgpOworICAgIHN0
YXRpYyBSZWY8SW5zcGVjdG9yVmFsdWU+IG51bGwoKTsKIAogICAgIGVudW0gY2xhc3MgVHlwZSB7
CiAgICAgICAgIE51bGwgPSAwLApAQCAtOTksOSArOTgsOSBAQCBwcml2YXRlOgogY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQmFzaWNWYWx1ZSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1
ZSB7CiBwdWJsaWM6CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVl
PiBjcmVhdGUoYm9vbCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1
ZT4gY3JlYXRlKGludCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1
ZT4gY3JlYXRlKGRvdWJsZSk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBj
cmVhdGUoYm9vbCk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUo
aW50KTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShkb3VibGUp
OwogCiAgICAgdmlydHVhbCBib29sIGFzQm9vbGVhbihib29sJikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgLy8gTnVtYmVycyBmcm9tIHRoZSBmcm9udGVuZCBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3Vi
bGVzLCBzbyB3ZSBhbGxvdwpAQCAtMTM4LDggKzEzNyw4IEBAIHByaXZhdGU6CiAKIGNsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclN0cmluZyA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBj
cmVhdGUoY29uc3QgY2hhciopOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yU3RyaW5nPiBjcmVh
dGUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JTdHJpbmc+IGNyZWF0
ZShjb25zdCBjaGFyKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nJiBvdXRw
dXQpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xNzcsOSArMTc2LDkgQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIGludCk7CiAgICAgdm9pZCBzZXRE
b3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKLSAgICB2b2lkIHNl
dE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFz
ZT4pOwotICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5QmFzZT4pOworICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYpOworICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+JiYpOworICAgIHZvaWQgc2V0
QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiYmKTsK
IAogICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CkBAIC0xODgsMjMgKzE4NywyNSBA
QCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCYgb3V0cHV0KSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJsZShj
b25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgICAgIGlmICghZ2V0
VmFsdWUobmFtZSwgdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAg
IHJldHVybiB2YWx1ZS0+YXNEb3VibGUob3V0cHV0KTsKICAgICB9CiAgICAgdGVtcGxhdGU8Y2xh
c3MgVD4gYm9vbCBnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25z
dAogICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1l
KTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2
YWx1ZTsKKyAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVnZXIob3V0cHV0KTsK
ICAgICB9CiAKICAgICBib29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYg
b3V0cHV0KSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGdl
dE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JikgY29u
c3Q7CisgICAgYm9vbCBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mKSBjb25zdDsKKyAgICBib29sIGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiYpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmUoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKIApAQCAtMjI3LDcgKzIyOCw3IEBAIHByaXZhdGU6CiAKIGNsYXNzIElu
c3BlY3Rvck9iamVjdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3RCYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZSgpOworICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGUoKTsKIAogICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmFzT2JqZWN0Owog
CkBAIC0yNDYsNyArMjQ3LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJh
c2U6OmdldFN0cmluZzsKICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3Q7
CiAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0QXJyYXk7Ci0gICAgdXNpbmcgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6Z2V0OworICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6Omdl
dFZhbHVlOwogCiAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlOwogCkBAIC0y
NzMsMTEgKzI3NCwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwdXNoSW50ZWdlcihpbnQpOwog
ICAgIHZvaWQgcHVzaERvdWJsZShkb3VibGUpOwogICAgIHZvaWQgcHVzaFN0cmluZyhjb25zdCBT
dHJpbmcmKTsKLSAgICB2b2lkIHB1c2hWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7
Ci0gICAgdm9pZCBwdXNoT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7Ci0gICAg
dm9pZCBwdXNoQXJyYXkoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4pOworICAgIHZvaWQgcHVz
aFZhbHVlKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJik7CisgICAgdm9pZCBwdXNoT2JqZWN0KFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiYmKTsKKyAgICB2b2lkIHB1c2hBcnJheShSZWZQdHI8
SW5zcGVjdG9yQXJyYXlCYXNlPiYmKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGdldChzaXplX3QgaW5kZXgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KHNpemVf
dCBpbmRleCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91
dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTI5NSw3ICsyOTYsNyBAQCBwcml2YXRlOgogCiBj
bGFzcyBJbnNwZWN0b3JBcnJheSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheUJhc2UgewogcHVibGlj
OgotICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUmVmPEluc3BlY3RvckFy
cmF5PiBjcmVhdGUoKTsKIAogICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6YXNBcnJheTsK
IApAQCAtMzQ0LDI0ICszNDUsMjQgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWwKICAgICBzZXRW
YWx1ZShuYW1lLCBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUg
dm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoraW5saW5lIHZvaWQgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+JiYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICBpZiAobV9kYXRhLnNldChu
YW1lLCB2YWx1ZSkuaXNOZXdFbnRyeSkKKyAgICBpZiAobV9kYXRhLnNldChuYW1lLCBXVEY6Om1v
dmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0K
IAotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiB2YWx1ZSkKK2lubGluZSB2
b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7
Ci0gICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAgaWYgKG1f
ZGF0YS5zZXQobmFtZSwgV1RGOjptb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9v
cmRlci5hcHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6
OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheUJh
c2U+IHZhbHVlKQoraW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29u
c3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiYmIHZhbHVlKQogewog
ICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3
RW50cnkpCisgICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgV1RGOjptb3ZlKHZhbHVlKSkuaXNOZXdF
bnRyeSkKICAgICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CiAKQEAgLTM4NSwyMiArMzg2
LDIyIEBAIGlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUo
dmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoVmFsdWUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JB
cnJheUJhc2U6OnB1c2hWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCiB7CiAg
ICAgQVNTRVJUKHZhbHVlKTsKLSAgICBtX2RhdGEuYXBwZW5kKHZhbHVlKTsKKyAgICBtX2RhdGEu
YXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJh
eUJhc2U6OnB1c2hPYmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQoraW5s
aW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JP
YmplY3RCYXNlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgbV9kYXRhLmFw
cGVuZCh2YWx1ZSk7CisgICAgbV9kYXRhLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKIH0KIAot
aW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoQXJyYXkoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hB
cnJheShSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiYmIHZhbHVlKQogewogICAgIEFTU0VSVCh2
YWx1ZSk7Ci0gICAgbV9kYXRhLmFwcGVuZCh2YWx1ZSk7CisgICAgbV9kYXRhLmFwcGVuZChXVEY6
Om1vdmUodmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNs
aWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0
Q29uc29sZUNsaWVudC5jcHAKaW5kZXggNTAwYWZlMi4uYTdmYjEwNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RD
b25zb2xlQ2xpZW50LmNwcApAQCAtNzUsMTkgKzc1LDE4IEBAIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudDo6SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50KEluc3BlY3RvckNvbnNvbGVBZ2Vu
dCoKICAgICB9KTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6Om1lc3Nh
Z2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBwcnBBcmd1
bWVudHMpCit2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBl
QW5kTGV2ZWwoTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAg
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzID0gcHJwQXJndW1lbnRzOwogCiAgICAg
aWYgKEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bG9nVG9TeXN0ZW1Db25zb2xlKCkpCi0g
ICAgICAgIENvbnNvbGVDbGllbnQ6OnByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1l
c3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIHR5cGUsIGxldmVsLCBleGVjLCBhcmd1bWVudHMpOwor
ICAgICAgICBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhN
ZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgZXhlYywgYXJndW1lbnRzLmNv
cHlSZWYoKSk7CiAKICAgICBTdHJpbmcgbWVzc2FnZTsKICAgICBhcmd1bWVudHMtPmdldEZpcnN0
QXJndW1lbnRBc1N0cmluZyhtZXNzYWdlKTsKLSAgICBtX2NvbnNvbGVBZ2VudC0+YWRkTWVzc2Fn
ZVRvQ29uc29sZShNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgbWVzc2Fn
ZSwgZXhlYywgYXJndW1lbnRzLnJlbGVhc2UoKSk7CisgICAgbV9jb25zb2xlQWdlbnQtPmFkZE1l
c3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1l
c3NhZ2UsIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9i
amVjdENvbnNvbGVDbGllbnQ6OmNvdW50KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50
Ojpjb3VudChFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1l
bnRzKQogewogICAgIG1fY29uc29sZUFnZW50LT5jb3VudChleGVjLCBhcmd1bWVudHMpOwogfQpA
QCAtMTEwLDEwICsxMDksMTAgQEAgdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRp
bWUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHZvaWQgSlNHbG9iYWxPYmplY3RD
b25zb2xlQ2xpZW50Ojp0aW1lRW5kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKIHsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0
Q2FsbFN0YWNrRm9yQ29uc29sZShleGVjLCAxKSk7Ci0gICAgbV9jb25zb2xlQWdlbnQtPnN0b3BU
aW1pbmcodGl0bGUsIGNhbGxTdGFjay5yZWxlYXNlKCkpOworICAgIG1fY29uc29sZUFnZW50LT5z
dG9wVGltaW5nKHRpdGxlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSk7CiB9CiAKLXZvaWQgSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxT
Y3JpcHRBcmd1bWVudHM+KQordm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRpbWVT
dGFtcChFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmKQogewogICAgIC8vIEZJ
WE1FOiBKU0NvbnRleHQgaW5zcGVjdGlvbiBuZWVkcyBhIHRpbWVsaW5lLgogICAgIHdhcm5Vbmlt
cGxlbWVudGVkKEFTQ0lJTGl0ZXJhbCgiY29uc29sZS50aW1lU3RhbXAiKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNs
aWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENv
bnNvbGVDbGllbnQuaAppbmRleCBmNGFiOTFlLi5lMzVlOWI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xl
Q2xpZW50LmgKQEAgLTQzLDE3ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUxvZ1RvU3lzdGVtQ29uc29sZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpT
Qzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRM
ZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxT
Y3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChKU0M6
OkV4ZWNTdGF0ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBwcm9maWxlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGltZShKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCB0aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHRpbWVTdGFt
cChKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgogICAgIHZvaWQgd2FyblVuaW1wbGVtZW50ZWQoY29uc3QgU3RyaW5nJiBtZXRo
b2QpOwotICAgIHZvaWQgaW50ZXJuYWxBZGRNZXNzYWdlKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2
ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2
b2lkIGludGVybmFsQWRkTWVzc2FnZShNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4
ZWNTdGF0ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYpOwogCiAgICAgSW5zcGVjdG9yQ29u
c29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggYmM4YzRiMS4uYjhhZGVjYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmpl
Y3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjIyLDkgKzIyMiw5IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9udGVuZEluaXRpYWxpemVkKCkKICNlbmRp
ZgogfQogCi1QYXNzUmVmUHRyPFN0b3B3YXRjaD4gSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250
cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQorUmVmPFN0b3B3YXRjaD4gSlNHbG9iYWxPYmpl
Y3RJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQogewotICAgIHJldHVy
biBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKKyAgICByZXR1cm4gbV9leGVjdXRpb25TdG9wd2F0Y2gu
Y29weVJlZigpOwogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBhNjBkNDdiLi4y
YTAyMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTkzLDcg
KzkzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbEluamVjdGVkU2NyaXB0
RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBpbnQpIG92ZXJyaWRlIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRGdW5jdGlvbihKU0M6OkV4
ZWNTdGF0ZSopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZEluaXRpYWxp
emVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdURjo6U3RvcHdhdGNoPiBl
eGVjdXRpb25TdG9wd2F0Y2goKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZjxXVEY6OlN0b3B3
YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICB2aXJ0dWFsIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlckNsaWVudCogYXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9hdWdtZW50aW5nQ2xpZW50OyB9IApAQCAtMTE1
LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQWdlbnRSZWdpc3RyeSBtX2FnZW50
czsKICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOwogICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9pbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjsKLSAgICBSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IG1fZXhlY3V0aW9u
U3RvcHdhdGNoOworICAgIFJlZjxXVEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7
CiAgICAgYm9vbCBtX2luY2x1ZGVOYXRpdmVDYWxsU3RhY2tXaXRoRXhjZXB0aW9uczsKICAgICBi
b29sIG1faXNBdXRvbWF0aWNJbnNwZWN0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5jcHAKaW5kZXggN2M5NTBlOC4uMjhjMmFm
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxs
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bEZyYW1lLmNwcApAQCAtNTgsNyArNTgsNyBAQCBib29sIFNjcmlwdENhbGxGcmFtZTo6aXNFcXVh
bChjb25zdCBTY3JpcHRDYWxsRnJhbWUmIG8pIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+
IFNjcmlwdENhbGxGcmFtZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAorUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4gU2NyaXB0Q2FsbEZyYW1lOjpidWls
ZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNvbnNvbGU6OkNhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldEZ1bmN0aW9uTmFt
ZShtX2Z1bmN0aW9uTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxGcmFtZS5oCmluZGV4IDZhOWNkNzcuLjAxN2RkZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuaApAQCAtNTQsNyAr
NTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VxdWFsKGNvbnN0IFNjcmlwdENhbGxGcmFtZSYp
IGNvbnN0OwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoKSBj
b25zdDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPiBi
dWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAKaW5k
ZXggNmY4MWE1OC4uYWE0NTJhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcApAQCAtMzYsMTQgKzM2LDE0IEBACiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi1QYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gU2NyaXB0Q2Fs
bFN0YWNrOjpjcmVhdGUoKQorUmVmPFNjcmlwdENhbGxTdGFjaz4gU2NyaXB0Q2FsbFN0YWNrOjpj
cmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0Q2FsbFN0YWNrKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JpcHRDYWxsU3RhY2spOwogfQogCi1QYXNzUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoVmVjdG9yPFNjcmlwdENh
bGxGcmFtZT4mIGZyYW1lcykKK1JlZjxTY3JpcHRDYWxsU3RhY2s+IFNjcmlwdENhbGxTdGFjazo6
Y3JlYXRlKFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+JiBmcmFtZXMpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTY3JpcHRDYWxsU3RhY2soZnJhbWVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2NyaXB0Q2FsbFN0YWNrKGZyYW1lcykpOwogfQogCiBTY3JpcHRDYWxsU3RhY2s6OlNj
cmlwdENhbGxTdGFjaygpCkBAIC0xMDcsMTIgKzEwNywxMiBAQCBib29sIFNjcmlwdENhbGxTdGFj
azo6aXNFcXVhbChTY3JpcHRDYWxsU3RhY2sqIG8pIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBTY3JpcHRDYWxsU3RhY2s6OmJ1aWxkSW5z
cGVjdG9yQXJyYXkoKSBjb25zdAorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4+IFNjcmlwdENhbGxTdGFjazo6YnVp
bGRJbnNwZWN0b3JBcnJheSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4+IGZyYW1l
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNv
bGU6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOworICAgIGF1dG8gZnJhbWVzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPjo6
Y3JlYXRlKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7IGkr
KykKICAgICAgICAgZnJhbWVzLT5hZGRJdGVtKG1fZnJhbWVzLmF0KGkpLmJ1aWxkSW5zcGVjdG9y
T2JqZWN0KCkpOwotICAgIHJldHVybiBmcmFtZXM7CisgICAgcmV0dXJuIFdURjo6bW92ZShmcmFt
ZXMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5oCmluZGV4IDYzZTNjZTEuLjZkYjdkZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaApAQCAtNDcsOCAr
NDcsOCBAQCBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRDYWxsU3RhY2sgOiBwdWJsaWMg
UmVmQ291bnRlZDxTY3JpcHRDYWxsU3RhY2s+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heENhbGxTdGFja1NpemVUb0NhcHR1cmUgPSAyMDA7CiAgICAgCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGUoKTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZShWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiYpOwor
ICAgIHN0YXRpYyBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUmVm
PFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlKFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+Jik7CiAKICAg
ICB+U2NyaXB0Q2FsbFN0YWNrKCk7CiAKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIGJv
b2wgaXNFcXVhbChTY3JpcHRDYWxsU3RhY2sqKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBidWlsZEluc3BlY3RvckFycmF5KCkgY29u
c3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4+IGJ1aWxkSW5zcGVjdG9yQXJyYXkoKSBjb25zdDsKICNl
bmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDc2NWFmOTkuLjRmNjk1YTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCiAgICAgaWYg
KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0KQotICAgICAgICBpbnNwZWN0KG1fcGVuZGluZ0lu
c3BlY3REYXRhLmZpcnN0LCBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQpOworICAgICAgICBp
bnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LmNvcHlSZWYoKSwgbV9wZW5kaW5nSW5z
cGVjdERhdGEuc2Vjb25kLmNvcHlSZWYoKSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9wZW5kaW5nRXh0cmFEb21haW5zRGF0YSkKQEAg
LTk5LDcgKzk5LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJp
bmcmKQogICAgIG1fZW52aXJvbm1lbnQuZnJvbnRlbmRJbml0aWFsaXplZCgpOwogfQogCi12b2lk
IEluc3BlY3RvckFnZW50OjppbnNwZWN0KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4gb2JqZWN0VG9JbnNwZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
aGludHMpCit2b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0KFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYmIG9iamVjdFRvSW5zcGVjdCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBoaW50cykKIHsKICAgICBpZiAobV9lbmFibGVkICYmIG1fZnJvbnRlbmREaXNwYXRj
aGVyKSB7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KG9iamVjdFRvSW5z
cGVjdCwgaGludHMpOwpAQCAtMTMwLDkgKzEzMCw5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmFj
dGl2YXRlRXh0cmFEb21haW4oY29uc3QgU3RyaW5nJiBkb21haW5OYW1lKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGRvbWFpbk5hbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGRvbWFp
bk5hbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAg
ICAgZG9tYWluTmFtZXMtPmFkZEl0ZW0oZG9tYWluTmFtZSk7Ci0gICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmFjdGl2YXRlRXh0cmFEb21haW5zKGRvbWFpbk5hbWVzLnJlbGVhc2UoKSk7CisgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmFjdGl2YXRlRXh0cmFEb21haW5zKFdURjo6bW92ZShkb21h
aW5OYW1lcykpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWlu
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0cmFEb21haW5zKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKaW5kZXgg
YzkwZTI0Mi4uNzMwZGNlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCkBAIC02MSw3ICs2MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplZChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAg
dm9pZCBpbnNwZWN0KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
b2JqZWN0VG9JbnNwZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGludHMpOworICAg
IHZvaWQgaW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBv
YmplY3RUb0luc3BlY3QsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGludHMpOwogICAgIHZv
aWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNDdhYmRmZC4uMDNiZDQ4YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTE0MSwxNiArMTQxLDE2IEBAIGJvb2wgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6aXNQYXVzZWQoKQogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpo
YW5kbGVDb25zb2xlQXNzZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBpZiAoc2Ny
aXB0RGVidWdTZXJ2ZXIoKS5wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkgIT0gSlNDOjpEZWJ1Z2dl
cjo6RG9udFBhdXNlT25FeGNlcHRpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb24+IHJlYXNvbiA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCk7CisgICAgICAg
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb24+IHJl
YXNvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6
Y3JlYXRlKCkucmVsZWFzZSgpOwogICAgICAgICBpZiAoIW1lc3NhZ2UuaXNOdWxsKCkpCiAgICAg
ICAgICAgICByZWFzb24tPnNldE1lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgIGJyZWFrUHJvZ3Jh
bShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpBc3NlcnQsIHJl
YXNvbi0+b3BlbkFjY2Vzc29ycygpKTsKICAgICB9CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JCcmVha3BvaW50Q29va2llKGNvbnN0IFN0cmlu
ZyYgdXJsLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlvbnMsIGJvb2wgaXNSZWdleCwg
Ym9vbCBhdXRvQ29udGludWUpCitzdGF0aWMgUmVmPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JCcmVha3BvaW50Q29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwg
aW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIGFjdGlvbnMsIGJvb2wgaXNSZWdleCwgYm9vbCBhdXRvQ29udGludWUpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYnJlYWtwb2ludE9iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidXJsIiksIHVybCk7CiAgICAgYnJlYWtwb2ludE9iamVjdC0+
c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImxpbmVOdW1iZXIiKSwgbGluZU51bWJlcik7CiAgICAg
YnJlYWtwb2ludE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvbHVtbk51bWJlciIp
LCBjb2x1bW5OdW1iZXIpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2woRXJyb3JTdHJpbmcmIGVycm9y
U3RyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qg
b3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkxvY2F0aW9uPj4mIGxvY2F0aW9ucykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qg
b3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCiB7CiAgICAgbG9jYXRpb25zID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
Pjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFvcHRpb25hbFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkg
ewpAQCAtMjYxLDkgKzI2MSw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJl
YWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpCiAgICAgYm9vbCBh
dXRvQ29udGludWUgPSBmYWxzZTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFjdGlvbnM7
CiAgICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgICAgKCpvcHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRpdGlvbik7Ci0gICAgICAgICgqb3B0aW9ucyktPmdl
dEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGludWUiKSwgYXV0b0NvbnRpbnVlKTsKLSAg
ICAgICAgYWN0aW9ucyA9ICgqb3B0aW9ucyktPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9u
cyIpKTsKKyAgICAgICAgb3B0aW9ucy0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9u
IiksIGNvbmRpdGlvbik7CisgICAgICAgIG9wdGlvbnMtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFs
KCJhdXRvQ29udGludWUiKSwgYXV0b0NvbnRpbnVlKTsKKyAgICAgICAgb3B0aW9ucy0+Z2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJhY3Rpb25zIiksIGFjdGlvbnMpOwogICAgIH0KIAogICAgIEJyZWFr
cG9pbnRBY3Rpb25zIGJyZWFrcG9pbnRBY3Rpb25zOwpAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IGxpCiAKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3Bv
aW50SWRlbnRpZmllciwgaXQtPmtleSwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlv
bikKLSAgICAgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShsb2NhdGlvbik7CisgICAgICAgICAg
ICBsb2NhdGlvbnMtPmFkZEl0ZW0oV1RGOjptb3ZlKGxvY2F0aW9uKSk7CiAgICAgfQogICAgICpv
dXRCcmVha3BvaW50SWRlbnRpZmllciA9IGJyZWFrcG9pbnRJZGVudGlmaWVyOwogfQpAQCAtMzAw
LDcgKzMwMCw3IEBAIHN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBJbnNwZWN0b3JPYmplY3QmIGxvY2F0aW9uLCBKCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRp
b24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9u
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9j
YXRpb24pCiB7CiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRDsKICAgICB1bnNpZ25lZCBsaW5l
TnVtYmVyOwpAQCAtMzEyLDkgKzMxMiw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0CiAgICAg
Ym9vbCBhdXRvQ29udGludWUgPSBmYWxzZTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFj
dGlvbnM7CiAgICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgICAgKCpvcHRpb25zKS0+Z2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRpdGlvbik7Ci0gICAgICAgICgqb3B0aW9u
cyktPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGludWUiKSwgYXV0b0NvbnRpbnVl
KTsKLSAgICAgICAgYWN0aW9ucyA9ICgqb3B0aW9ucyktPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgi
YWN0aW9ucyIpKTsKKyAgICAgICAgb3B0aW9ucy0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29u
ZGl0aW9uIiksIGNvbmRpdGlvbik7CisgICAgICAgIG9wdGlvbnMtPmdldEJvb2xlYW4oQVNDSUlM
aXRlcmFsKCJhdXRvQ29udGludWUiKSwgYXV0b0NvbnRpbnVlKTsKKyAgICAgICAgb3B0aW9ucy0+
Z2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhY3Rpb25zIiksIGFjdGlvbnMpOwogICAgIH0KIAogICAg
IEJyZWFrcG9pbnRBY3Rpb25zIGJyZWFrcG9pbnRBY3Rpb25zOwpAQCAtMzUwLDcgKzM1MCw3IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbikKK3ZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbikKIHsKICAgICBpZiAobV9j
b250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQgIT0gSlNDOjpub0JyZWFrcG9pbnRJRCkgewog
ICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRv
TG9jYXRpb25CcmVha3BvaW50SUQpOwpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QKICAgICByZXN1bWUoZXJyb3JTdHJpbmcpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6cmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwg
SlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2lu
dCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtw
b2ludElkZW50aWZpZXIsIEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFr
cG9pbnQmIGJyZWFrcG9pbnQpCiB7CiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3Igc2NyaXB0SXRl
cmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9y
ID09IG1fc2NyaXB0cy5lbmQoKSkKQEAgLTM4OCwxMSArMzg4LDEyIEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZXNvCiAgICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElEc0l0ZXJhdG9yID0gbV9i
cmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLnNldChicmVha3Bv
aW50SWRlbnRpZmllciwgVmVjdG9yPEpTQzo6QnJlYWtwb2ludElEPigpKS5pdGVyYXRvcjsKICAg
ICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElEKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OkxvY2F0aW9uOjpjcmVhdGUoKQorICAgIGF1dG8gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChT
dHJpbmc6Om51bWJlcihzb3VyY2VJRCkpCi0gICAgICAgIC5zZXRMaW5lTnVtYmVyKGFjdHVhbExp
bmVOdW1iZXIpOworICAgICAgICAuc2V0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVyKQorICAg
ICAgICAucmVsZWFzZSgpOwogICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoYWN0dWFsQ29s
dW1uTnVtYmVyKTsKLSAgICByZXR1cm4gbG9jYXRpb247CisgICAgcmV0dXJuIFdURjo6bW92ZShs
b2NhdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250
ZW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBi
b29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMp
CkBAIC00MzAsMTMgKzQzMSwxMyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1
bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0RnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBmdW5jdGlvbklkLCAmZGV0
YWlscyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9u
TmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
IGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCiB7CiAgICAgaWYgKG1famF2YVNjcmlwdFBhdXNlU2No
ZWR1bGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2JyZWFrUmVhc29uID0gYnJlYWtSZWFz
b247Ci0gICAgbV9icmVha0F1eERhdGEgPSBkYXRhOworICAgIG1fYnJlYWtBdXhEYXRhID0gV1RG
Ojptb3ZlKGRhdGEpOwogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuc2V0UGF1c2VPbk5leHRTdGF0
ZW1lbnQodHJ1ZSk7CiB9CiAKQEAgLTU0NCwxMiArNTQ1LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0T3ZlcmxheU1lc3NhZ2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcq
KQogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlD
U1AoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KQogewogICAgIGlmIChzY3JpcHREZWJ1Z1Nl
cnZlcigpLnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSAhPSBKU0M6OkRlYnVnZ2VyOjpEb250UGF1
c2VPbkV4Y2VwdGlvbnMpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpDU1BWaW9sYXRpb25QYXVzZVJlYXNvbj4gcmVhc29uID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkNTUFZpb2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKS5zZXREaXJl
Y3RpdmUoZGlyZWN0aXZlVGV4dCk7CisgICAgICAgIGF1dG8gcmVhc29uID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OkNTUFZpb2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQorICAg
ICAgICAgICAgLnNldERpcmVjdGl2ZShkaXJlY3RpdmVUZXh0KQorICAgICAgICAgICAgLnJlbGVh
c2UoKTsKICAgICAgICAgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNw
YXRjaGVyOjpSZWFzb246OkNTUFZpb2xhdGlvbiwgcmVhc29uLT5vcGVuQWNjZXNzb3JzKCkpOwog
ICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y3VycmVudENhbGxGcmFtZXMoKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcygpCiB7CiAgICAgaWYgKCFtX3BhdXNlZFNjcmlwdFN0
YXRlKQogICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwpAQCAtNjA2LDcgKzYw
OSw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpT
b3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3Qt
PmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIpLCBicmVha3BvaW50LmNvbmRpdGlv
bik7CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJh
dXRvQ29udGludWUiKSwgYnJlYWtwb2ludC5hdXRvQ29udGludWUpOwogICAgICAgICBFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25z
ID0gYnJlYWtwb2ludE9iamVjdC0+Z2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhY3Rpb25zIikpOwor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFjdGlvbnM7CisgICAgICAgIGJyZWFrcG9p
bnRPYmplY3QtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpLCBhY3Rpb25zKTsKICAg
ICAgICAgaWYgKCFicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChlcnJvclN0cmluZywgYWN0
aW9ucywgJmJyZWFrcG9pbnQuYWN0aW9ucykpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC02NjUsMTQgKzY2OSwxNSBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNT
dGF0ZSogc2NyaXB0U3RhdGUsCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQg
PSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUp
OwogICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBwYXlsb2FkID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2lu
dEFjdGlvbihhY3Rpb24pKTsKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpQcm9iZVNh
bXBsZT4gcmVzdWx0ID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpQcm9iZVNhbXBsZTo6Y3JlYXRlKCkK
KyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRQcm9iZUlkKGFjdGlvbi5pZGVudGlmaWVyKQogICAgICAgICAuc2V0
QmF0Y2hJZChiYXRjaElkKQogICAgICAgICAuc2V0U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAg
IC5zZXRUaW1lc3RhbXAobV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25t
ZW50KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCktPmVsYXBzZWRUaW1lKCkpCi0gICAgICAgIC5zZXRQ
YXlsb2FkKHBheWxvYWQucmVsZWFzZSgpKTsKKyAgICAgICAgLnNldFBheWxvYWQocGF5bG9hZC5y
ZWxlYXNlKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZGlkU2FtcGxlUHJvYmUocmVzdWx0LnJlbGVhc2UoKSk7CisgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmRpZFNhbXBsZVByb2JlKFdURjo6bW92ZShyZXN1bHQpKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCkBAIC02ODcsMTAgKzY5MiwxMCBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+cmVzdW1lZCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
IGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRl
bmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgZGF0YSkKIHsKICAgICBtX2JyZWFrUmVhc29uID0gYnJlYWtSZWFzb247Ci0gICAgbV9icmVh
a0F1eERhdGEgPSBkYXRhOworICAgIG1fYnJlYWtBdXhEYXRhID0gV1RGOjptb3ZlKGRhdGEpOwog
ICAgIHNjcmlwdERlYnVnU2VydmVyKCkuYnJlYWtQcm9ncmFtKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwYWU3MzMxLi45YTc0Y2M1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtNzQsMTAgKzczLDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmlu
ZyYsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4m
IGxvY2F0aW9ucykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBsb2Nh
dGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYs
IGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBs
b2NhdGlvbnMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9y
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0
aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mIGxvY2F0aW9uKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGlu
dWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBsb2NhdGlvbikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluQ29udGVudChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJ
c1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0
SUQsIFN0cmluZyogc2NyaXB0U291cmNlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mKSBv
dmVycmlkZTsKQEAgLTk0LDkgKzkzLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaGFuZGxl
Q29uc29sZUFzc2VydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCi0gICAgdm9pZCBzY2hlZHVs
ZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb24gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsK
KyAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJG
cm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBkYXRhKTsKICAgICB2b2lkIGNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7Ci0g
ICAgdm9pZCBicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwor
ICAgIHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb24gYnJlYWtSZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSk7CiAg
ICAgdm9pZCBzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1AoY29uc3QgU3RyaW5nJiBkaXJlY3Rp
dmVUZXh0KTsKIAogICAgIGNsYXNzIExpc3RlbmVyIHsKQEAgLTEzMiw3ICsxMzEsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBkaWRDbGVhckdsb2JhbE9iamVjdCgpOwogCiBwcml2YXRlOgotICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpD
YWxsRnJhbWU+PiBjdXJyZW50Q2FsbEZyYW1lcygpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZFBh
cnNlU291cmNlKEpTQzo6U291cmNlSUQsIGNvbnN0IFNjcmlwdCYpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKSBvdmVycmlkZSBmaW5hbDsKQEAgLTE0MCw3ICsxMzksNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBicmVha3BvaW50QWN0aW9uU291bmQoaW50IGJyZWFr
cG9pbnRBY3Rpb25JZGVudGlmaWVyKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYnJlYWtw
b2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU2NyaXB0QnJlYWtwb2ludEFj
dGlvbiYsIHVuc2lnbmVkIGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgc2FtcGxlKSBvdmVycmlkZSBmaW5hbDsKIAotICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiByZXNvbHZlQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJjZUlELCBj
b25zdCBTY3JpcHRCcmVha3BvaW50Jik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVh
a3BvaW50SWRlbnRpZmllciwgSlNDOjpTb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYp
OwogICAgIGJvb2wgYXNzZXJ0UGF1c2VkKEVycm9yU3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckRl
YnVnZ2VyQnJlYWtwb2ludFN0YXRlKCk7CiAgICAgdm9pZCBjbGVhckluc3BlY3RvckJyZWFrcG9p
bnRTdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNjMyZGVmMy4u
YTM5NDFkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC04MCwxMiArODAs
MTIgQEAgc3RhdGljIFNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHNl
dFBhdXNlT25FeGNlcHRpb25zU3RhdGUoU2NyaXAKICAgICByZXR1cm4gcHJlc2VudFN0YXRlOwog
fQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJv
clJhbmdlPiBidWlsZEVycm9yUmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiB0b2tl
bkxvY2F0aW9uKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJv
clJhbmdlPiBidWlsZEVycm9yUmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiB0b2tl
bkxvY2F0aW9uKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlPiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJh
bmdlOjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U3RhcnRPZmZzZXQodG9rZW5Mb2NhdGlv
bi5zdGFydE9mZnNldCkKLSAgICAgICAgLnNldEVuZE9mZnNldCh0b2tlbkxvY2F0aW9uLmVuZE9m
ZnNldCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRFbmRPZmZz
ZXQodG9rZW5Mb2NhdGlvbi5lbmRPZmZzZXQpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JU
eXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNz
YWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4mIHJh
bmdlKQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFs
dWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwCiAgICAgfQog
fQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNvbnN0IG9wdGlvbmFsQXJn
dW1lbnRzLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNU
aHJvd24pCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBvcHRpb25hbEFyZ3Vt
ZW50cywgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0
ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhy
b3duKQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbgogCiAgICAgU3RyaW5nIGFyZ3VtZW50czsKICAgICBpZiAob3B0
aW9uYWxBcmd1bWVudHMpCi0gICAgICAgIGFyZ3VtZW50cyA9ICgqb3B0aW9uYWxBcmd1bWVudHMp
LT50b0pTT05TdHJpbmcoKTsKKyAgICAgICAgYXJndW1lbnRzID0gb3B0aW9uYWxBcmd1bWVudHMt
PnRvSlNPTlN0cmluZygpOwogCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OlBhdXNlT25FeGNlcHRp
b25zU3RhdGUgcHJldmlvdXNQYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gU2NyaXB0RGVidWdTZXJ2
ZXI6OkRvbnRQYXVzZU9uRXhjZXB0aW9uczsKICAgICBpZiAoYXNCb29sKGRvTm90UGF1c2VPbkV4
Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSkpCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OnJ1bihFcnJvclN0cmluZyYpCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4mIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRpb25z
KQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxl
c0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiYmIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+
JiB0eXBlRGVzY3JpcHRpb25zKQogewogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwpAQCAtMjM3LDggKzIzNyw5IEBAIHZvaWQg
SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNl
dHMoRXJyb3JTdHJpbmcmIGVyCiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzVmFsaWQgPSB0
eXBlTG9jYXRpb24gJiYgdHlwZVNldCAmJiAhdHlwZVNldC0+aXNFbXB0eSgpOwotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPiBkZXNj
cmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbjo6
Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRJc1ZhbGlkKGlzVmFsaWQpOworICAgICAgICBhdXRv
IGRlc2NyaXB0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0
aW9uOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldElzVmFsaWQoaXNWYWxpZCkKKyAgICAgICAg
ICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgaWYgKGlzVmFsaWQpIHsKICAgICAgICAgICAgIGRl
c2NyaXB0aW9uLT5zZXRMZWFzdENvbW1vbkFuY2VzdG9yKHR5cGVTZXQtPmxlYXN0Q29tbW9uQW5j
ZXN0b3IoKSk7CkBAIC0yNDcsNyArMjQ4LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXIKICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uLT5zZXRJc1RydW5jYXRlZCh0eXBlU2V0LT5pc092ZXJmbG93
bigpKTsKICAgICAgICAgfQogCi0gICAgICAgIHR5cGVEZXNjcmlwdGlvbnMtPmFkZEl0ZW0oZGVz
Y3JpcHRpb24pOworICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKFdURjo6bW92ZShk
ZXNjcmlwdGlvbikpOwogICAgIH0KIAogICAgIGRvdWJsZSBlbmQgPSBjdXJyZW50VGltZU1TKCk7
CkBAIC0zMzEsMTEgKzMzMiwxMiBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFz
aWNCbG9ja3MoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgIGNvbnN0
IFZlY3RvcjxCYXNpY0Jsb2NrUmFuZ2U+JiBiYXNpY0Jsb2NrUmFuZ2VzID0gdm0uY29udHJvbEZs
b3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNvdXJjZUlELCB2bSk7CiAg
ICAgYmFzaWNCbG9ja3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBC
YXNpY0Jsb2NrUmFuZ2UmIGJsb2NrIDogYmFzaWNCbG9ja1JhbmdlcykgewotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4gbG9jYXRpb24gPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrOjpjcmVhdGUoKQorICAgICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4gbG9jYXRpb24g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrOjpjcmVhdGUoKQogICAg
ICAgICAgICAgLnNldFN0YXJ0T2Zmc2V0KGJsb2NrLm1fc3RhcnRPZmZzZXQpCiAgICAgICAgICAg
ICAuc2V0RW5kT2Zmc2V0KGJsb2NrLm1fZW5kT2Zmc2V0KQotICAgICAgICAgICAgLnNldEhhc0V4
ZWN1dGVkKGJsb2NrLm1faGFzRXhlY3V0ZWQpOwotICAgICAgICBiYXNpY0Jsb2Nrcy0+YWRkSXRl
bShsb2NhdGlvbik7CisgICAgICAgICAgICAuc2V0SGFzRXhlY3V0ZWQoYmxvY2subV9oYXNFeGVj
dXRlZCkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIGJhc2ljQmxvY2tzLT5hZGRJ
dGVtKFdURjo6bW92ZShsb2NhdGlvbikpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuaAppbmRleCBlNWQ3M2UwLi4yZTAyOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuaApAQCAtNjMsMTIgKzYzLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFibGVkID0gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Jikgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29t
bWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5
VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1
YWwgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25z
dCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgY2Fs
bEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
PiYmIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdl
bmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3
YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0
KEVycm9yU3RyaW5nJiwgY29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElkKSBvdmVycmlkZSBmaW5h
bDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+PiYgcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+
PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHJ1bihFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9m
ZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4mIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGxvY2F0aW9u
cywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IGVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBkaXNhYmxlVHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9z
b3VyY2VJRCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+PiYgb3V0X2Jhc2ljQmxvY2tzKSBvdmVycmlkZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4IGE4M2UyZmEuLmJhNDkxMGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQpAQCAtMTE2LDEyICsxMTYsMTEgQEAgY2xh
c3MgQ3BwR2VuZXJhdG9yOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6
CiAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3Vn
aCB0byBwcmltaXRpdmUuCiAKLSAgICAgICAgc2lnaWwgPSAnKicgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsIGVsc2UgJyYnCiAgICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFu
ZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlzICdvYmplY3Qn
OgotICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JyArIHNpZ2lsCisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJicKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJy
YXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmJwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNw
cF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKQEAgLTE0NCw3ICsxNDMsNyBAQCBjbGFzcyBDcHBHZW5lcmF0b3I6CiAg
ICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUoX3R5
cGUsIHR5cGVfbmFtZSwgaXNfb3B0aW9uYWwpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQ
dHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFs
aWFzZWRUeXBlKToKICAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKICAgICAgICAgICAgIGlmIGlzX29wdGlvbmFs
OgpAQCAtMTU4LDkgKzE1Nyw5IEBAIGNsYXNzIENwcEdlbmVyYXRvcjoKICAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENw
cEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAgICAg
ICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nCiAg
ICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4n
CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4nCiAgICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHJldHVy
biAnY29uc3QgJXMqIGNvbnN0JyAlIGNwcF9uYW1lCiAgICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKQEAgLTIxMiw3ICsyMTEsNyBAQCBjbGFzcyBD
cHBHZW5lcmF0b3I6CiAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAj
IEZhbGwgdGhyb3VnaC4KIAogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPCVzPiYmJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9m
b3JfdHlwZShfdHlwZSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlw
ZSk6CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJp
bWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
CkBAIC0yOTcsNSArMjk2LDkgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgICAgICByZXR1cm4g
bm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKQogCiAgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUoX3R5cGUp
OgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlw
ZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsiYW55IiwgIm9iamVjdCJdKQorCisgICAgQHN0YXRpY21ldGhvZAog
ICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6CiAgICAg
ICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3Ig
KGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgPT0gIm9iamVjdCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CmluZGV4IGUwNDg4NDIuLjRmM2MwYzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVt
cGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC03NiwxMCArNzYsMTAgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjpt
b3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKICIiIikKIApAQCAtMTA4LDExICsxMDgsMTEgQEAg
cHJvdGVjdGVkOgogICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRl
Y2xhcmF0aW9uID0gKAogICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKICR7Y29tbWFuZERlY2xhcmF0aW9uc30KIHByaXZh
dGU6Ci0gICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
cjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTEyNSwx
MyArMTI1LDEzIEBAIHByaXZhdGU6CiAgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0Nv
bW1hbmREZWNsYXJhdGlvbiA9ICgKICAgICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAk
e2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgICR7Y2FsbGJhY2tOYW1l
fShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQg
aWQpOworICAgICAgICAke2NhbGxiYWNrTmFtZX0oUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CiAgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtv
dXRQYXJhbWV0ZXJzfSk7CiAgICAgfTsKICAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0o
JHtpblBhcmFtZXRlcnN9KSA9IDA7IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvblNtYWxsU3dpdGNoID0gKAotICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQorICAgICIiInZvaWQg
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2Fn
ZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBAICR7ZGlzcGF0Y2hDYXNlc30KIH0i
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAo
Ci0iIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkKKyIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMTY2LDE2ICsx
NjYsMTYgQEAgJHtkaXNwYXRjaENhc2VzfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
KCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgKCgqdGhp
cykuKml0LT52YWx1ZSkoY2FsbElkLCBtZXNzYWdlLmdldCgpKTsKIH0iIiIpCiAKICAgICBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IgPSAoCi0gICAgIiIi
UGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgIiIiUmVmPEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoKmJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwogfQogCi1JbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI6Okluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
ICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKQEAgLTE4NiwyNiArMTg2LDI1IEBAIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyCiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZXBh
cmVDb21tYW5kQXJndW1lbnRzID0gKAotIiIiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisiIiIgICAgYXV0byBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKKyAgICBtZXNzYWdlLmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwogJHtpblBhcmFt
ZXRlckRlY2xhcmF0aW9uc30KICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kIFwnJXNcJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1lfS4k
e2NvbW1hbmROYW1lfSIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3Zl
KHByb3RvY29sRXJyb3JzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAiIiIpCiAKICAgICBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kID0gKAotIiIiSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9
Ojoke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
YmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KKyIiIklu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tO
YW1lfTo6JHtjYWxsYmFja05hbWV9KFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBi
YWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkg
eyB9CiAKIHZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQotICAgIHNl
bmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7CisgICAgc2VuZElmQWN0aXZl
KFdURjo6bW92ZShqc29uTWVzc2FnZSksIEVycm9yU3RyaW5nKCkpOwogfSIiIikKIAogICAgIEZy
b250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKQEAgLTIyOCwy
NiArMjI3LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
Ojptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNs
YXNzICR7b2JqZWN0VHlwZX07CiAgICAgcHVibGljOiIiIikKIAogICAgIFByb3RvY29sT2JqZWN0
QnVpbGRlckRlY2xhcmF0aW9uUG9zdGx1ZGUgPSAoCiAiIiIKLSAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPCR7b2JqZWN0VHlwZX0+JiAoKQorICAgICAgICBSZWY8JHtvYmplY3RUeXBlfT4gcmVsZWFz
ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjwke29iamVjdFR5cGV9Pio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAg
ICBQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPCR7b2JqZWN0VHlwZX0+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAg
ICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjwke29iamVjdFR5cGV9Pio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAg
IH07CiAKQEAgLTI1OCwxMSArMjU0LDEwIEBAICR7Y29uc3RydWN0b3JFeGFtcGxlfQogICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRy
YWl0cyBJdGVtVHJhaXRzOyIiIikKKyAgICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50
aW1lQ2FzdCA9ICgKLSIiIlBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwk
e29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiB2YWx1ZSkKKyIiIlJlZlB0cjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7
b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4mJiB2YWx1ZSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggMTI3MmMwMC4uYTI0MWM1MyAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKQEAgLTUyLDcgKzUyLDYgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVycyA9IFsKICAg
ICAgICAgICAgICciSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiJywKICAgICAgICAgICAgICc8
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+JywKLSAgICAgICAgICAgICc8
d3RmL1Bhc3NSZWZQdHIuaD4nLAogICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4n
XQogCiAgICAgICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5nJyldCkBAIC0x
NTcsNyArMTU2LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
R2VuZXJhdG9yKToKICAgICAgICAgaW5fcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcmJ10KICAg
ICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAg
ICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFz
c1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQorICAgICAgICBpbl9wYXJhbWV0
ZXJzLmFwcGVuZCgiUmVmPCVzPiYmIGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKIAogICAgICAg
ICBvdXRfcGFyYW1ldGVycyA9IFtdCiAgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQppbmRleCA4NDYxNWRkLi41ODJkZTRiIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTEwNCwxMCArMTA0LDEwIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRl
X3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwg
ZG9tYWluKToKICAgICAgICAgY2FzZXMgPSBbXQogICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBp
ZiAobWV0aG9kID09ICIlcyIpJyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCi0g
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsn
ICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5k
KCcgICAgICAgICVzKGNhbGxJZCwgbWVzc2FnZSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21t
YW5kX25hbWUpCiAgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kc1sxOl06CiAg
ICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBlbHNlIGlmIChtZXRob2QgPT0gIiVzIiknICUg
Y29tbWFuZC5jb21tYW5kX25hbWUpCi0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAg
JXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAg
ICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgbWVzc2FnZSk7JyAlIGNv
bW1hbmQuY29tbWFuZF9uYW1lKQogCiAgICAgICAgIHN3aXRjaF9hcmdzID0gewogICAgICAgICAg
ICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xNzgsMjIgKzE3OCwyOSBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CiAgICAgICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnJiVzX3ZhbHVl
Rm91bmQnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAgICAgICAgaW5fcGFy
YW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQogCisgICAgICAgICAgICBwYXJhbWV0ZXJf
ZXhwcmVzc2lvbiA9ICdpbl8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAg
ICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHBhcmFtZXRl
ci50eXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICclcy5jb3B5
UmVmKCknICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KKyAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyYl
cycgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgorCiAgICAgICAgICAgICBwYXJhbV9hcmdzID0gewog
ICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKICAgICAgICAgICAgICAgICAncGFyYW1l
dGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyRXhwcmVzc2lvbic6IHBhcmFtZXRlcl9leHByZXNzaW9uLAogICAgICAgICAgICAgICAg
ICdrZXllZEdldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlw
ZShwYXJhbWV0ZXIudHlwZSksCiAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91
dF9zdWNjZXNzX2FyZ3VtZW50CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGluX3BhcmFt
ZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgaW5fJShwYXJh
bWV0ZXJOYW1lKXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JShrZXllZEdldE1ldGhv
ZClzKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIp
LCAlKHN1Y2Nlc3NPdXRQYXJhbSlzLCBwcm90b2NvbEVycm9yc1B0cik7JyAlIHBhcmFtX2FyZ3Mp
CisgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFy
YW1ldGVyVHlwZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OiUoa2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOycgJSBwYXJhbV9hcmdzKQogCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmlu
ZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJmluXyUocGFyYW1ldGVyTmFtZSlz
IDogbnVsbHB0cicgJSBwYXJhbV9hcmdzCisgICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFy
YW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJShwYXJhbWV0
ZXJFeHByZXNzaW9uKXMgOiBudWxscHRyJyAlIHBhcmFtX2FyZ3MKICAgICAgICAgICAgICAgICBh
bHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQob3B0aW9uYWxfaW5f
cGFyYW1ldGVyX3N0cmluZykKICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBl
bmQob3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZykKICAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KCdpbl8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIG1ldGhv
ZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAg
ICAgICAgICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBl
bmQocGFyYW1ldGVyX2V4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRl
cnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQogCiAgICAgICAgIGlmIGNvbW1hbmQuaXNf
YXN5bmM6CiAgICAgICAgICAgICBhc3luY19hcmdzID0gewpAQCAtMjA0LDcgKzIxMSw3IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9y
KToKICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAg
IGNhbGxiYWNrLT5kaXNhYmxlKCk7JykKICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsnKQogICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCi0gICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQoJ2NhbGxiYWNrJykKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVu
ZCgnY2FsbGJhY2suY29weVJlZigpJykKIAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgpAQCAtMjYxLDkgKzI2OCw5
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2Vu
ZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLmlzX2Fz
eW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3RvciUoZG9t
YWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxs
YmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkp
OycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SW5z
cGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tO
YW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRj
aGVyLmNvcHlSZWYoKSwgY2FsbElkKSk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgaWYgbGVu
KGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoKICAgICAgICAgICAgIGxpbmVzLmV4dGVu
ZChvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
bV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNv
bW1hbmRfYXJncykKQEAgLTI4Miw2ICsyODksNiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCiAKICAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92
ZShyZXN1bHQpLCBlcnJvcik7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAg
cmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBh
ZTA0YWRmLi5mZjA5YWIzIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01Myw3ICs1
Myw2IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0
b3IpOgogICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAogICAgICAg
ICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKICAgICAgICAg
ICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9Q
YXNzUmVmUHRyLmg+JywKICAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KIAog
ICAgICAgICBoZWFkZXJfYXJncyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkKaW5kZXggNDI3MGIzYi4uODhmNThmNCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEwNywxMyArMTA3LDEzIEBAIGNsYXNzIENwcEZyb250
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICAg
ICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzRnJvbnRlbmREaXNw
YXRjaGVyOjolKGV2ZW50TmFtZSlzKCUoZm9ybWFsUGFyYW1ldGVycylzKScgJSBldmVudF9hcmdz
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
anNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2Qi
KSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVu
dF9hcmdzKQogCiAgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJf
YXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0LmNvcHlSZWYoKSk7JykKIAogICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggZDYwYzZhZC4uOTYxMTY1MCAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyLnB5CkBAIC01Miw3ICs1Miw2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVycyA9IHNldChbCiAgICAgICAgICAg
ICAnPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+JywKICAgICAgICAgICAgICc8
d3RmL0Fzc2VydGlvbnMuaD4nLAotICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicKICAg
ICAgICAgXSkKIAogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0xOTUsOSArMTk0LDEwIEBAIGNsYXNz
IENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0
aW9uKSkKIAogICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlID0gW10KLSAgICAgICAgY29uc3Ry
dWN0b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpjcmVh
dGUoKScgJSAob2JqZWN0X25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAgICAgY29uc3RydWN0b3Jf
ZXhhbXBsZS5hcHBlbmQoJyAgICAgKiBSZWY8JXM+IHJlc3VsdCA9ICVzOjpjcmVhdGUoKScgJSAo
b2JqZWN0X25hbWUsIG9iamVjdF9uYW1lKSkKICAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJl
ZF9tZW1iZXJzOgogICAgICAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAg
KiAgICAgLnNldCVzKC4uLiknICUgdWNmaXJzdChtZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAg
ICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAucmVsZWFzZSgpJykKIAog
ICAgICAgICBidWlsZGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnb2JqZWN0VHlwZSc6IG9iamVj
dF9uYW1lLApAQCAtMzAyLDYgKzMwMiw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgeycpCiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgogICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQp
cyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1D
b25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7JyAlIHNldHRlcl9hcmdzKQor
ICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUo
dHlwZV9tZW1iZXIudHlwZSk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwg
V1RGOjptb3ZlKHZhbHVlKSk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRT
ZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQpAQCAtMzMzLDcgKzMzNSw3IEBAIGNsYXNzIENw
cFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGFy
Z3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1w
bGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3Jk
cyksIGFyZ3VtZW50WzBdKSkKICAgICAgICAgICAgIGlmIGFyZ3VtZW50WzFdOgotICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOycgJSBhcmd1bWVudFsw
XSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQdHI8JXM+IHJ1bnRp
bWVDYXN0KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsnICUgYXJn
dW1lbnRbMF0pCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVE
JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3
b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVEJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCAzMWVmNDk0Li4yYzI2
M2I1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMjIsNiArMTIyLDcg
QEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRv
cik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUp
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOyIiIikKQEAgLTE2OSw2ICsxNzAsNyBAQCBjbGFzcyBD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgndm9pZCAlcyhJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwg
b2JqZWN0X2RlY2xhcmF0aW9uKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOycpCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFN0cmluZyByZXN1bHQ7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2Vu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDhmZmFlOWIuLjA5MWZhNjQgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMTEsNyArMTEx
LDcgQEAgY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsnKQogCiAgICAgICAgIGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKIAogICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9w
YXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IG5vdCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0
ZXIudHlwZSksIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpCiAgICAgICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCAzYjgzNmZhLi5hM2M0ZTFiIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMTYsNyArMTE2LDcg
QEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdl
bmVyYXRvcik6CiAgICAgICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyBvciBvcHRp
b25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJXMuJXMiKSk7JyAl
IChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVu
dC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVy
YXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQpAQCAtMTM2LDcgKzEzNiw3
IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihH
ZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxm
LCBkb21haW4sIGV2ZW50KToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKICAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAg
ICAga2V5ZWRfc2V0X21ldGhvZCA9IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3Jf
dHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCA1MTU0
ZmVhLi40NzMxMDBiIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTU4
LDcgKzU4LDYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihHZW5lcmF0b3IpOgogICAgICAgICAgICAgJyIlc0VudW1Db252ZXJzaW9uSGVscGVycy5oIicg
JSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAogICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAogICAgICAgICAgICAgJzx3dGYvQXNzZXJ0aW9ucy5oPics
Ci0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKICAgICAgICAgXQogCiAgICAgICAg
IGhlYWRlcl9hcmdzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0Cmlu
ZGV4IDljNGRhYzYuLmQ4YTc5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3Mg
QWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAg
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25z
dCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0
cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBS
ZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9Owog
CiAKQEAgLTE0Myw3ICsxNDMsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJE
YXRhYmFzZSIpOwogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNzIsMzIgKzE3MSwzMiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcm
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBv
cHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxpbnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRf
cHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJ
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKKyAg
ICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8SW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAg
dm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4mJiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4q
IG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1w
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGlu
dD4qIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBz
Y3JlZW5Db2xvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50
Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRf
Y29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmlu
dENvbG9yKSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7Ci0gICAgICAgIHZv
aWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJp
bmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3Is
IGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrKFJlZjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQp
OworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUg
dGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2Ny
ZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CiAgICAgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+
IGNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0
cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
IAogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3Rh
dGljIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2Fs
bElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSk7CiAgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgZXhlY3V0ZVNRTEFz
eW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CiBwcml2YXRlOgotICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTI2MiwxMiArMjYxLDEyIEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fkluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQorUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFn
ZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcigqYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CiB9CiAKLUluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgIDogSW5zcGVjdG9y
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCiAgICAgLCBt
X2FnZW50KGFnZW50KQogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQpAQCAtMjc3LDMzICsyNzYsMzIgQEAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3IKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJEYXRhYmFzZSIpLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICBpZiAo
bWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAg
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsICptZXNzYWdlLmdldCgp
KTsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsIG1l
c3NhZ2UpOwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0g
ImV4ZWN1dGVTUUxTeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jKGNhbGxJZCwgbWVzc2FnZSk7CiAgICAg
ZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQotICAgICAgICBleGVjdXRlU1FM
QXN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhj
YWxsSWQsIG1lc3NhZ2UpOwogICAgIGVsc2UKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2Qs
ICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ci0gICAgaW50IGluX2Rh
dGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9yc1B0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnki
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKKyAgICBpbnQgaW5f
ZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2Fn
ZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzE1LDcgKzMxMyw3IEBAIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhsb25nCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0
X2NvbHVtbk5hbWVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+
IG91dF9ub3RlczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBv
dXRfdGltZXN0YW1wOwpAQCAtMzQ3LDE0ICszNDUsMTQgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bmcKICAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKICAgICAgICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRD
b2xvci5nZXRWYWx1ZSgpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7
CiB9CiAKLUluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9
CitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgYmFj
a2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGOjptb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsg
fQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXls
b2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQordm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgaWYgKGNvbHVtbk5hbWVzKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlM
aXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CiAgICAgaWYgKG5vdGVzLmlzQXNz
aWduZWQoKSkKQEAgLTM3MywyMCArMzcxLDE5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsCiAg
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIp
LCBzY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKICAgICBpZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVk
KCkpCiAgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENv
bG9yIiksIHByaW50Q29sb3IuZ2V0VmFsdWUoKSk7Ci0gICAgc2VuZElmQWN0aXZlKGpzb25NZXNz
YWdlLCBFcnJvclN0cmluZygpKTsKKyAgICBzZW5kSWZBY3RpdmUoV1RGOjptb3ZlKGpzb25NZXNz
YWdlKSwgRXJyb3JTdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwotICAgIGludCBpbl9k
YXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBhdXRvIHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOworICAgIG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7CisgICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJh
bXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMi
KTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNz
YWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9y
cykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zOTgsOSArMzk1LDkgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb24KICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3Bh
dGNoZXIsY2FsbElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjayk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRS
ZWYoKm5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVy
LmNvcHlSZWYoKSwgY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5j
b3B5UmVmKCkpOwogCiAgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgIGNhbGxiYWNr
LT5kaXNhYmxlKCk7CkBAIC00MTEsMTUgKzQwOCwxNCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bgogCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxT
eW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBt
ZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
LSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJ
bnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYXV0byBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKKyAgICBt
ZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIp
OworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0cmluZyBpbl9xdWVyeSA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdl
dCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBl
cnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIik7Ci0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDMxLDcgKzQyNyw3IEBAIHZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVt
bk5hbWVzOwogICAgIFN0cmluZyBvdXRfbm90ZXM7CiAgICAgZG91YmxlIG91dF90aW1lc3RhbXA7
CkBAIC00NTQsMTQgKzQ1MCwxNCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZQogICAgICAgICBy
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwogICAgICAg
ICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKICAgICB9
Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKLUluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
YmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KK0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURjo6bW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZh
bHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3Jl
ZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgY29sdW1uTmFtZXMpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCBub3Rlcyk7CiAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZShBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwpAQCAtNDcxLDIwICs0NjcsMTkgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2s6OnNlbmRTdWMKICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25z
dGFudFZhbHVlKHByaW50Q29sb3IpKTsKLSAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVy
cm9yU3RyaW5nKCkpOworICAgIHNlbmRJZkFjdGl2ZShXVEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBF
cnJvclN0cmluZygpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikp
OwotICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
ImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFN0cmluZyBp
bl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKKyAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyOworICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IHBhcmFtc0NvbnRhaW5lcik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0
ZVNRTEFzeW5jIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
IGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJv
dG9jb2xFcnJvcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDk2LDkgKzQ5MSw5
IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFz
eW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7Ci0gICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTEFzeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2sp
OworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgY2FsbElkKSk7CisgICAgbV9hZ2Vu
dC0+ZXhlY3V0ZVNRTEFzeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJh
Y2suY29weVJlZigpKTsKIAogICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgICBjYWxs
YmFjay0+ZGlzYWJsZSgpOwpAQCAtNTUyLDcgKzU0Nyw2IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTY1MCw3
ICs2NDQsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
NzA3LDEwICs3MDAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVj
dCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwog
ICAgIHB1YmxpYzoKQEAgLTcyOSwzMCArNzIyLDI3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJy
b3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsK
LSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1f
cmVzdWx0KTsKLSAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVs
ZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6
bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9
CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAq
IFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogUmVmPEVycm9y
PiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQot
ICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAg
ICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRl
ZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9Owog
CiB9IC8vIERhdGFiYXNlCkBAIC0xMDY1LDcgKzEwNTUsNyBAQCB2b2lkIE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKAogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFt
cCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNx
bEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIFJX
SVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xMTA1
LDcgKzEwOTUsNyBAQCB2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3Rlcywg
QCJub3RlcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwpAQCAtMTE0NSw3ICsxMTM1LDcgQEAgdm9pZCBPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBj
YWxsSWQsIGludCBpbl8KICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwg
UldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5v
dGVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZh
bHVlcywgQCJ2YWx1ZXMiKTsKQEAgLTExNzYsNyArMTE2Niw3IEBAIHZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwg
aW50IGluCiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5T
U3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpw
YXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJv
ciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKICAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsK
ICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBA
InZhbHVlcyIpOwpAQCAtMTU2NSw3ICsxNTU1LDYgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVy
cy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggN2I1ZWY1Ny4uMjdmNzQ2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CkBAIC00MSwxOCArNDEsMTggQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3Bh
dGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIp
OyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0
ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwogfTsKIAogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
aW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBp
bl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNv
bnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRv
dWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYg
aW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYg
aW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91
YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mJiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxv
YWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9u
b3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXls
b2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25z
dCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMTM4LDcgKzEzOCw2IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRhdGFiYXNlIik7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE2NCwyMSArMTYzLDIxIEBAIHB1YmxpYzoKICAgICAg
ICAgWWVsbG93ID0gNSwKICAgICAgICAgQmxhY2sgPSA2LAogICAgIH07IC8vIGVudW0gY2xhc3Mg
UHJpbnRDb2xvcgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBp
bl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90
aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3Zh
bHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3Qg
aW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3Ry
aW5nKiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRf
cGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9w
dF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVz
LCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRf
dmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
IG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
KiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1l
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFt
cCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3Is
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBv
cHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJs
ZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBp
bl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBp
bl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4m
IG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFt
cCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0
X3ByaW50Q29sb3IpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKIAogY2xhc3MgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2Fs
bElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRl
OwogcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgICB2
b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJs
aWM6CkBAIC0yNDMsMTIgKzI0MiwxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1JlZjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI1OCw1NyArMjU3LDU2IEBAIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElk
LCAqbWVzc2FnZS5nZXQoKSk7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
Y2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxs
SWQsICptZXNzYWdlLmdldCgpKTsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGNhbGxJZCwgbWVzc2FnZSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhv
ZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChB
U0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBhdXRvIHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOworICAgIG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7CiAgICAg
Ym9vbCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5O
YW1lcyIpLCAmY29sdW1uTmFtZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzLmdldCgpKTsKICAgICBib29sIG5vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAg
ICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJ
SUxpdGVyYWwoIm5vdGVzIiksICZub3Rlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQo
KSk7CiAgICAgYm9vbCB0aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCAmdGltZXN0YW1wX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBpbl90aW1lc3Rh
bXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgYm9vbCB2YWx1ZXNfdmFsdWVGb3VuZCA9IGZh
bHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVz
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9j
b2xFcnJvcnMuZ2V0KCkpOwogICAgIGJvb2wgcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInBheWxvYWQiKSwgJnBheWxvYWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzLmdldCgpKTsKICAgICBib29sIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgJmRhdGFi
YXNlSWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFp
bmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgJmRhdGFiYXNlSWRfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGJvb2wgc3FsRXJyb3JfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3Fs
RXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmc3FsRXJyb3JfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gaW5fc3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBh
cmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmc3FsRXJyb3Jf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGJvb2wgc2NyZWVuQ29sb3Jf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInNjcmVlbkNvbG9yIiksICZzY3JlZW5Db2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgJnNjcmVlbkNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKICAgICBib29sIHByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmlu
ZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmcHJpbnRDb2xv
cl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3ByaW50Q29s
b3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksICZwcmludENvbG9yX3ZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNl
LmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1l
c3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBjb2x1bW5OYW1lc192YWx1ZUZv
dW5kID8gJmluX2NvbHVtbk5hbWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9u
b3RlcyA6IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51
bGxwdHIsIHZhbHVlc192YWx1ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIsIHBheWxvYWRf
dmFsdWVGb3VuZCA/ICZpbl9wYXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5k
ID8gJmluX2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gJmluX3Nx
bEVycm9yIDogbnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xv
ciA6IG51bGxwdHIsIHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVs
bHB0cik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyhjYWxsSWQsIGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBpbl9jb2x1bW5OYW1l
cy5jb3B5UmVmKCkgOiBudWxscHRyLCBub3Rlc192YWx1ZUZvdW5kID8gJmluX25vdGVzIDogbnVs
bHB0ciwgdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgdmFs
dWVzX3ZhbHVlRm91bmQgPyBpbl92YWx1ZXMuY29weVJlZigpIDogbnVsbHB0ciwgcGF5bG9hZF92
YWx1ZUZvdW5kID8gaW5fcGF5bG9hZC5jb3B5UmVmKCkgOiBudWxscHRyLCBkYXRhYmFzZUlkX3Zh
bHVlRm91bmQgPyAmaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIHNxbEVycm9yX3ZhbHVlRm91bmQg
PyBpbl9zcWxFcnJvci5jb3B5UmVmKCkgOiBudWxscHRyLCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5k
ID8gJmluX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJmlu
X3ByaW50Q29sb3IgOiBudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgog
CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwogICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CkBAIC0zMTgsNyAr
MzE2LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbEkKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwogICAgIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9w
cmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJy
b3IsIGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyAmaW5fY29sdW1uTmFtZXMgOiBudWxscHRyLCBu
b3Rlc192YWx1ZUZvdW5kID8gJmluX25vdGVzIDogbnVsbHB0ciwgdGltZXN0YW1wX3ZhbHVlRm91
bmQgPyAmaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgdmFsdWVzX3ZhbHVlRm91bmQgPyAmaW5fdmFs
dWVzIDogbnVsbHB0ciwgcGF5bG9hZF92YWx1ZUZvdW5kID8gJmluX3BheWxvYWQgOiBudWxscHRy
LCBkYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIHNxbEVy
cm9yX3ZhbHVlRm91bmQgPyAmaW5fc3FsRXJyb3IgOiBudWxscHRyLCBzY3JlZW5Db2xvcl92YWx1
ZUZvdW5kID8gJmluX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgcHJpbnRDb2xvcl92YWx1ZUZvdW5k
ID8gJmluX3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMs
ICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJ
ZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworICAg
IG1fYWdlbnQtPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIGNvbHVtbk5hbWVz
X3ZhbHVlRm91bmQgPyBpbl9jb2x1bW5OYW1lcy5jb3B5UmVmKCkgOiBudWxscHRyLCBub3Rlc192
YWx1ZUZvdW5kID8gJmluX25vdGVzIDogbnVsbHB0ciwgdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAm
aW5fdGltZXN0YW1wIDogbnVsbHB0ciwgdmFsdWVzX3ZhbHVlRm91bmQgPyBpbl92YWx1ZXMuY29w
eVJlZigpIDogbnVsbHB0ciwgcGF5bG9hZF92YWx1ZUZvdW5kID8gaW5fcGF5bG9hZC5jb3B5UmVm
KCkgOiBudWxscHRyLCBkYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmaW5fZGF0YWJhc2VJZCA6IG51
bGxwdHIsIHNxbEVycm9yX3ZhbHVlRm91bmQgPyBpbl9zcWxFcnJvci5jb3B5UmVmKCkgOiBudWxs
cHRyLCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJmluX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwg
cHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJmluX3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29s
dW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3Bh
eWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAm
b3V0X3ByaW50Q29sb3IpOwogCiAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICBp
ZiAob3V0X2NvbHVtbk5hbWVzKQpAQCAtMzQwLDM5ICszMzgsMzggQEAgdm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgY2FsbEkKICAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKICAgICAg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRf
cHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBl
cnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXko
cGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgZG91YmxlIGluX3Rp
bWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBp
bnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2Vy
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnNQdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBTdHJp
bmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXI7CisgICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5h
bWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgaW5fbm90
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInRpbWVz
dGFtcCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2Fk
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJ
ZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3Nx
bEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250
YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOworICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBT
dHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJh
c2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFz
ZSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigm
Y2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JN
ZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBpbl9jb2x1bW5OYW1lcywgaW5f
bm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLCBpbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlk
LCBpbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3IpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQs
IGluX2NvbHVtbk5hbWVzLmNvcHlSZWYoKSwgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFs
dWVzLmNvcHlSZWYoKSwgaW5fcGF5bG9hZC5jb3B5UmVmKCksIGluX2RhdGFiYXNlSWQsIGluX3Nx
bEVycm9yLmNvcHlSZWYoKSwgaW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91
dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25vdGVzOwogICAgIGRvdWJsZSBvdXRfdGlt
ZXN0YW1wOwpAQCAtMzgyLDcgKzM3OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkCiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9y
OwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9z
Y3JlZW5Db2xvcjsKICAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMoZXJyb3IsIGluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0
YW1wLCBpbl92YWx1ZXMsIGluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLCBp
bl9zY3JlZW5Db2xvciwgaW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVz
LCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNl
SWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKyAg
ICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIGluX2NvbHVtbk5h
bWVzLmNvcHlSZWYoKSwgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLmNvcHlSZWYo
KSwgaW5fcGF5bG9hZC5jb3B5UmVmKCksIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLmNvcHlS
ZWYoKSwgaW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91
dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9k
YXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xv
cik7CiAKICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOwpAQCAtMzk1
LDcgKzM5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkCiAgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CiAgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwogICAgIH0KLSAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBl
cnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RG
Ojptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBA
IC00NDMsNyArNDQwLDYgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQKICNpbmNsdWRlICJJbnNw
ZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTQxLDcgKzUzNyw2IEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01OTgsMTAgKzU5MywxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVp
bGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQor
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgpAQCAtNjIw
LDMwICs2MTUsMjcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2Rl
U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkK
KyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOwotICAgICAgICB9
CiAKLSAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgICAg
ICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoK
ICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPEVycm9yPiByZXN1
bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpj
cmVhdGUoKQogICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2Rl
KC4uLik7CisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsK
ICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKQEAg
LTc2Nyw4ICs3NTksOCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIE9iakNJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIE9iakNJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0
cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNh
bGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJ
ZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFsdWVzLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9w
cmludENvbG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGlu
X3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGlu
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTk0NywxNCArOTM5
LDE0IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQordm9p
ZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0
IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9w
YXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5D
b2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQogewogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CiAg
ICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxv
YWQsIGludCAqZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3Is
IFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENv
bG9yKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5O
YW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIobm90ZXMsIEAibm90ZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAgLTEwMTIsMTQgKzEwMDQsMTQg
QEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGMKICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2lu
X2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkg
dGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczoo
aW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9f
aW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFi
YXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmls
KSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3IgPyAmb19pbl9zY3JlZW5Db2xvciA6IG5pbCkg
cHJpbnRDb2xvcjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IgOiBuaWwpXTsKIH0K
IAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheT4mIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBk
b3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcm
IGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKIHsKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOwogICAg
IH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7
CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywg
QCJ2YWx1ZXMiKTsKQEAgLTE0MTMsNyArMTQwNSw2IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBl
cnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQKaW5kZXggMzgyMmZhOS4uMmY5MDNlZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0
cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTE1Niw3ICsxNTYsNiBAQCBJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIpOwogCiAjaW5jbHVkZSAiSW5zcGVj
dG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xOTAsMTIg
KzE4OSwxMiBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAg
ICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgotICAgIEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyJiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAg
ICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTIw
Nyw4ICsyMDYsOCBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKSBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwg
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgog
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwpAQCAtMjE4LDcg
KzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAgdm9pZCBsb2Fk
UmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSk7CiBwcml2YXRlOgotICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTI4NCwxMiArMjgzLDEy
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
IHsgfQogSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKK1JlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKmJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwogfQogCi1JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI5OSwxMiArMjk4
LDEyIEBAIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhp
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVj
dG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJl
c291cmNlMSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7
CisgICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlCiAgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycs
ICJOZXR3b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQpAQCAtMzE5
LDE4ICszMTgsMTggQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWMKICNlbmRpZgogCiAgICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEo
ZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQorUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigq
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CiB9CiAKLUluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCiAgICAgLCBtX2FnZW50KGFnZW50
KQogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMzQwLDcg
KzMzOSw3IEBAIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMiKSwg
dGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5z
cGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCkBAIC0zNzEsNyArMzcwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBtZXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRo
aXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICgoKnRoaXMpLipp
dC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JikKQEAgLTM4NCwxMCArMzgzLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0
KSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00
MDAsMTAgKzM5OSwxMCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
MihlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQpAQCAtNDE2LDEwICs0MTUsMTAgQEAgdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3IpOwogCi0gICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJy
b3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6
bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JikKQEAgLTQzMiwxMCArNDMxLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5k
aWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2U0KGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwog
fQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00NDgsMTAgKzQ0Nywx
MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBl
cnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNShlcnJvcik7CiAK
LSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQpAQCAtNDY0LDEwICs0NjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQp
LCBlcnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKQEAgLTQ4
MCwxMCArNDc5LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3
KGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTUzMSw3ICs1MzAsNiBAQCB2b2lkIEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlYwogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC02Mjks
NyArNjI3LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTEyOTIsNyArMTI4OSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAjaW1wb3J0ICJS
V0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0Cmlu
ZGV4IDhkYzljMWYuLjQwMTg1YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIg
ewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlz
cGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTE0NCw3ICsxNDQsNiBAQCBJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIpOwogCiAjaW5jbHVkZSAiSW5zcGVjdG9y
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNzEsMTIgKzE3
MCwxMiBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkg
b3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
IHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIm
LCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAg
SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAg
LTI0MSwxMiArMjQwLDEyIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckNv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyLCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK1JlZjxJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IElu
c3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCpiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0K
IAotSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1fYWdlbnQoYWdlbnQp
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNTYsMTIg
KzI1NSwxMiBAQCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6Okluc3Bl
Y3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkNvbW1hbmREb21h
aW4iKSwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNw
ZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCiAg
ICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKQotICAgICAgICBj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICAg
ICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNl
CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5n
KCdcJycsICJDb21tYW5kRG9tYWluIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7
CiB9CkBAIC0yNzYsMTQgKzI3NSwxNCBAQCB2b2lkIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYQogI2VuZGlm
CiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSW5zcGVjdG9yQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVy
blZhbHVlOwogICAgIG1fYWdlbnQtPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAm
b3V0X3JldHVyblZhbHVlKTsKIAogICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCiAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmV0dXJuVmFsdWUiKSwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3JldHVyblZhbHVlKSk7CiAKLSAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
V1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0zMzEsNyArMzMwLDYgQEAgdm9pZCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2EKICNpbmNsdWRlICJJ
bnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNDAxLDExICszOTksMTEgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgSW5zcGVjdG9yRXZlbnREb21haW5Gcm9udGVuZERp
c3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKIHsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVt
UGFyYW1ldGVyIikpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhcmFtZXRlciIpLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CisgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QuY29w
eVJlZigpKTsKIAogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KQEAgLTQ1NCw3ICs0NTIs
NiBAQCB2b2lkIEluc3BlY3RvckV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdp
dGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC04MTMs
NyArODEwLDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb24KICAgICB9OwogCiAgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXihSV0lQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicmV0dXJuVmFsdWUiKSwgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHRPYmplY3Qu
cmVsZWFzZSgpLCBTdHJpbmcoKSk7CiAgICAgfTsKQEAgLTEwMjEsOSArMTAxOCw5IEBAIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgaWYgKCFmcm9udGVuZENoYW5uZWwpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkV2ZW50RG9tYWluLmV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicGFyYW1ldGVyIiksIHRvUHJvdG9j
b2xTdHJpbmcocGFyYW1ldGVyKSk7CiAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxp
dGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOwogICAgIGZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CkBAIC0xMTQ1
LDcgKzExNDIsNiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNp
bXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IGQ5MmVj
NTIuLmNhZmU0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVy
bmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0
Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBA
IC0xMzMsNyArMTMzLDYgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJh
c2UiKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMjQyLDcgKzI0MSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
I2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTIsOCArMjUw
LDggQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUZyb250
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KLSAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5n
KiBjb25zdCBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRD
b2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
KiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENv
bG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5D
b2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKIH07CkBAIC0zMDUs
MTEgKzMwMywxMSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0
IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVz
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCit2b2lkIEluc3BlY3RvckRh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25z
dCBwcmludENvbG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNl
LmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBpZiAobm90ZXMp
CkBAIC0zMjYsMTYgKzMyNCwxNiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNw
YXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdAogICAgICAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICpzY3Jl
ZW5Db2xvcik7CiAgICAgaWYgKHByaW50Q29sb3IpCiAgICAgICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAqcHJpbnRDb2xvcik7Ci0gICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3Qp
OworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFy
YW1zT2JqZWN0LmNvcHlSZWYoKSk7CiAKICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0
cmluZyYgcHJpbnRDb2xvcikKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNo
ZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVz
LCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRh
dGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVt
bk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwpAQCAtMzQ0LDcgKzM0Miw3IEBA
IHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmCiAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CiAgICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29s
b3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zT2JqZWN0KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
cGFyYW1zIiksIHBhcmFtc09iamVjdC5jb3B5UmVmKCkpOwogCiAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwogfQpAQCAtMzkzLDcgKzM5MSw2IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmCiAK
ICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKQEAgLTQ0NSwxMCArNDQyLDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9y
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CkBAIC00NjcsMzAgKzQ2NCwyNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICBSZWY8RXJy
b3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNz
UmVmUHRyPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+
KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVh
dGUoKQorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCiAgICAgICog
ICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKiAg
ICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRy
YWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpAQCAtODg4LDkgKzg4Miw5IEBA
IHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7CiAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJp
bnRDb2xvciIpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgaWYgKGNvbHVtbk5hbWVzKQogICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1l
cykpKTsKICAgICBpZiAobm90ZXMpCkBAIC05MjUsOSArOTE5LDkgQEAgdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihz
Y3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0
aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzIikpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoY29s
dW1uTmFtZXMpKTsKICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5v
dGVzIiksIG5vdGVzKTsKICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwo
InRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwpAQCAtMTA0MSw3ICsxMDM1LDYgQEAgX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1D
b252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQ
dHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggZjdiNDQ5ZC4uM2M1YjYxNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBA
IC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0
ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0x
NDIsNyArMTQyLDYgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMi
KTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewpAQCAtMTY3LDEyICsxNjYsMTIgQEAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JN
KFdFQl9DT01NQU5EUykKIGNsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJy
aWRlOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgpAQCAtMjQxLDEyICsyNDAs
MTIgQEAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGEKICNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09N
TUFORFMpCiAKICNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1Jl
ZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNw
YXRjaGVyLCBhZ2VudCkpOwogfQogCi1JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQorSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI1NiwxMiArMjU1LDEyIEBA
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
IikKLSAgICAgICAgbG9hZFJlc291cmNlKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgICAg
ICBsb2FkUmVzb3VyY2UoY2FsbElkLCBtZXNzYWdlKTsKICAgICBlbHNlCiAgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3Jr
MSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQpAQCAtMjc2LDEwICsyNzUs
MTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3QKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CiAK
LSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShX
RUJfQ09NTUFORFMpCiAKQEAgLTMyOCw3ICszMjcsNiBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zOTUsNyAr
MzkzLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaWYgUExBVEZPUk0oV0VCX0VWRU5UUykK
IHZvaWQgSW5zcGVjdG9yTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVk
KCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrMy5yZXNvdXJjZUxv
YWRlZCIpKTsKIAogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKQEAgLTQ0Niw3ICs0NDQsNiBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRl
ZCgpCiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ5MywxMCArNDkwLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk5ldHdv
cmtFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRl
cihSZWY8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKICAgICBwdWJs
aWM6CkBAIC01MTUsMzAgKzUxMiwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8
TmV0d29ya0Vycm9yPiYgKCkKKyAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PE5ldHdvcmtFcnJvcj4qPigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1Jl
ZlB0cjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gUmVmUHRyPE5ldHdvcmtFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAg
LyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPE5ldHdvcmtF
cnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAqIFJlZjxOZXR3b3Jr
RXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldE1l
c3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqICAgICAuc2V0Q29k
ZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9
Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1U
cmFpdHM7CiB9OwogCiB9IC8vIE5ldHdvcmsyCkBAIC05OTAsNyArOTg0LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKICAgICBpZiAoIWZyb250ZW5kQ2hhbm5lbCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMucmVzb3VyY2VM
b2FkZWQiKSk7CiAgICAgZnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KQEAgLTEwOTgsNyArMTA5Miw2IEBAIF9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJUHJvdG9jb2xF
bnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uLXJlc3VsdAppbmRleCAyZGNmMTMzLi4zNGQyNjc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IGRpc3BhdGNoZXI7IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xMjcsNyArMTI3LDYgQEAgcHJpdmF0ZToK
IAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewpAQCAtMjM2LDcgKzIzNSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI2luY2x1
ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMzQsNyArMzMyLDYgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTgxNyw3ICs4MTQs
NiBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZh
bHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDkzOTkzYTMuLmRmMzkzZjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92
ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTI3LDcgKzEyNyw2IEBAIHByaXZhdGU6
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKQEAgLTIzNiw3ICsyMzUsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNs
dWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzM0LDcgKzMzMiw2IEBA
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zODQsMTAgKzM4
MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8LypLZXlQYXRoKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQor
ICAgICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7CiAgICAg
cHVibGljOgpAQCAtMzk5LDM4ICszOTYsMzUgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPEtleVBhdGg+JiAoKQorICAgICAgICBSZWY8S2V5UGF0aD4gcmVsZWFzZSgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5
UGF0aCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxLZXlQYXRoPio+
KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRyPEtleVBhdGg+IHJl
bGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPEtleVBhdGg+KCp0
aGlzKS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZyZXN1bHQpKTsK
ICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWZQdHI8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAg
ICAgKiAgICAgLnNldFR5cGUoLi4uKTsKKyAgICAgKiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5
UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFR5cGUoLi4uKQorICAgICAqICAgICAucmVs
ZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9y
OjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCiAgICAgdm9pZCBzZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRBcnJheShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCB2YWx1ZSk7CisgICAgICAg
IEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSwgV1RG
Ojptb3ZlKHZhbHVlKSk7CiAgICAgfQogfTsKIApAQCAtOTIwLDcgKzkxNCw2IEBAIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZh
bHVlcy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmluZGV4IDIwNGEyYjguLmY2
Njk1NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBj
bGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9
Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAg
IGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAg
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwor
ICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
IH07CiAKIApAQCAtMTI3LDcgKzEyNyw2IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJJbnNwZWN0
b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIzNiw3ICsy
MzUsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewpAQCAtMzM0LDcgKzMzMiw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC04MDMsNyArODAwLDYgQEAgdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgi
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAppbmRl
eCAzNjU0NmMyLi43ZjFlNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQK
QEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJu
YXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBjb25zdCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWY8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAg
LTEzMCw3ICsxMzAsNiBAQCBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIu
UmVhc29uIiwge0RpZWQ6ICJEaWVkIiwgRmFpbnRlZDogIkZhaW50ZQogCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yMzks
NyArMjM4LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzNyw3ICszMzUsNiBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODY0LDcgKzg2MSw2IEBAIHR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKICNpbXBvcnQgIlJX
SVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggZGE3NTY0Ni4uNThjYTQwNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTMxLDcgKzEzMSw2IEBAIEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLlR3b0xlZ2dlZEFuaW1hbHMiLCB7RHVja3M6ICJE
dWNrcyIsIEhlbnM6CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI0MCw3ICsyMzksNiBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzM4
LDcgKzMzNiw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC05MDIsNyArODk5LDYgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xS
dW50aW1lVHdvTGVnZ2VkQW5pbWFscykgewogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVy
c2lvbkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbi1yZXN1bHQKaW5kZXggY2M0MmZkMi4uOTFkNzVjMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0
Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7
IH0KKyAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRl
OgotICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKKyAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CiB9OwogCiAKQEAgLTEyNyw3ICsxMjcsNiBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAi
SW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0y
MzYsNyArMjM1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9y
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzNCw3ICszMzIsNiBAQCBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzg3LDEwICszODQsMTAgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8q
RXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIo
UmVmPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
IH0KICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKQEAgLTQwOSwzMCAr
NDA2LDI3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAg
ICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQogCi0g
ICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0g
RXJyb3I6OmNyZWF0ZSgpCisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRl
KCkKICAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4p
OworICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAg
ICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpT
dHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiBjbGFzcyBPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewpAQCAtNDUy
LDQwICs0NDYsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
IH0KICAgICAgICAgZnJpZW5kIGNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1
YmxpYzoKIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+
JiAoKQorICAgICAgICBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAg
IH0KIAotICAgICAgICBQYXNzUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgog
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQdHI8T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKTsK
KyAgICAgKiBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAgICAqLwog
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0
SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCi0gICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQg
c2V0Q29sdW1uTmFtZXMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
IHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7CisgICAgICAgIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgV1RGOjptb3ZlKHZh
bHVlKSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQpA
QCAtNDk4LDE5ICs0ODksMTkgQEAgcHVibGljOgogICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQorICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgV1RGOjptb3ZlKHZhbHVl
KSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAgICAg
IEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBX
VEY6Om1vdmUodmFsdWUpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEVycm9yKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB2b2lkIHNl
dEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVl
KQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCBXVEY6Om1vdmUodmFsdWUpKTsKICAgICB9CiB9
OwogCkBAIC01MzcsMTUgKzUyOCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVy
QnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAgICAgcHVibGljOgogCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVy
dHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFsdWUpOwpAQCAtNTY2LDU1ICs1NTcs
NTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0
VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVl
cyIpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5
bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9h
ZCIpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJv
cihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUp
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJv
cl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJv
clNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJC
dW5kbGU+JiAoKQorICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQ
YXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNh
bm5vdF9jYXN0KTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
UGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAgICBQYXNz
UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPigqdGhpcykucmVsZWFzZSgpOworICAgICAg
ICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnBy
ZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVuZGxlPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAg
IH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWZQ
dHI8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisg
ICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVh
dGUoKQogICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQogICAgICAqICAgICAuc2V0Tm90
ZXMoLi4uKQogICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKICAgICAgKiAgICAgLnNldFZh
bHVlcyguLi4pCiAgICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKLSAgICAgKiAgICAgLnNldEVy
cm9yKC4uLik7CisgICAgICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5yZWxlYXNl
KCk7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiAvKiBDb25mbGljdGVk
IG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGgg
YnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCkBAIC02NDAsMTAgKzYyOCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHM7CiAgICAgcHVibGljOgpAQCAtNjgzLDMzICs2NzEsMzAgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBv
cGVyYXRvciBSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4mICgpCisgICAg
ICAgIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+Kj4oJm1fcmVz
dWx0KTsKLSAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4oKnRoaXMpLnJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9y
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+Kj4oJnJl
c3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgotICAgICAqIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
PiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAg
ICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQogICAgICAqICAgICAuc2V0SW50ZWdl
ciguLi4pCiAgICAgICogICAgIC5zZXRBcnJheSguLi4pCiAgICAgICogICAgIC5zZXRTdHJpbmco
Li4uKQogICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQotICAgICAqICAgICAuc2V0T2JqZWN0KC4u
Lik7CisgICAgICogICAgIC5zZXRPYmplY3QoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwog
ICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpAQCAt
NzM4LDE1ICs3MjMsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSov
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEY6Om1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7Ci0gICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBm
cmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVt
bk5hbWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJ
SUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKQEAgLTc2Nyw1NSArNzUyLDUyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFs
dWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFs
dWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVy
cm9yIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBvcGVyYXRvciBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiYg
KCkKKyAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVy
QnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRl
ckJ1bmRsZT4qPigmbV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxQ
YXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAg
ICAgLyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFBhcmFt
ZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqIFJl
ZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKICAg
ICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKICAgICAgKiAgICAgLnNldE5vdGVzKC4uLikK
ICAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCiAgICAgICogICAgIC5zZXRWYWx1ZXMoLi4u
KQogICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4p
OworICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwogICAg
ICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6
U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBUZXN0CkBAIC0xMzMxLDcg
KzEzMTMsNiBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBv
cnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDc2ZDAxZWQuLmE1NGM5
NTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQx
LDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQorICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTMxLDcgKzEzMSw2
IEBAIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7
RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zCiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI0MCw3ICsyMzksNiBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewpAQCAtMzM4LDcgKzMzNiw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC0zOTYsMTAgKzM5MywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypUeXBlTmVlZGluZ0Nhc3Qq
L0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8q
VHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisg
ICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CiAgICAgcHVibGlj
OgpAQCAtNDMyLDQwICs0MjksMzcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxJZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVl
U2V0PiYgc2V0VHJlZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNl
dFRyZWUoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4mICgpCisgICAgICAgIFJlZjxUeXBlTmVlZGluZ0Nh
c3Q+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJm1fcmVzdWx0KTsKLSAgICAg
ICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+KCp0aGlz
KS5yZWxlYXNlKCk7CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJnJlc3Vs
dCkpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9IFR5cGVOZWVk
aW5nQ2FzdDo6Y3JlYXRlKCkKKyAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBU
eXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQogICAg
ICAqICAgICAuc2V0TnVtYmVyKC4uLikKICAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQogICAg
ICAqICAgICAuc2V0SWQoLi4uKQotICAgICAqICAgICAuc2V0VHJlZSguLi4pOworICAgICAqICAg
ICAuc2V0VHJlZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJh
aXRzIEl0ZW1UcmFpdHM7CiB9OwogCiAvKiAgKi8KQEAgLTQ5OSw0MCArNDkzLDM3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwv
KlJlY3Vyc2l2ZU9iamVjdDEqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAg
ICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0
KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZl
T2JqZWN0MTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlY3Vyc2l2
ZU9iamVjdDE+JiAoKQorICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxSZWN1cnNpdmVPYmplY3QxPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KIAotICAgICAg
ICBQYXNzUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+KCp0aGlzKS5yZWxlYXNlKCk7
CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QxPio+KCZyZXN1bHQpKTsKICAgICAg
ICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAg
ICAgKiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6
Y3JlYXRlKCk7CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2
ZU9iamVjdDE6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CiAgICAgICovCiAgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVt
VHJhaXRzIEl0ZW1UcmFpdHM7CiAKLSAgICB2b2lkIHNldE9iaihQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHZvaWQgc2V0
T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoIm9iaiIpLCB2YWx1ZSk7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoIm9iaiIpLCBXVEY6Om1vdmUodmFsdWUpKTsKICAgICB9CiB9
OwogCkBAIC01NTMsNDAgKzU0NCwzNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2
ZU9iamVjdDIqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAg
ICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0K
ICAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CiAgICAgcHVibGljOgogCi0g
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYgKCkKKyAgICAgICAgUmVm
PFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4qPigm
bV9yZXN1bHQpOwotICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmpl
Y3QyPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1
cnNpdmVPYmplY3QyPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICAgICAgUmVmPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJz
aXZlT2JqZWN0Mj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVj
dDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpOworICAgICAqIFJlZjxSZWN1
cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QyOjpjcmVhdGUoKQorICAgICAq
ICAgICAucmVsZWFzZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYg
SW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCi0gICAg
dm9pZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOwor
ICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoi
KSwgV1RGOjptb3ZlKHZhbHVlKSk7CiAgICAgfQogfTsKIApAQCAtNTk4LDcgKzU4Niw3IEBAIHN0
YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogdGVtcGxhdGU8PiBzdHJ1
Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nh
c3Q+IHsKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiB2YWx1ZSk7CitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+JiYgdmFsdWUpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKIHN0YXRpYyB2b2lkIGFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKICNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVECkBAIC02ODQsNiArNjcyLDcgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKIHsK
KyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKICAgICBBU1NFUlQo
Y2FzdFN1Y2NlZWRlZCk7CkBAIC02OTQsNiArNjgzLDcgQEAgdm9pZCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4
cGUKICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX0FSRyh2
YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKICAgICBBU1NFUlRf
VU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwpAQCAtNzI5LDcgKzcxOSw3IEBA
IHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4CiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAog
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4g
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVl
KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojpy
dW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKIHsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKICAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKQEAgLTc0NSw2ICs3MzUs
NyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OgogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qx
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpCiB7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNP
YmplY3Qob2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNj
ZWVkZWQpOwpAQCAtNzY1LDYgKzc1Niw3IEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2
YWx1ZSk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwogICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwogICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CkBAIC0xMjU2LDcgKzEyNDgsNiBAQCBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJXSVByb3RvY29s
RW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUGFz
c1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAKaW5kZXggYzcxZGJjNi4uNzI3ZWJh
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcApA
QCAtMzcsMjIgKzM3LDIyIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gRW5jb2RlZFZhbHVlOjphc09i
amVjdCgpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBFbmNvZGVkVmFsdWU6OmFzT2JqZWN0KCkK
IHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3Vj
Y2VlZGVkID0gbV92YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
RW5jb2RlZFZhbHVlOjphc0FycmF5KCkKK1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gRW5jb2RlZFZh
bHVlOjphc0FycmF5KCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdDsKICAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSBtX3ZhbHVlLT5hc0FycmF5KHJlc3VsdCk7CiAgICAgQVNT
RVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAotICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVuY29kZWRWYWx1ZSBF
bmNvZGluZ1RyYWl0czxWZWN0b3I8Y2hhcj4+OjplbmNvZGVWYWx1ZShjb25zdCBWZWN0b3I8Y2hh
cj4mIGJ1ZmZlcikKQEAgLTE3NSwyMyArMTc1LDIzIEBAIHRlbXBsYXRlPD4gU3RyaW5nIEVuY29k
ZWRWYWx1ZTo6Y29udmVydFRvPFN0cmluZz4oKQogdGVtcGxhdGU8Pgogdm9pZCBFbmNvZGVkVmFs
dWU6OnB1dDxFbmNvZGVkVmFsdWU+KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB0eXBlbmFtZSBF
bmNvZGluZ1RyYWl0czxFbmNvZGVkVmFsdWU+OjpEZWNvZGVkVHlwZSYgdmFsdWUpCiB7Ci0gICAg
YXNPYmplY3QoKS0+c2V0VmFsdWUoa2V5LCB2YWx1ZS5tX3ZhbHVlKTsKKyAgICBhc09iamVjdCgp
LT5zZXRWYWx1ZShrZXksIHZhbHVlLm1fdmFsdWUuY29weVJlZigpKTsKIH0KIAogdGVtcGxhdGU8
Pgogdm9pZCBFbmNvZGVkVmFsdWU6OmFwcGVuZDxFbmNvZGVkVmFsdWU+KGNvbnN0IHR5cGVuYW1l
IEVuY29kaW5nVHJhaXRzPEVuY29kZWRWYWx1ZT46OkRlY29kZWRUeXBlJiB2YWx1ZSkKIHsKLSAg
ICBhc0FycmF5KCktPnB1c2hWYWx1ZSh2YWx1ZS5tX3ZhbHVlKTsKKyAgICBhc0FycmF5KCktPnB1
c2hWYWx1ZSh2YWx1ZS5tX3ZhbHVlLmNvcHlSZWYoKSk7CiB9CiAKIHRlbXBsYXRlPD4KIGJvb2wg
RW5jb2RlZFZhbHVlOjpnZXQ8RW5jb2RlZFZhbHVlPihjb25zdCBTdHJpbmcmIGtleSwgdHlwZW5h
bWUgRW5jb2RpbmdUcmFpdHM8RW5jb2RlZFZhbHVlPjo6RGVjb2RlZFR5cGUmIGRlY29kZWRWYWx1
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFs
dWUoYXNPYmplY3QoKS0+Z2V0KGtleSkpOwotICAgIGlmICghaW5zcGVjdG9yVmFsdWUpCisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICghYXNPYmpl
Y3QoKS0+Z2V0VmFsdWUoa2V5LCB2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGRlY29kZWRWYWx1ZSA9IEVuY29kZWRWYWx1ZShpbnNwZWN0b3JWYWx1ZSk7CisgICAgZGVjb2Rl
ZFZhbHVlID0gRW5jb2RlZFZhbHVlKFdURjo6bW92ZSh2YWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRW
YWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaAppbmRl
eCBjMDAxMGU4Li44NjU5YjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVw
bGF5L0VuY29kZWRWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5j
b2RlZFZhbHVlLmgKQEAgLTQxLDcgKzQxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEVuY29kaW5nVHJhaXRzOwogCiBjbGFzcyBFbmNvZGVkVmFsdWUgZmluYWwgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IEVuY29kZWRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IHZhbHVlKQorICAgIGV4cGxpY2l0IEVuY29kZWRWYWx1ZShSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKSB7IH0K
IAogICAgIEVuY29kZWRWYWx1ZSgpCkBAIC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydFRvKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBhc09iamVjdCgpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4g
YXNBcnJheSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gYXNPYmplY3QoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gYXNBcnJheSgpOwogCiBwcml2YXRlOgogICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJl
cGxheUlucHV0cy5weQppbmRleCBkZjliOTY3Li42NWY1NDlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
clJlcGxheUlucHV0cy5weQpAQCAtMzQxLDEzICszNDEsMTMgQEAgY2xhc3MgVHlwZToKICAgICAg
ICAgaWYgc2VsZi5tb2RlID09IFR5cGVNb2Rlcy5TQ0FMQVI6CiAgICAgICAgICAgICByZXR1cm4g
c2VsZi50eXBlX25hbWUocXVhbGlmaWVkKQogICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSBUeXBl
TW9kZXMuU0hBUkVEOgotICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzPiIgJSBzZWxm
LnR5cGVfbmFtZShxdWFsaWZpZWQpCisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjwlcz4iICUg
c2VsZi50eXBlX25hbWUocXVhbGlmaWVkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0
dXJuICJjb25zdCAlcyYiICUgc2VsZi50eXBlX25hbWUocXVhbGlmaWVkKQogCiAgICAgZGVmIGFy
Z3VtZW50X3R5cGUoc2VsZiwgcXVhbGlmaWVkPUZhbHNlKToKICAgICAgICAgaWYgc2VsZi5tb2Rl
ID09IFR5cGVNb2Rlcy5TSEFSRUQ6Ci0gICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXM+
IiAlIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZCkKKyAgICAgICAgICAgIHJldHVybiAiUmVmUHRy
PCVzPiYmIiAlIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZCkKICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIHJldHVybiBzZWxmLnN0b3JhZ2VfdHlwZSgpCiAKQEAgLTkzOSw3ICs5MzksNyBAQCBj
bGFzcyBHZW5lcmF0b3I6CiAKICAgICBkZWYgZ2VuZXJhdGVfbWVtYmVyX21vdmVfZXhwcmVzc2lv
bihzZWxmLCBfbWVtYmVyKToKICAgICAgICAgX3R5cGUgPSBzZWxmLl9tb2RlbC5nZXRfdHlwZV9m
b3JfbWVtYmVyKF9tZW1iZXIpCi0gICAgICAgIGlmIF90eXBlLm1vZGUgPT0gVHlwZU1vZGVzLk9X
TkVEOgorICAgICAgICBpZiBfdHlwZS5tb2RlIGluIFtUeXBlTW9kZXMuT1dORUQsIFR5cGVNb2Rl
cy5TSEFSRURdOgogICAgICAgICAgICAgcmV0dXJuICJXVEY6Om1vdmUoJXMpIiAlIF9tZW1iZXIu
bWVtYmVyTmFtZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIF9tZW1iZXIubWVt
YmVyTmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29s
ZUNsaWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50
LmNwcAppbmRleCBjMWI5ZjExLi5iNzY2MzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgQ29u
c29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVz
c2FnZVR5cGUgdHlwZSwKICAgICBXVEZMb2dBbHdheXMoIiVzIiwgYnVpbGRlci50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OnByaW50Q29uc29sZU1l
c3NhZ2VXaXRoQXJndW1lbnRzKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNj
cmlwdEFyZ3VtZW50cz4gcHJwQXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50OjpwcmludENv
bnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5
cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4mJiBwcnBBcmd1bWVudHMpCiB7CiAgICAgUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4gYXJndW1lbnRzID0gcHJwQXJndW1lbnRzOwogCkBAIC0xODYsNyArMTg2LDcgQEAg
dm9pZCBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNz
YWdlU291cmNlIHNvdXJjZSwgTWVzc2EKICAgICB9CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6
aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4gcHJwQXJndW1lbnRzLCBBcmd1bWVudFJlcXVpcmVtZW50IGFyZ3VtZW50UmVxdWlyZW1l
bnQpCit2b2lkIENvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwo
TWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBwcnBBcmd1bWVudHMsIEFyZ3VtZW50UmVxdWly
ZW1lbnQgYXJndW1lbnRSZXF1aXJlbWVudCkKIHsKICAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRz
PiBhcmd1bWVudHMgPSBwcnBBcmd1bWVudHM7CiAgICAgaWYgKGFyZ3VtZW50UmVxdWlyZW1lbnQg
PT0gQXJndW1lbnRSZXF1aXJlZCAmJiAhYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkpCkBAIC0x
OTUsNTcgKzE5NSw1NyBAQCB2b2lkIENvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhU
eXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldgogICAgIG1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKHR5cGUsIGxldmVsLCBleGVjLCBhcmd1bWVudHMucmVsZWFzZSgpKTsKIH0K
IAotdm9pZCBDb25zb2xlQ2xpZW50Ojpsb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCit2
b2lkIENvbnNvbGVDbGllbnQ6OmxvZ1dpdGhMZXZlbChFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxT
Y3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzLCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCiB7Ci0gICAg
aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwg
ZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VX
aXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBleGVjLCBXVEY6Om1vdmUo
YXJndW1lbnRzKSwgQXJndW1lbnRSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6
Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzKQordm9pZCBDb25zb2xlQ2xpZW50OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxT
Y3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhU
eXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkNsZWFyLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywg
YXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpDbGVhciwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMs
IFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKIH0KIAotdm9pZCBD
b25zb2xlQ2xpZW50OjpkaXIoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50OjpkaXIoRXhlY1N0YXRlKiBleGVj
LCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpEaXIsIE1lc3NhZ2VMZXZlbDo6TG9n
LCBleGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2Fn
ZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkRpciwgTWVzc2FnZUxldmVsOjpMb2csIGV4
ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBD
b25zb2xlQ2xpZW50OjpkaXJYTUwoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50OjpkaXJYTUwoRXhlY1N0YXRl
KiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpEaXJYTUwsIE1lc3NhZ2VM
ZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVy
bmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkRpclhNTCwgTWVzc2FnZUxl
dmVsOjpMb2csIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsK
IH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojp0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGVDbGllbnQ6OnRhYmxl
KEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7
Ci0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6VGFibGUs
IE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZWQpOwor
ICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlRhYmxlLCBN
ZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50UmVx
dWlyZWQpOwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OnRyYWNlKEV4ZWNTdGF0ZSogZXhlYywg
UGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVu
dDo6dHJhY2UoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3Vt
ZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBl
OjpUcmFjZSwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RS
ZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlw
ZTo6VHJhY2UsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwg
QXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6YXNzZXJ0Q29u
ZGl0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cywgYm9vbCBjb25kaXRpb24pCit2b2lkIENvbnNvbGVDbGllbnQ6OmFzc2VydENvbmRpdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzLCBi
b29sIGNvbmRpdGlvbikKIHsKICAgICBpZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpBc3NlcnQs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RSZXF1aXJl
ZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6QXNz
ZXJ0LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJn
dW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXAoRXhlY1N0
YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBD
b25zb2xlQ2xpZW50Ojpncm91cChFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVu
dHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwo
TWVzc2FnZVR5cGU6OlN0YXJ0R3JvdXAsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVu
dHMsIEFyZ3VtZW50Tm90UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5k
TGV2ZWwoTWVzc2FnZVR5cGU6OlN0YXJ0R3JvdXAsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBX
VEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29u
c29sZUNsaWVudDo6Z3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNj
cmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50Ojpncm91cENvbGxh
cHNlZChFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRz
KQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlN0
YXJ0R3JvdXBDb2xsYXBzZWQsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVudHMsIEFy
Z3VtZW50Tm90UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwo
TWVzc2FnZVR5cGU6OlN0YXJ0R3JvdXBDb2xsYXBzZWQsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVj
LCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQg
Q29uc29sZUNsaWVudDo6Z3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50Ojpncm91cEVuZChFeGVj
U3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAg
IGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkVuZEdyb3VwLCBN
ZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsK
KyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpFbmRHcm91
cCwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVu
dE5vdFJlcXVpcmVkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmgKaW5kZXggOGY0ZjE5My4uYTE2Yjg1YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuaApAQCAt
NDIsMzAgKzQyLDMwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db25zb2xlQ2xpZW50KCkgeyB9
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVk
IGNvbHVtbk51bWJlcik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRD
b25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
QXJndW1lbnRzPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRDb25z
b2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVu
dHM+JiYpOwogCi0gICAgdm9pZCBsb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4sIE1lc3NhZ2VMZXZlbCk7Ci0gICAgdm9pZCBjbGVh
cihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7Ci0g
ICAgdm9pZCBkaXIoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3Vt
ZW50cz4pOwotICAgIHZvaWQgZGlyWE1MKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIHRhYmxlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIHRyYWNlKEV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGFz
c2VydENvbmRpdGlvbihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJn
dW1lbnRzPiwgYm9vbCBjb25kaXRpb24pOwotICAgIHZvaWQgZ3JvdXAoRXhlY1N0YXRlKiwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgZ3JvdXBDb2xs
YXBzZWQoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4p
OwotICAgIHZvaWQgZ3JvdXBFbmQoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4pOworICAgIHZvaWQgbG9nV2l0aExldmVsKEV4ZWNTdGF0ZSosIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwgTWVzc2FnZUxldmVsKTsKKyAgICB2b2lk
IGNsZWFyKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7
CisgICAgdm9pZCBkaXIoRXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiYmKTsKKyAgICB2b2lkIGRpclhNTChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+JiYpOworICAgIHZvaWQgdGFibGUoRXhlY1N0YXRlKiwgUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2b2lkIHRyYWNlKEV4ZWNTdGF0ZSos
IFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCBhc3NlcnRD
b25kaXRpb24oRXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYm
LCBib29sIGNvbmRpdGlvbik7CisgICAgdm9pZCBncm91cChFeGVjU3RhdGUqLCBSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOworICAgIHZvaWQgZ3JvdXBDb2xsYXBzZWQoRXhl
Y1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2b2lk
IGdyb3VwRW5kKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4m
Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5
cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0QXJndW1lbnRzPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChFeGVjU3RhdGUq
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRBcmd1bWVudHM+JiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZShFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByb2Zp
bGVFbmQoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCB0aW1lKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgdGltZUVuZChFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHRpbWVTdGFtcChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6U2NyaXB0QXJndW1lbnRzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAoRXhl
Y1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7CiAKIHBy
aXZhdGU6CiAgICAgZW51bSBBcmd1bWVudFJlcXVpcmVtZW50IHsgQXJndW1lbnRSZXF1aXJlZCwg
QXJndW1lbnROb3RSZXF1aXJlZCB9OwotICAgIHZvaWQgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVB
bmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+LCBBcmd1bWVudFJlcXVpcmVtZW50KTsK
KyAgICB2b2lkIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYsIEFyZ3VtZW50UmVxdWlyZW1lbnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCmluZGV4IDMxMGY2NGQu
LjJhNTUyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCkBA
IC0yMzcsMTcgKzIzNywxNyBAQCBTdHJpbmcgVHlwZVNldDo6bGVhc3RDb21tb25BbmNlc3Rvcigp
IGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVE
ZXNjcmlwdGlvbj4+IFR5cGVTZXQ6OmFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0
CitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNl
bnRhdGlvbnMoKSBjb25zdAogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGRl
c2NyaXB0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGRl
c2NyaXB0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LnNpemUoKTsgaSsrKQogICAgICAg
ICBkZXNjcmlwdGlvbi0+YWRkSXRlbShtX3N0cnVjdHVyZUhpc3RvcnkuYXQoaSktPmluc3BlY3Rv
clJlcHJlc2VudGF0aW9uKCkpOwogCi0gICAgcmV0dXJuIGRlc2NyaXB0aW9uLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gV1RGOjptb3ZlKGRlc2NyaXB0aW9uKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlU2V0PiBUeXBlU2V0OjppbnNwZWN0b3JUeXBl
U2V0KCkgY29uc3QKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlU2V0PiBU
eXBlU2V0OjppbnNwZWN0b3JUeXBlU2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6VHlwZVNldDo6Y3JlYXRlKCkKICAgICAgICAgLnNldElzRnVu
Y3Rpb24oKG1fc2VlblR5cGVzICYgVHlwZUZ1bmN0aW9uKSAhPSBUeXBlTm90aGluZykKQEAgLTUx
MSwxMSArNTExLDExIEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6dG9KU09OU3RyaW5nKCkgY29u
c3QKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5z
cGVjdG9yUmVwcmVzZW50YXRpb24oKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50
YXRpb24oKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1
Y3R1cmVEZXNjcmlwdGlvbj4gYmFzZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0
cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IGN1cnJlbnRPYmplY3QgPSBiYXNl
OwotICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gY3VycmVudFNoYXBlID0gdGhpczsKKyAgICBh
dXRvIGJhc2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlw
dGlvbjo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gY3VycmVudE9iamVjdCA9IGJhc2UuY29weVJl
ZigpOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gY3VycmVudFNoYXBlKHRoaXMpOwogCiAg
ICAgd2hpbGUgKGN1cnJlbnRTaGFwZSkgewogICAgICAgICBhdXRvIGZpZWxkcyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwpAQCAtNTI1LDIxICs1MjUsMjEg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6OmkKICAgICAgICAgZm9yIChhdXRvIGZpZWxkIDogY3Vy
cmVudFNoYXBlLT5tX29wdGlvbmFsRmllbGRzKQogICAgICAgICAgICAgb3B0aW9uYWxGaWVsZHMt
PmFkZEl0ZW0oZmllbGQuZ2V0KCkpOwogCi0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZpZWxk
cyhmaWVsZHMpOwotICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRPcHRpb25hbEZpZWxkcyhvcHRp
b25hbEZpZWxkcyk7CisgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcygmZmllbGRzLmdl
dCgpKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoJm9wdGlvbmFs
RmllbGRzLmdldCgpKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0Q29uc3RydWN0b3JOYW1l
KGN1cnJlbnRTaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOwogICAgICAgICBjdXJyZW50T2JqZWN0
LT5zZXRJc0ltcHJlY2lzZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rpb25hcnlNb2RlKTsKIAog
ICAgICAgICBpZiAoY3VycmVudFNoYXBlLT5tX3Byb3RvKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IG5leHRP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlv
bjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1
Y3R1cmUobmV4dE9iamVjdCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gbmV4dE9iamVj
dDsKKyAgICAgICAgICAgIGF1dG8gbmV4dE9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAgICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1Y3R1cmUoJm5leHRPYmplY3QuZ2V0
KCkpOworICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IFdURjo6bW92ZShuZXh0T2JqZWN0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIGN1cnJlbnRTaGFwZSA9IGN1cnJlbnRTaGFwZS0+bV9wcm90
bzsKICAgICB9CiAKLSAgICByZXR1cm4gYmFzZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6
bW92ZShiYXNlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
U2V0LmgKaW5kZXggYjJjODEwNy4uMWNhMzkxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVTZXQuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQcm9w
ZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4pOwogICAgIFN0cmluZyBzdHJpbmdSZXByZXNlbnRhdGlv
bigpOwogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBpbnNwZWN0
b3JSZXByZXNlbnRhdGlvbigpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKTsKICAgICB2
b2lkIHNldENvbnN0cnVjdG9yTmFtZShTdHJpbmcgbmFtZSkgeyBtX2NvbnN0cnVjdG9yTmFtZSA9
IChuYW1lLmlzRW1wdHkoKSA/ICJPYmplY3QiIDogbmFtZSk7IH0KICAgICBTdHJpbmcgY29uc3Ry
dWN0b3JOYW1lKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3Rvck5hbWU7IH0KICAgICB2b2lkIHNldFBy
b3RvKFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlKSB7IG1fcHJvdG8gPSBzaGFwZTsg
fQpAQCAtMTAyLDExICsxMDIsMTEgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hl
KCk7CiAgICAgU3RyaW5nIGR1bXBUeXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBkaXNwbGF5TmFt
ZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBhbGxTdHJ1
Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRp
b24+PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsKICAgICBTdHJpbmcgdG9K
U09OU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc092ZXJmbG93bigpIGNvbnN0IHsgcmV0dXJu
IG1faXNPdmVyZmxvd247IH0KICAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3RvcigpIGNvbnN0
OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZVNldD4g
aW5zcGVjdG9yVHlwZVNldCgpIGNvbnN0OworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUeXBlU2V0PiBpbnNwZWN0b3JUeXBlU2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmc7IH0KICAgICBi
b29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OwogICAgIHVpbnQzMl90
IHNlZW5UeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5cGVzOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM5YWIwNDAu
LjJiYzI5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDEtMDYgIEJyaWFuIEouIEJ1cmcg
IDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHB1cmdl
IFBhc3NSZWZQdHIgZnJvbSBJbnNwZWN0b3IgY29kZSBhbmQgdXNlIFJlZiBmb3IgdHlwZWQgYW5k
IHVudHlwZWQgcHJvdG9jb2wgb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBL
bGluZy4KKworICAgICAgICAqIHd0Zi9TdG9wd2F0Y2guaDoKKyAgICAgICAgKFdURjo6U3RvcHdh
dGNoOjpjcmVhdGUpOiBSZXR1cm4gYSBSZWYuCisKIDIwMTUtMDEtMDYgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgQUREUkVTU19TQU5JVElaRVIgbWFjcm8g
aXMgb3ZlcmxvYWRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RvcHdhdGNoLmggYi9T
b3VyY2UvV1RGL3d0Zi9TdG9wd2F0Y2guaAppbmRleCA0MjEzOTExLi45Y2JhOWExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdG9wd2F0Y2guaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdG9w
d2F0Y2guaApAQCAtMzMsOSArMzMsOSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgU3RvcHdh
dGNoIDogcHVibGljIFJlZkNvdW50ZWQ8U3RvcHdhdGNoPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RvcHdhdGNoPiBjcmVhdGUoKQorICAgIHN0YXRpYyBSZWY8U3RvcHdhdGNo
PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9wd2F0Y2go
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3B3YXRjaCgpKTsKICAgICB9CiAK
ICAgICB2b2lkIHJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgwYmMyYTYuLjVmZGI0OTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMzUgQEAKKworMjAxNS0wMS0wNiAgQnJpYW4gSi4gQnVyZyAgPGJ1
cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHVyZ2UgUGFz
c1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZvciB0eXBlZCBhbmQgdW50
eXBlZCBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDAwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5n
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdXNlcyBvZiBQYXNzUmVmUHRyIHdpdGgg
dXNlcyBvZiBSZWZQdHImJiBhbmQgV1RGOjptb3ZlKCkgaW4gY29kZQorICAgICAgICByZWxhdGVk
IHRvIFdlYiBJbnNwZWN0b3IuIEl0IGFsc28gY29udmVydHMgbWFueSB1c2VzIG9mIFJlZlB0ciB0
byBSZWYgd2hlcmUKKyAgICAgICAgcmVmZXJlbmNlcyBhcmUgYWx3YXlzIG5vbi1udWxsLiBUaGVz
ZSB0d28gcmVmYWN0b3JpbmdzIGhhdmUgYmVlbiBjb21iaW5lZCBzaW5jZQorICAgICAgICB0aGV5
IHRlbmQgdG8gcmVxdWlyZSBzaW1pbGFyIGNoYW5nZXMgdG8gdGhlIGNvZGUuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VkLgorCisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRNZXNzYWdlKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXBvcnRFeGNlcHRpb24pOgorICAg
ICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvWFNTQXVkaXRvckRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3JE
ZWxlZ2F0ZTo6Z2VuZXJhdGVWaW9sYXRpb25SZXBvcnQpOgorICAgICAgICAqIGluc3BlY3Rvci9D
b21tYW5kTGluZUFQSUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElI
b3N0OjppbnNwZWN0SW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9z
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpn
ZXRGcmFtZXNXaXRoTWFuaWZlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZv
ckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TmFtZWRGbG93
Q29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0
T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVj
dEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJy
YXlGb3JNYXRjaGVkUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JOYW1lZEZsb3cpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmls
aW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckhpZ2hsaWdo
dGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRp
b25TdG9wd2F0Y2gpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb25maWdDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1
YWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVt
ZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJp
bGl0eVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRp
ZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZElu
c2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnN0eWxl
QXR0cmlidXRlSW52YWxpZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnJlc29sdmVOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaWRJbnZhbGlkYXRl
U3R5bGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cGF1c2VPbk5hdGl2ZUV2
ZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6Z2V0RE9NU3RvcmFnZUl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYSk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDogVXNlIFJlZiBmb3IgYWxsIGNhbGxiYWNr
cyBzaW5jZSB0aGV5IGFyZQorICAgICAgICBub3QgbnVsbGFibGUuCisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlOjpzZXREYXRhYmFzZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHA6IFVzZSBSZWYgZm9yIGFsbCBjYWxsYmFja3Mgc2luY2UgdGhleSBhcmUKKyAg
ICAgICAgbm90IG51bGxhYmxlLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQ6OnJlcXVlc3REYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFy
T2JqZWN0U3RvcmVMaXN0ZW5lcjo6Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGVhck9iamVjdFN0b3JlOjpDbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1p
bmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29u
c29sZVRpbWVTdGFtcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmll
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdt
ZW50Q3JlYXRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZWdtZW50Q29tcGxldGVkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5jaHJvbm91c2x5SW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExv
YWRYSFJTeW5jaHJvbm91c2x5SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRE9NU3Rv
cmFnZUV2ZW50SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVdvcmtlclNjcmlwdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdG9wcGVkSW1wbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBs
YXliYWNrU3RhcnRlZEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1BhdXNlZEltcGwpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja0hpdFBvc2l0aW9uSW1w
bCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnBsYXliYWNrRmluaXNoZWRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZEltcGwpOiBEZWxldGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Mb2FkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTW9k
aWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdt
ZW50Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlZ21lbnRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzZWdtZW50TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGll
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRTZW5kV2ViU29ja2V0RnJhbWUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdM
YXllcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YnVpbGRPYmplY3RGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZv
clJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRBcnJheUZvclF1YWQpOgorICAgICAgICAo
V2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRPYmplY3RGb3JSZWdpb25IaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmpl
Y3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0
Rm9yU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckNTU1JlZ2lvbkNvbnRl
bnRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYWludFJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yUmVuZGVyZXJGcmFnbWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhIUlRleHREZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6
OmJ1aWxkQXJyYXlGb3JDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9y
U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YnVp
bGRPYmplY3RGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dCk6CisgICAgICAg
IChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24pOgorICAgICAgICAoV2Vi
Q29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXNzaW9uRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVudERhdGEpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclRpbWluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVj
ZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRTZW5kV2ViU29ja2V0RnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIVFRQSGVh
ZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpsb2FkUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkU2NoZWR1bGVTdHlsZVJl
Y2FsY3VsYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlzYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpzZXRDYWNoZURpc2FibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3Vy
Y2VEYXRhQXQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRTb3VyY2VSYW5nZU9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFz
Q1NTUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZTo6ZXh0cmFjdFNvdXJjZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldElu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZWxlY3RvcnNGcm9tU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xl
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVj
dG9yU3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
ZW1lbWJlckluc3BlY3RvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpJ
bnNwZWN0b3JDU1NJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6YXNQcm90
b2NvbFZhbHVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydEZyb21D
b25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BG
cm9tQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojph
ZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OmRpZENvbXBsZXRlUmVjb3JkRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2Vy
QWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYSFJSZXBsYXlEYXRhOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WEhSUmVwbGF5RGF0YTo6WEhSUmVwbGF5RGF0YSk6CisgICAgICAgICogaW5z
cGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
UmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpkZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OnNldERlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6YnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OnNl
dEJ1ZmZlcik6CisgICAgICAgICogaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVC
YWNrZ3JvdW5kUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlR0NFdmVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29uc29sZVByb2ZpbGVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZlbnREaXNwYXRj
aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVH
ZW5lcmljVGltZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlVGltZXJJbnN0YWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlwdERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1l
U3RhbXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVS
ZXNwb25zZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVSZXNvdXJjZUZpbmlzaERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZlUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTGF5b3V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZURlY29kZUltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc2l6ZUltYWdlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZU1hcmtE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFy
c2VIVE1MRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVRdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFpbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmJ1aWxkUHJvZmlsZUluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlV2ViU29ja2V0Q3JlYXRlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNXZWJTb2NrZXREYXRhKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2gp
OgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q29uc29sZUNsaWVudDo6YWRkTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29s
ZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNvbnNvbGVDbGllbnQ6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xp
ZW50Ojpwcm9maWxlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50Ojp0
aW1lRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAp
OgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuaDoKKyAgICAgICAgKiByZXBsYXkv
UmVwbGF5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVy
Ojpzd2l0Y2hTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OmNy
ZWF0ZVNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6Y29tcGxl
dGVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OmxvYWRTZWdt
ZW50QXRJbmRleCk6CisgICAgICAgICogcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2Rz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluaXRpYWxOYXZpZ2F0aW9uOjpjcmVhdGVGcm9tUGFn
ZSk6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25z
b2xlKToKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmg6CisgICAg
ICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisKIDIwMTUtMDEtMDYgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEcm9wIFJlc291cmNlUmVzcG9uc2VCYXNlOjpj
b25uZWN0aW9uSUQgYW5kIGNvbm5lY3Rpb25SZXVzZWQgbWVtYmVycwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCmluZGV4
IGI5ZDU5MTIuLjUwZWYwMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBQYXNz
UmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZQogCiAgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJh
c2VDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0Rm9yKGNvbnRleHQpOwogICAgIGRhdGFiYXNlQ29u
dGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLT5ob3N0KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lvbik7CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UoY29udGV4dCwgZGF0YWJhc2UuY29weVJlZigp
LCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lv
bik7CiAKICAgICBpZiAoYmFja2VuZC0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgp
KSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9u
Q2FsbGJhY2tUYXNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKaW5kZXggNjQ5ZDEwMC4uOTkwYmVkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCkBAIC0yNjA2LDkgKzI2MDYsOSBAQCBFdmVudFRhcmdldCogRG9jdW1lbnQ6OmVycm9y
RXZlbnRUYXJnZXQoKQogICAgIHJldHVybiBtX2RvbVdpbmRvdy5nZXQoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1i
ZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3Zv
aWQgRG9jdW1lbnQ6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrKQog
ewotICAgIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3Is
IGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxT
dGFjayk7CisgICAgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpF
cnJvciwgZXJyb3JNZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
V1RGOjptb3ZlKGNhbGxTdGFjaykpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRVUkwoY29uc3Qg
VVJMJiB1cmwpCkBAIC00OTY3LDcgKzQ5NjcsNyBAQCB2b2lkIERvY3VtZW50OjphZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdAog
ICAgICAgICBwYWdlLT5jb25zb2xlKCkuYWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdl
LCByZXF1ZXN0SWRlbnRpZmllciwgdGhpcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0
YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcikKK3ZvaWQgRG9jdW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBz
b3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAg
ICAgaWYgKCFpc0NvbnRleHRUaHJlYWQoKSkgewogICAgICAgICBwb3N0VGFzayhBZGRDb25zb2xl
TWVzc2FnZVRhc2soc291cmNlLCBsZXZlbCwgU3RyaW5nQ2FwdHVyZShtZXNzYWdlKSkpOwpAQCAt
NDk3NSw3ICs0OTc1LDcgQEAgdm9pZCBEb2N1bWVudDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNl
IHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBp
ZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y29uc29sZSgpLmFk
ZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIsIGNhbGxTdGFjaywgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAg
ICAgcGFnZS0+Y29uc29sZSgpLmFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgc291
cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIFdURjo6bW92ZShjYWxsU3RhY2spLCBz
dGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCiBTZWN1cml0eU9yaWdpbiogRG9jdW1lbnQ6
OnRvcE9yaWdpbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDk4MzZlYTkuLmYxYjdk
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTc5LDcgKzExNzksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJZk5lZWRlZChjb25zdCBJbnRQb2ludCYg
b2xkUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBuZXdQb3NpdGlvbiwgY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRWxlbWVudCogdGFyZ2V0
ID0gbnVsbHB0cik7CiAKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0KiBlcnJvckV2ZW50VGFyZ2V0
KCkgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29s
ZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2Ny
aXB0Q2FsbFN0YWNrPikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2Vw
dGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCBpbml0
RE5TUHJlZmV0Y2goKTsKIApAQCAtMTMxNyw3ICsxMzE3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIG92ZXJyaWRlIGZpbmFsIHsgcmVm
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgb3Zl
cnJpZGUgZmluYWwgeyBkZXJlZigpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0
YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSBvdmVycmlkZSBm
aW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rv
cjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25n
IHJlcXVlc3RJZGVudGlmaWVyID0gMCkgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2aXJ0dWFsIGRv
dWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggYjJkYjU5
MS4uMWEwNjM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcApAQCAtMzUwLDI1ICszNTAsMjUgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpzYW5pdGl6ZVNjcmlwdEVycm9yKFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXBvcnRF
eGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgUGFzc1JlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+IGNhbGxTdGFjaywgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCit2b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgQ2FjaGVkU2Ny
aXB0KiBjYWNoZWRTY3JpcHQpCiB7CiAgICAgaWYgKG1faW5EaXNwYXRjaEVycm9yRXZlbnQpIHsK
ICAgICAgICAgaWYgKCFtX3BlbmRpbmdFeGNlcHRpb25zKQogICAgICAgICAgICAgbV9wZW5kaW5n
RXhjZXB0aW9ucyA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQZW5k
aW5nRXhjZXB0aW9uPj4+KCk7Ci0gICAgICAgIG1fcGVuZGluZ0V4Y2VwdGlvbnMtPmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdFeGNlcHRpb24+KGVycm9yTWVzc2FnZSwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIGNhbGxTdGFjaykpOworICAgICAgICBtX3BlbmRp
bmdFeGNlcHRpb25zLT5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nRXhjZXB0aW9uPihl
cnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBjYWxsU3Rh
Y2suY29weVJlZigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBGaXJzdCBy
ZXBvcnQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBhbmQgb25seSB0aGVuIGFsbCB0aGUgbmVzdGVk
IG9uZXMuCiAgICAgaWYgKCFkaXNwYXRjaEVycm9yRXZlbnQoZXJyb3JNZXNzYWdlLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgY2FjaGVkU2NyaXB0KSkKLSAgICAgICAgbG9n
RXhjZXB0aW9uVG9Db25zb2xlKGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7CisgICAgICAgIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShl
cnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3Rh
Y2suY29weVJlZigpKTsKIAogICAgIGlmICghbV9wZW5kaW5nRXhjZXB0aW9ucykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UGVu
ZGluZ0V4Y2VwdGlvbj4+PiBwZW5kaW5nRXhjZXB0aW9ucyA9IFdURjo6bW92ZShtX3BlbmRpbmdF
eGNlcHRpb25zKTsKICAgICBmb3IgKGF1dG8mIGV4Y2VwdGlvbiA6ICpwZW5kaW5nRXhjZXB0aW9u
cykKLSAgICAgICAgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGV4Y2VwdGlvbi0+bV9lcnJvck1lc3Nh
Z2UsIGV4Y2VwdGlvbi0+bV9zb3VyY2VVUkwsIGV4Y2VwdGlvbi0+bV9saW5lTnVtYmVyLCBleGNl
cHRpb24tPm1fY29sdW1uTnVtYmVyLCBleGNlcHRpb24tPm1fY2FsbFN0YWNrKTsKKyAgICAgICAg
bG9nRXhjZXB0aW9uVG9Db25zb2xlKGV4Y2VwdGlvbi0+bV9lcnJvck1lc3NhZ2UsIGV4Y2VwdGlv
bi0+bV9zb3VyY2VVUkwsIGV4Y2VwdGlvbi0+bV9saW5lTnVtYmVyLCBleGNlcHRpb24tPm1fY29s
dW1uTnVtYmVyLCBleGNlcHRpb24tPm1fY2FsbFN0YWNrLmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBz
b3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCAy
YjQzY2E3Li5kOWJlYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNh
YmxlRXZhbChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogCiAgICAgYm9vbCBzYW5p
dGl6ZVNjcmlwdEVycm9yKFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmVOdW1iZXIsIGlu
dCYgY29sdW1uTnVtYmVyLCBTdHJpbmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0KiA9IG51bGxw
dHIpOwotICAgIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBDYWNoZWRTY3JpcHQq
ID0gbnVsbHB0cik7CisgICAgdm9pZCByZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBDYWNoZWRT
Y3JpcHQqID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBK
U0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVy
ID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nIHJlcXVl
c3RJZGVudGlmaWVyID0gMCkgPSAwOwpAQCAtMTk4LDkgKzE5OCw5IEBAIHByb3RlY3RlZDoKICAg
ICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZpcnR1
YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJl
ciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllciA9IDApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdl
U291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSogPSBu
dWxscHRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgPSAwOwogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXQqIGVycm9yRXZlbnRUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwg
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKSA9IDA7CiAgICAgYm9vbCBkaXNw
YXRjaEVycm9yRXZlbnQoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0
Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3Bw
CmluZGV4IGEzMmZhMDguLjA0ZGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvWFNTQXVkaXRvckRlbGVnYXRlLmNwcApAQCAtODIsMTIgKzgyLDEyIEBAIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IFhTU0F1ZGl0b3JEZWxlZ2F0ZTo6Z2VuZXJhdGVWaW9sYXRpb25SZXBvcnQo
Y29uc3QgWFNTSW5mbyYKICAgICAgICAgICAgIGh0dHBCb2R5ID0gZm9ybURhdGEtPmZsYXR0ZW5U
b1N0cmluZygpOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydERl
dGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlcG9ydERldGFpbHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlcG9y
dERldGFpbHMtPnNldFN0cmluZygicmVxdWVzdC11cmwiLCB4c3NJbmZvLm1fb3JpZ2luYWxVUkwp
OwogICAgIHJlcG9ydERldGFpbHMtPnNldFN0cmluZygicmVxdWVzdC1ib2R5IiwgaHR0cEJvZHkp
OwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVwb3J0T2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXBvcnRPYmplY3QtPnNldE9iamVjdCgieHNzLXJlcG9y
dCIsIHJlcG9ydERldGFpbHMucmVsZWFzZSgpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXBvcnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlcG9ydE9iamVj
dC0+c2V0T2JqZWN0KCJ4c3MtcmVwb3J0IiwgV1RGOjptb3ZlKHJlcG9ydERldGFpbHMpKTsKIAog
ICAgIHJldHVybiBGb3JtRGF0YTo6Y3JlYXRlKHJlcG9ydE9iamVjdC0+dG9KU09OU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5k
TGluZUFQSUhvc3QuY3BwCmluZGV4IGIxM2Q5YzEuLmI0NjRkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBAIC05Miw3ICs5Miw3IEBA
IHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICNlbmRpZgogfQogCi12b2lk
IENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoaW50cykKK3ZvaWQgQ29tbWFu
ZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgb2JqZWN0
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgaGludHMpCiB7CiAgICAgaWYgKCFtX2luc3BlY3Rv
ckFnZW50KQogICAgICAgICByZXR1cm47CkBAIC0xMDEsOCArMTAxLDggQEAgdm9pZCBDb21tYW5k
TGluZUFQSUhvc3Q6Omluc3BlY3RJbXBsKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVj
dCwgUGFzc1JlZlAKICAgICBpZiAoIWhpbnRzLT5hc09iamVjdChoaW50c09iamVjdCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+IHJlbW90ZU9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0KTsKLSAgICBt
X2luc3BlY3RvckFnZW50LT5pbnNwZWN0KHJlbW90ZU9iamVjdC5yZWxlYXNlKCksIGhpbnRzT2Jq
ZWN0LnJlbGVhc2UoKSk7CisgICAgYXV0byByZW1vdGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KFdU
Rjo6bW92ZShvYmplY3QpKTsKKyAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0KFdURjo6bW92
ZShyZW1vdGVPYmplY3QpLCBXVEY6Om1vdmUoaGludHNPYmplY3QpKTsKIH0KIAogdm9pZCBDb21t
YW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50TGlzdGVuZXJzSW1wbChOb2RlKiBub2RlLCBWZWN0b3I8
RXZlbnRMaXN0ZW5lckluZm8+JiBsaXN0ZW5lcnNBcnJheSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaAppbmRleCBiMDNmMTk2Li4zMWU2YzYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCkBAIC05NSw3
ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZEluc3BlY3RlZE9iamVjdChzdGQ6OnVuaXF1
ZV9wdHI8SW5zcGVjdGFibGVPYmplY3Q+KTsKICAgICB2b2lkIGNsZWFySW5zcGVjdGVkT2JqZWN0
cygpOwogICAgIEluc3BlY3RhYmxlT2JqZWN0KiBpbnNwZWN0ZWRPYmplY3QodW5zaWduZWQgaW5k
ZXgpOwotICAgIHZvaWQgaW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiBvYmplY3RUb0luc3BlY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gaGludHMpOworICAgIHZvaWQgaW5zcGVjdEltcGwoUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWU+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4mJiBoaW50cyk7CiAKICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzSW1wbChOb2Rl
KiwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJyYXkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwCmluZGV4IDk0ZDRjNzguLjQ3ZDgzYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwCkBAIC0xMDgsMTEgKzEwOCwxMiBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYsIFJlZlB0cgogICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvIGluZm8gPSBob3N0LT5hcHBsaWNhdGlv
bkNhY2hlSW5mbygpOwogICAgICAgICBTdHJpbmcgbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZl
c3Quc3RyaW5nKCk7CiAgICAgICAgIGlmICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJh
bWVXaXRoTWFuaWZlc3Q+IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCisgICAgICAgICAgICBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+IHZhbHVl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZl
c3Q6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZy
YW1lSWQoZnJhbWUpKQogICAgICAgICAgICAgICAgIC5zZXRNYW5pZmVzdFVSTChtYW5pZmVzdFVS
TCkKLSAgICAgICAgICAgICAgICAuc2V0U3RhdHVzKHN0YXRpY19jYXN0PGludD4oaG9zdC0+c3Rh
dHVzKCkpKTsKLSAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRlbSh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgLnNldFN0YXR1cyhzdGF0aWNfY2FzdDxpbnQ+KGhvc3QtPnN0YXR1cygpKSkKKyAgICAg
ICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFdURjo6
bW92ZSh2YWx1ZSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTUxLDcgKzE1Miw3IEBAIHZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmIGVyCiAgICAgYXBwbGljYXRpb25DYWNoZSA9IGJ1aWxkT2JqZWN0
Rm9yQXBwbGljYXRpb25DYWNoZShyZXNvdXJjZXMsIGluZm8pOwogfQogCi1QYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNh
Y2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2VzLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZv
JiBhcHBsaWNhdGlvbkNhY2hlSW5mbykKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNh
dGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3Qg
QXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCiB7
CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxp
Y2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNYW5pZmVzdFVSTChhcHBsaWNhdGlv
bkNhY2hlSW5mby5tX21hbmlmZXN0LnN0cmluZygpKQpAQCAtMTYyLDE3ICsxNjMsMTcgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlPiBJbnNwZWN0b3JBcHAKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNh
dGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2VzKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZXMoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmIGFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZT4+IHJlc291cmNlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGlj
YXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJl
c291cmNlSW5mbyA6IGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpCiAgICAgICAgIHJlc291cmNl
cy0+YWRkSXRlbShidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShyZXNvdXJj
ZUluZm8pKTsKIAotICAgIHJldHVybiByZXNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bW92ZShy
ZXNvdXJjZXMpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCitSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291
cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUlu
Zm8mIHJlc291cmNlSW5mbykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0xOTEs
MTEgKzE5MiwxMSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9u
Q2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcAogICAgIGlmIChyZXNvdXJjZUlu
Zm8ubV9pc0V4cGxpY2l0KQogICAgICAgICB0eXBlcy5hcHBlbmRMaXRlcmFsKCJFeHBsaWNpdCAi
KTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBw
bGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQorICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwocmVzb3VyY2VJbmZvLm1fcmVz
b3VyY2Uuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTaXplKHN0YXRpY19jYXN0PGludD4ocmVzb3Vy
Y2VJbmZvLm1fc2l6ZSkpCi0gICAgICAgIC5zZXRUeXBlKHR5cGVzLnRvU3RyaW5nKCkpOwotICAg
IHJldHVybiB2YWx1ZTsKKyAgICAgICAgLnNldFR5cGUodHlwZXMudG9TdHJpbmcoKSkKKyAgICAg
ICAgLnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oCmluZGV4IGJjNmZlYmIuLmM3MTI5ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTY3LDkg
KzY3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiYpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBw
bGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlv
bkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiwgY29u
c3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYpOwotICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gYnVpbGRBcnJheUZvckFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xp
c3QmKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYpOwor
ICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlPiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25D
YWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Q2FjaGVJbmZvJik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+
IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gYnVpbGRPYmpl
Y3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OlJlc291cmNlSW5mbyYpOwogCiAgICAgRG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiwgU3RyaW5nIGZyYW1lSWQpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA2NWY1ZGM0Li5m
NDIxYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKQEAgLTYxMiw0MCArNjEyLDQyIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1h
dGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vCiAKICAg
ICAvLyBQc2V1ZG8gZWxlbWVudHMuCiAgICAgaWYgKCFpbmNsdWRlUHNldWRvIHx8ICppbmNsdWRl
UHNldWRvKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0VsZW1lbnRzID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1
ZG9JZE1hdGNoZXM+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWRNYXRjaGVzPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBG
SVJTVF9QVUJMSUNfUFNFVURPSUQ7IHBzZXVkb0lkIDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VV
RE9JRDsgcHNldWRvSWQgPSBzdGF0aWNfY2FzdDxQc2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgewog
ICAgICAgICAgICAgYXV0byBtYXRjaGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxl
UnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIHBzZXVkb0lkLCBTdHlsZVJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7CiAgICAgICAgICAgICBpZiAoIW1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNo
ZXM+IG1hdGNoZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlczo6
Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIG1hdGNoZXMgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlczo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAg
LnNldFBzZXVkb0lkKHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQpKQotICAgICAgICAgICAgICAg
ICAgICAuc2V0TWF0Y2hlcyhidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxl
cywgc3R5bGVSZXNvbHZlciwgZWxlbWVudCkpOwotICAgICAgICAgICAgICAgIHBzZXVkb0VsZW1l
bnRzLT5hZGRJdGVtKG1hdGNoZXMucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLnNl
dE1hdGNoZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVsZXMsIHN0eWxl
UmVzb2x2ZXIsIGVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOworICAg
ICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5hZGRJdGVtKFdURjo6bW92ZShtYXRjaGVzKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwc2V1ZG9JZE1hdGNoZXMgPSBw
c2V1ZG9FbGVtZW50cy5yZWxlYXNlKCk7CisgICAgICAgIHBzZXVkb0lkTWF0Y2hlcyA9IFdURjo6
bW92ZShwc2V1ZG9FbGVtZW50cyk7CiAgICAgfQogCiAgICAgLy8gSW5oZXJpdGVkIHN0eWxlcy4K
ICAgICBpZiAoIWluY2x1ZGVJbmhlcml0ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+IGVudHJpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+Ojpj
cmVhdGUoKTsKKyAgICAgICAgYXV0byBlbnRyaWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pjo6Y3JlYXRl
KCk7CiAgICAgICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7CiAgICAgICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICBTdHls
ZVJlc29sdmVyJiBwYXJlbnRTdHlsZVJlc29sdmVyID0gcGFyZW50RWxlbWVudC0+ZG9jdW1lbnQo
KS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CiAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNoZWRS
dWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxl
bWVudCwgU3R5bGVSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwotICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4gZW50cnkgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCi0gICAg
ICAgICAgICAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyhidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVM
aXN0KHBhcmVudE1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwgcGFyZW50RWxlbWVudCkpOwor
ICAgICAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJp
dGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlZENTU1J1
bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVzLCBzdHls
ZVJlc29sdmVyLCBwYXJlbnRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwog
ICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+
c3R5bGUoKS0+bGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQocGFyZW50
RWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQpCiAgICAgICAgICAgICAg
ICAgICAgIGVudHJ5LT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0
eWxlKHN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC0+aWQo
KSwgMCkpKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0o
ZW50cnkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGOjptb3Zl
KGVudHJ5KSk7CiAgICAgICAgICAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5oZXJpdGVkRW50cmllcyA9IGVu
dHJpZXMucmVsZWFzZSgpOworICAgICAgICBpbmhlcml0ZWRFbnRyaWVzID0gV1RGOjptb3ZlKGVu
dHJpZXMpOwogICAgIH0KIH0KIApAQCAtNjcxLDcgKzY3Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24+IGNvbXB1dGVkU3R5bGVJbmZvID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGUoZWxlbWVudCwgdHJ1ZSk7Ci0gICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNw
ZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgY29t
cHV0ZWRTdHlsZUluZm8sIG51bGxwdHIpOworICAgIFJlZjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVj
dG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1
dGVkU3R5bGVJbmZvLCBudWxscHRyKTsKICAgICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWls
ZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwogfQogCkBAIC03MTgsOSArNzIwLDkgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcKICAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0
b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVU
ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBmdWxsU3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0
b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21w
b3VuZElkKGZ1bGxTdHlsZUlkLmNvcHlSZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlz
RW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0
ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hl
ZXRJZCgpKTsKQEAgLTczNCw5ICs3MzYsOSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRT
dHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcAogICAg
IGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQog
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGlu
dCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKK3ZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0
eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKIHsKLSAgICBJbnNwZWN0b3JD
U1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3Vu
ZElkKGZ1bGxTdHlsZUlkLmNvcHlSZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1w
dHkoKSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0g
YXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJ
ZCgpKTsKQEAgLTc1MCw5ICs3NTIsOSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9w
ZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SQogICAgIGVy
cm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHBy
b3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+JiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9w
ZXJ0eShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQogewotICAgIElu
c3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOworICAgIEluc3BlY3RvckNTU0lk
IGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQuY29weVJlZigpKTsKICAgICBBU1NFUlQoIWNvbXBvdW5k
SWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxl
U2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5
bGVTaGVldElkKCkpOwpAQCAtNzY2LDkgKzc2OCw5IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElu
CiAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsUnVsZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVj
dG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQogewotICAgIEluc3BlY3RvckNTU0lk
IGNvbXBvdW5kSWQoZnVsbFJ1bGVJZCk7CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChm
dWxsUnVsZUlkLmNvcHlSZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7
CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0
U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsK
QEAgLTgxMSwyOSArODEzLDMwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQgY29udGV4dE5vZGVJCiAKIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eUluZm8+PiYgY3NzUHJvcGVydGllcykKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0
eUluZm8+PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBy
b3BlcnRpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmaXJz
dENTU1Byb3BlcnR5OyBpIDw9IGxhc3RDU1NQcm9wZXJ0eTsgKytpKSB7CiAgICAgICAgIENTU1By
b3BlcnR5SUQgaWQgPSBjb252ZXJ0VG9DU1NQcm9wZXJ0eUlEKGkpOwotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+IHByb3BlcnR5ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm86OmNyZWF0ZSgpCi0gICAgICAg
ICAgICAuc2V0TmFtZShnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoaWQpKTsKKyAgICAgICAgYXV0byBw
cm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVh
dGUoKQorICAgICAgICAgICAgLnNldE5hbWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSkKKyAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0
aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkoaWQpOwogICAgICAgICBpZiAo
IXNob3J0aGFuZC5sZW5ndGgoKSkgewotICAgICAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShw
cm9wZXJ0eS5yZWxlYXNlKCkpOworICAgICAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEY6
Om1vdmUocHJvcGVydHkpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBsb25naGFuZHMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byBsb25naGFuZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVh
dGUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNob3J0aGFuZC5sZW5ndGgo
KTsgKytqKSB7CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eUlEIGxvbmdoYW5kSUQgPSBzaG9ydGhh
bmQucHJvcGVydGllcygpW2pdOwogICAgICAgICAgICAgbG9uZ2hhbmRzLT5hZGRJdGVtKGdldFBy
b3BlcnR5TmFtZVN0cmluZyhsb25naGFuZElEKSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvcGVy
dHktPnNldExvbmdoYW5kcyhsb25naGFuZHMucmVsZWFzZSgpKTsKLSAgICAgICAgcHJvcGVydGll
cy0+YWRkSXRlbShwcm9wZXJ0eS5yZWxlYXNlKCkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0TG9u
Z2hhbmRzKFdURjo6bW92ZShsb25naGFuZHMpKTsKKyAgICAgICAgcHJvcGVydGllcy0+YWRkSXRl
bShXVEY6Om1vdmUocHJvcGVydHkpKTsKICAgICB9Ci0gICAgY3NzUHJvcGVydGllcyA9IHByb3Bl
cnRpZXMucmVsZWFzZSgpOworICAgIGNzc1Byb3BlcnRpZXMgPSBXVEY6Om1vdmUocHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQ
c2V1ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQogewogICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBtX2RvbUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2Rl
SWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTg2MiwxMiArODY1LDEyIEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldE5hbWVkRmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgZG9jCiAgICAgbV9uYW1lZEZsb3dDb2xsZWN0aW9uc1JlcXVlc3RlZC5hZGQoZG9j
dW1lbnROb2RlSWQpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxXZWJLaXROYW1lZEZsb3c+PiBuYW1l
ZEZsb3dzVmVjdG9yID0gZG9jdW1lbnQtPm5hbWVkRmxvd3MoKS5uYW1lZEZsb3dzKCk7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6TmFtZWRGbG93Pj4gbmFtZWRGbG93cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBu
YW1lZEZsb3dzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpOYW1lZEZsb3c+OjpjcmVhdGUoKTsKIAogICAgIGZvciAoVmVjdG9yPFJlZlB0cjxX
ZWJLaXROYW1lZEZsb3c+Pjo6aXRlcmF0b3IgaXQgPSBuYW1lZEZsb3dzVmVjdG9yLmJlZ2luKCk7
IGl0ICE9IG5hbWVkRmxvd3NWZWN0b3IuZW5kKCk7ICsraXQpCiAgICAgICAgIG5hbWVkRmxvd3Mt
PmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOYW1lZEZsb3coZXJyb3JTdHJpbmcsIGl0LT5nZXQoKSwg
ZG9jdW1lbnROb2RlSWQpKTsKIAotICAgIHJlc3VsdCA9IG5hbWVkRmxvd3MucmVsZWFzZSgpOwor
ICAgIHJlc3VsdCA9IFdURjo6bW92ZShuYW1lZEZsb3dzKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNo
ZWV0KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0xMDAwLDcgKzEwMDMsNyBAQCBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3Ry
aW5nJiBlcnJvcgogCiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVT
aGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCiB7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcjsKKyAgICBhdXRvIG9yaWdpbiA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcjsKICAgICBpZiAocGFn
ZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYWdlU3R5bGVT
aGVldC0+aHJlZigpLmlzRW1wdHkoKSkKICAgICAgICAgb3JpZ2luID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAgICAgZWxzZSBpZiAocGFn
ZVN0eWxlU2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNo
ZWV0LT5vd25lck5vZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2RvY3VtZW50IikKQEAgLTEwMTMsNyAr
MTAxNiw3IEBAIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNw
ZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0CiAgICAgcmV0dXJuIG9yaWdpbjsKIH0K
IAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVs
ZSogc3R5bGVSdWxlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewogICAgIGlmICgh
c3R5bGVSdWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMjcsNyArMTAzMCw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JD
U1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSCiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQg
PyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoY3Nzb21XcmFwcGVyKSA6
IG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NS
dWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSog
cnVsZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAg
IGlmICghcnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDM3LDkgKzEwNDAsOSBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9y
Q1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUgogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0
ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUpIDogbnVsbHB0
cjsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5
Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mIG1hdGNo
ZWRSdWxlcywgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCogZWxlbWVudCkK
K1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1
bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
dWxlTWF0Y2g+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g+OjpjcmVhdGUoKTsKIAogICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
IGNvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIFNl
bGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CkBAIC0x
MDQ5LDcgKzEwNTIsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcAogICAgICAgICBpZiAoIXJ1
bGVPYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4gbWF0Y2hpbmdTZWxlY3RvcnMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBtYXRjaGluZ1Nl
bGVjdG9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAg
ICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCA9IG1hdGNoZWRSdWxlLT5z
ZWxlY3Rvckxpc3QoKTsKICAgICAgICAgbG9uZyBpbmRleCA9IDA7CiAgICAgICAgIGZvciAoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKQEAgLTEwNjAs
MTYgKzEwNjMsMTcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3AKICAgICAgICAgICAgICsraW5k
ZXg7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpSdWxlTWF0Y2g+IG1hdGNoID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0UnVsZShydWxlT2JqZWN0LnJlbGVhc2UoKSkKLSAg
ICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVjdG9ycyhtYXRjaGluZ1NlbGVjdG9ycy5yZWxlYXNl
KCkpOwotICAgICAgICByZXN1bHQtPmFkZEl0ZW0obWF0Y2gucmVsZWFzZSgpKTsKKyAgICAgICAg
YXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUo
KQorICAgICAgICAgICAgLnNldFJ1bGUoV1RGOjptb3ZlKHJ1bGVPYmplY3QpKQorICAgICAgICAg
ICAgLnNldE1hdGNoaW5nU2VsZWN0b3JzKFdURjo6bW92ZShtYXRjaGluZ1NlbGVjdG9ycykpCisg
ICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICByZXN1bHQtPmFkZEl0ZW0oV1RGOjptb3Zl
KG1hdGNoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0
dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJp
YnV0ZXNTdHlsZShFbGVtZW50KiBlbGVtZW50KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0
ZXNTdHlsZShFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBp
ZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KSkKQEAgLTEwODMsMTMgKzEwODcsMTMgQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JD
U1NBZ2VudDo6YnVpbGRPYmplY3RGb3IKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihhdHRyaWJ1dGVTdHlsZS0+aXNNdXRhYmxlKCkpOwogICAgIE11dGFibGVTdHlsZVByb3Bl
cnRpZXMqIG11dGFibGVBdHRyaWJ1dGVTdHlsZSA9IHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVBy
b3BlcnRpZXMqPihhdHRyaWJ1dGVTdHlsZSk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+
IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgp
LCBtdXRhYmxlQXR0cmlidXRlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgbnVs
bHB0cik7CisgICAgUmVmPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3Rv
clN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgbXV0YWJsZUF0dHJpYnV0ZVN0eWxlLT5l
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIG51bGxwdHIpOwogICAgIHJldHVybiBpbnNwZWN0
b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVnaW9uTGlzdCwgaW50IGRvY3VtZW50Tm9kZUlk
KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6UmVnaW9uPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSZWdpb25zKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPE5vZGVMaXN0PiYmIHJlZ2lvbkxpc3QsIGlu
dCBkb2N1bWVudE5vZGVJZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+PiByZWdpb25zID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHJlZ2lvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ2lvbkxpc3QtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb246OlJlZ2lvbk92ZXJzZXQgcmVnaW9uT3ZlcnNl
dDsKQEAgLTExMTEsMjEgKzExMTUsMjIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IEluc3BlY3QKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UmVnaW9uPiByZWdpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJlZ2lvbjo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byByZWdpb24gPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlJlZ2lvbjo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRSZWdpb25PdmVyc2V0
KHJlZ2lvbk92ZXJzZXQpCiAgICAgICAgICAgICAvLyBkb2N1bWVudE5vZGVJZCB3YXMgcHJldmlv
dXNseSBhc3NlcnRlZAotICAgICAgICAgICAgLnNldE5vZGVJZChtX2RvbUFnZW50LT5wdXNoTm9k
ZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCByZWdpb25MaXN0LT5pdGVt
KGkpKSk7CisgICAgICAgICAgICAuc2V0Tm9kZUlkKG1fZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsIHJlZ2lvbkxpc3QtPml0ZW0oaSkpKQor
ICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgICAgICByZWdpb25zLT5hZGRJdGVtKHJlZ2lv
bi5yZWxlYXNlKCkpOworICAgICAgICByZWdpb25zLT5hZGRJdGVtKFdURjo6bW92ZShyZWdpb24p
KTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVnaW9ucy5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdU
Rjo6bW92ZShyZWdpb25zKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgV2ViS2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZs
b3csIGludCBkb2N1bWVudE5vZGVJZCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgV2ViS2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3cs
IGludCBkb2N1bWVudE5vZGVJZCkKIHsKICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGNvbnRlbnRMaXN0
ID0gd2Via2l0TmFtZWRGbG93LT5nZXRDb250ZW50KCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PGludD4+IGNvbnRlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvbnRlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b250ZW50TGlzdC0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAvLyBkb2N1bWVudE5vZGVJZCB3
YXMgcHJldmlvdXNseSBhc3NlcnRlZApAQCAtMTEzNiw3ICsxMTQxLDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm8KICAgICAgICAgLnNldERvY3VtZW50Tm9kZUlkKGRvY3VtZW50Tm9kZUlkKQog
ICAgICAgICAuc2V0TmFtZSh3ZWJraXROYW1lZEZsb3ctPm5hbWUoKS5zdHJpbmcoKSkKICAgICAg
ICAgLnNldE92ZXJzZXQod2Via2l0TmFtZWRGbG93LT5vdmVyc2V0KCkpCi0gICAgICAgIC5zZXRD
b250ZW50KGNvbnRlbnQucmVsZWFzZSgpKQorICAgICAgICAuc2V0Q29udGVudChXVEY6Om1vdmUo
Y29udGVudCkpCiAgICAgICAgIC5zZXRSZWdpb25zKGJ1aWxkQXJyYXlGb3JSZWdpb25zKGVycm9y
U3RyaW5nLCB3ZWJraXROYW1lZEZsb3ctPmdldFJlZ2lvbnMoKSwgZG9jdW1lbnROb2RlSWQpKQog
ICAgICAgICAucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuaAppbmRleCAzZGRjYTliLi5kM2EwMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTExOCwxMyArMTE3LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5
bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4mIHJlc3VsdCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0KSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4
LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJs
ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBydWxlSWQsIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+
JiByZXN1bHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVRleHQoRXJyb3JT
dHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5
VGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mJiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29s
IG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBy
ZXN1bHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdHlsZUlk
LCBpbnQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBhZGRSdWxlKEVycm9yU3RyaW5nJiwgaW50IGNvbnRleHROb2RlSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRTdXBwb3J0ZWRD
U1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4mIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcm
LCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGZv
cmNlZFBzZXVkb0NsYXNzZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBzZXVk
b1N0YXRlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXk+JiYgZm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGdldE5hbWVkRmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1l
bnROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4+JiByZXN1bHQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgpA
QCAtMTUzLDEyICsxNTIsMTIgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBh
c3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gZGV0ZWN0T3JpZ2luKENT
U1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CiAK
LSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRP
YmplY3RGb3JSdWxlKFN0eWxlUnVsZSosIFN0eWxlUmVzb2x2ZXImKTsKLSAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENT
U1N0eWxlUnVsZSopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hl
ZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mLCBTdHlsZVJlc29sdmVy
JiwgRWxlbWVudCopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCopOwotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpSZWdpb24+PiBidWlsZEFycmF5Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYsIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+LCBpbnQgZG9jdW1lbnROb2RlSWQpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+IGJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVy
cm9yU3RyaW5nJiwgV2ViS2l0TmFtZWRGbG93KiwgaW50IGRvY3VtZW50Tm9kZUlkKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1
bGUoU3R5bGVSdWxlKiwgU3R5bGVSZXNvbHZlciYpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mLCBTdHlsZVJlc29sdmVyJiwgRWxlbWVudCopOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZv
ckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50Kik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gYnVpbGRBcnJheUZv
clJlZ2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8Tm9kZUxpc3Q+JiYsIGludCBkb2N1bWVudE5v
ZGVJZCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93PiBi
dWlsZE9iamVjdEZvck5hbWVkRmxvdyhFcnJvclN0cmluZyYsIFdlYktpdE5hbWVkRmxvdyosIGlu
dCBkb2N1bWVudE5vZGVJZCk7CiAKICAgICAvLyBJbnNwZWN0b3JET01BZ2VudDo6RE9NTGlzdGVu
ZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRG9jdW1lbnQoRG9j
dW1lbnQqKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oCmluZGV4IDMyYTYyNDcuLjQxZDU3
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xl
SW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnNvbGVJbnN0cnVtZW50YXRpb24uaApAQCAtMzUsMTUgKzM1LDE0IEBACiAjaW5jbHVkZSAi
U2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaD4K
ICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2Fn
ZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNr
PiBjYWxsU3RhY2ssIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFn
ZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBs
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxs
U3RhY2s+JiYgY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAg
ICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNvdXJjZSwg
dHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOworICAg
ICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNl
LCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgV1RGOjptb3ZlKGNhbGxTdGFjayksIHJlcXVlc3RJZGVu
dGlmaWVyKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJB
TShzb3VyY2UpOwpAQCAtNTUsMTEgKzU0LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlJiBwYWdlLCBNZXNzYWdlU291CiAj
ZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNz
YWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCitpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwg
TWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0cjxJ
bnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JQYWdlKHBhZ2UpKQotICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVu
dGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc3RhdGUsIGFyZ3VtZW50
cywgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc3RhdGUs
IFdURjo6bW92ZShhcmd1bWVudHMpLCByZXF1ZXN0SWRlbnRpZmllcik7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKQEAgLTkxLDExICs5
MCwxMSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VU
b0NvbnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShXb3JrZXJHbG9i
YWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdl
VHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCB1bnNpZ25lZCBs
b25nIHJlcXVlc3RJZGVudGlmaWVyKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9iYWxT
Y29wZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRD
YWxsU3RhY2s+JiYgY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2Nv
cGUod29ya2VyR2xvYmFsU2NvcGUpKQotICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgY2FsbFN0
YWNrLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBXVEY6
Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVzdElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0od29ya2VyR2xvYmFsU2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwpAQCAt
MTI2LDExICsxMjUsMTEgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
ZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiB3b3IKICNlbmRpZgogfQogCi1p
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChQYWdlJiBw
YWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cykKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6Y29uc29sZUNvdW50KFBhZ2UmIHBhZ2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIGNvbnNvbGVD
b3VudEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlLCBhcmd1bWVudHMpOworICAgICAg
ICBjb25zb2xlQ291bnRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgV1RGOjptb3Zl
KGFyZ3VtZW50cykpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTE0OSwxMSArMTQ4LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nKEZyYW1lJiBmcmFtZSwgY29uc3Qg
U3RyCiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
dG9wQ29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+IHN0YWNrKQoraW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIGNv
bnN0IFN0cmluZyYgdGl0bGUsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiBz
dGFjaykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZy
YW1lKSkKLSAgICAgICAgc3RvcENvbnNvbGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBmcmFtZSwgdGl0bGUsIHN0YWNrKTsKKyAgICAgICAgc3RvcENvbnNvbGVUaW1pbmdJbXBsKCpp
bnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgdGl0bGUsIFdURjo6bW92ZShzdGFjaykpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aXRsZSk7CkBA
IC0xNjEsMTIgKzE2MCwxMiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnN0b3BDb25zb2xlVGltaW5nKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaQogI2VuZGlmCiB9CiAK
LWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcChG
cmFtZSYgZnJhbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cykKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVT
dGFtcChGcmFtZSYgZnJhbWUsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBh
cmd1bWVudHMpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAg
ICAgIGNvbnNvbGVUaW1lU3RhbXBJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgYXJn
dW1lbnRzKTsKKyAgICAgICAgY29uc29sZVRpbWVTdGFtcEltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIGZyYW1lLCBXVEY6Om1vdmUoYXJndW1lbnRzKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShmcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50cyk7CkBAIC0xODUsNyArMTg0LDcg
QEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydFByb2ZpbGluZyhQ
YWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSoKICNlbmRpZgogfQogCi1pbmxpbmUgUGFzc1JlZlB0
cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZyhQ
YWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nICZ0aXRsZSkKK2lu
bGluZSBSZWZQdHI8SlNDOjpQcm9maWxlPiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQ
cm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyAm
dGl0bGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBh
Z2UpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCmluZGV4IDJlZDhhZGYuLjhiZjBmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmdldEhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCwgSW5z
cGVjdG9yT3ZlcmxheTo6QwogICAgIG1fb3ZlcmxheS0+Z2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwg
Y29vcmRpbmF0ZVN5c3RlbSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CitS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZv
ckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3ZlcmxheS0+YnVpbGRP
YmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKTsKIH0KQEAgLTQ1NCw5ICs0NTQsOSBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kSW5pdGlhbGl6ZWQoKQogI2VuZGlmCiB9CiAKLVBh
c3NSZWZQdHI8U3RvcHdhdGNoPiBJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0
Y2goKQorUmVmPFN0b3B3YXRjaD4gSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdh
dGNoKCkKIHsKLSAgICByZXR1cm4gbV9leGVjdXRpb25TdG9wd2F0Y2g7CisgICAgcmV0dXJuIG1f
ZXhlY3V0aW9uU3RvcHdhdGNoLmNvcHlSZWYoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5k
ZXggN2M3OGVlNC4uMzhhZWVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRJbmRpY2F0aW5nKGJvb2wpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICBib29s
IGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1VuZGVyVGVzdDsgfQogICAgIHZvaWQg
c2V0SXNVbmRlclRlc3QoYm9vbCBpc1VuZGVyVGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRl
clRlc3Q7IH0KQEAgLTEzMSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdp
bGxDYWxsSW5qZWN0ZWRTY3JpcHRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdURjo6U3RvcHdhdGNoPiBleGVjdXRpb25TdG9wd2F0Y2goKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdh
dGNoKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjsKQEAgLTE1MCw3ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI7CiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwotICAgIFJlZlB0cjxXVEY6OlN0b3B3YXRjaD4gbV9l
eGVjdXRpb25TdG9wd2F0Y2g7CisgICAgUmVmPFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0
b3B3YXRjaDsKICAgICBQYWdlJiBtX3BhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2luc3Bl
Y3RvckNsaWVudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudCogbV9pbnNwZWN0b3JGcm9u
dGVuZENsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IGJiYWNkYzQuLmRhYTBkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHRTaXplID0gMTAw
MDA7CiBzdGF0aWMgY29uc3QgVUNoYXIgZWxsaXBzaXNVQ2hhcltdID0geyAweDIwMjYsIDAgfTsK
IAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3QgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBjb2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQog
ICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwpAQCAtMTMyLDggKzEzMiw5IEBAIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
b2xvck9iamVjdCkKIAogc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5n
JiBmaWVsZE5hbWUsIEluc3BlY3Rvck9iamVjdCogY29uZmlnT2JqZWN0KQogewotICAgIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvbG9yT2JqZWN0ID0gY29uZmlnT2JqZWN0LT5nZXRP
YmplY3QoZmllbGROYW1lKTsKLSAgICByZXR1cm4gcGFyc2VDb2xvcihjb2xvck9iamVjdCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29sb3JPYmplY3Q7CisgICAgY29uZmlnT2JqZWN0
LT5nZXRPYmplY3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7CisgICAgcmV0dXJuIHBhcnNlQ29s
b3IoV1RGOjptb3ZlKGNvbG9yT2JqZWN0KSk7CiB9CiAKIHN0YXRpYyBib29sIHBhcnNlUXVhZChj
b25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkK
QEAgLTU3OSw5ICs1ODAsOSBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkKICAgICAgICAgICAgIGF1dG8gbmV3TWFwID0gc3Rk
OjptYWtlX3VuaXF1ZTxOb2RlVG9JZE1hcD4oKTsKICAgICAgICAgICAgIGRhbmdsaW5nTWFwID0g
bmV3TWFwLmdldCgpOwogICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVUb0lkTWFwcy5hcHBlbmQo
bmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5n
bGluZ01hcCkpOwotICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9k
ZXMoMCwgY2hpbGRyZW4pOworICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNldENo
aWxkTm9kZXMoMCwgV1RGOjptb3ZlKGNoaWxkcmVuKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKHBhcmVudCk7CkBAIC04NzYs
MTUgKzg3NywxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBY2Nlc3NpYmlsaXR5UHJv
cGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaQogICAgIGF4UHJvcGVydGllcyA9
IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMobm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIG5vZGVJZHMsIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQp
Cit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+JiYgbm9kZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1
bHRDb3VudCkKIHsKICAgICAvLyBGSVhNRTogU2VhcmNoIHdvcmtzIHdpdGggbm9kZSBncmFudWxh
cml0eSAtIG51bWJlciBvZiBtYXRjaGVzIHdpdGhpbiBub2RlIGlzIG5vdCBjYWxjdWxhdGVkLgog
ICAgIEluc3BlY3Rvck5vZGVGaW5kZXIgZmluZGVyKHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwog
CiAgICAgaWYgKG5vZGVJZHMpIHsKLSAgICAgICAgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5
PiYgbm9kZUlkc1JlZiA9ICpub2RlSWRzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbm9kZUlkc1JlZi0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBub2RlVmFsdWUgPSBub2RlSWRzUmVmLT5nZXQoaSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBub2RlSWRzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG5vZGVWYWx1ZSA9IG5vZGVJZHMtPmdldChpKTsKICAg
ICAgICAgICAgIGlmICghbm9kZVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcg
PSBBU0NJSUxpdGVyYWwoIkludmFsaWQgbm9kZUlkcyBpdGVtLiIpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTEwNDYsMzcgKzEwNDYsMzcgQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdo
dENvbmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IK
ICAgICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVu
YWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBoaWdobGlnaHRDb25maWcpCit2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgaGlnaGxpZ2h0Q29uZmlnKQogewotICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJp
bmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZy0+Z2V0KCkgOiAw
KTsKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGln
aHRDb25maWcgPyBoaWdobGlnaHRDb25maWcuZ2V0KCkgOiBudWxscHRyKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
Y29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0
IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UXVhZD4oRmxv
YXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RG
Ojptb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwor
ICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEY6Om1vdmUocXVhZCksIGNvbG9yLmNvcHlSZWYoKSwg
b3V0bGluZUNvbG9yLmNvcHlSZWYoKSwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0
bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYmIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5l
Q29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UXVhZD4oKTsKICAgICBpZiAoIXBhcnNlUXVhZChxdWFk
QXJyYXksIHF1YWQuZ2V0KCkpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJJbnZhbGlkIFF1YWQgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaW5u
ZXJIaWdobGlnaHRRdWFkKFdURjo6bW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xvciwgdXNl
UGFnZUNvb3JkaW5hdGVzKTsKKyAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQp
LCBjb2xvci5jb3B5UmVmKCksIG91dGxpbmVDb2xvci5jb3B5UmVmKCksIHVzZVBhZ2VDb29yZGlu
YXRlcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChz
dGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3Is
IGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQog
ewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdobGlnaHRD
b25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcigqY29s
b3IpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKCpv
dXRsaW5lQ29sb3IpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3Io
Y29sb3IuY29weVJlZigpKTsKKyAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0g
cGFyc2VDb2xvcihvdXRsaW5lQ29sb3IuY29weVJlZigpKTsKICAgICBoaWdobGlnaHRDb25maWct
PnVzZVBhZ2VDb29yZGluYXRlcyA9IHVzZVBhZ2VDb29yZGluYXRlcyA/ICp1c2VQYWdlQ29vcmRp
bmF0ZXMgOiBmYWxzZTsKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1
YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGln
aGxpZ2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBj
b25zdCBTdHJpbmcqIG9iamVjdElkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3Qg
U3RyaW5nKiBvYmplY3RJZCkKIHsKICAgICBOb2RlKiBub2RlID0gMDsKICAgICBpZiAobm9kZUlk
KSB7CkBAIC0xMDk4LDE0ICsxMDk4LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zCiAgICAg
bV9vdmVybGF5LT5oaWdobGlnaHROb2RlKG5vZGUsICpoaWdobGlnaHRDb25maWcpOwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKQordm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yKQogewogICAgIEZyYW1lKiBmcmFtZSA9
IG1fcGFnZUFnZW50LT5mcmFtZUZvcklkKGZyYW1lSWQpOwogICAgIGlmIChmcmFtZSAmJiBmcmFt
ZS0+b3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBzdGQ6
Om1ha2VfdW5pcXVlPEhpZ2hsaWdodENvbmZpZz4oKTsKICAgICAgICAgaGlnaGxpZ2h0Q29uZmln
LT5zaG93SW5mbyA9IHRydWU7IC8vIEFsd2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCi0g
ICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoKmNvbG9yKTsKLSAg
ICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoKm91dGxp
bmVDb2xvcik7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3Io
Y29sb3IuY29weVJlZigpKTsKKyAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGlu
ZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yLmNvcHlSZWYoKSk7CiAgICAgICAgIG1fb3Zlcmxh
eS0+aGlnaGxpZ2h0Tm9kZShmcmFtZS0+b3duZXJFbGVtZW50KCksICpoaWdobGlnaHRDb25maWcp
OwogICAgIH0KIH0KQEAgLTEyMjAsNyArMTIyMCw3IEBAIHN0YXRpYyBTdHJpbmcgZG9jdW1lbnRC
YXNlVVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gZG9jdW1lbnQtPmNv
bXBsZXRlVVJMKCIiKS5zdHJpbmcoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9k
ZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JO
b2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAg
IGludCBpZCA9IGJpbmQobm9kZSwgbm9kZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFtZTsKQEAg
LTEyNTMsMTkgKzEyNTMsMjAgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4g
dmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCisgICAgYXV0
byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAg
ICAgLnNldE5vZGVJZChpZCkKICAgICAgICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4o
bm9kZS0+bm9kZVR5cGUoKSkpCiAgICAgICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKICAgICAg
ICAgLnNldExvY2FsTmFtZShsb2NhbE5hbWUpCi0gICAgICAgIC5zZXROb2RlVmFsdWUobm9kZVZh
bHVlKTsKKyAgICAgICAgLnNldE5vZGVWYWx1ZShub2RlVmFsdWUpCisgICAgICAgIC5yZWxlYXNl
KCk7CiAKICAgICBpZiAobm9kZS0+aXNDb250YWluZXJOb2RlKCkpIHsKICAgICAgICAgaW50IG5v
ZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291bnQobm9kZSk7CiAgICAgICAgIHZhbHVlLT5zZXRD
aGlsZE5vZGVDb3VudChub2RlQ291bnQpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBi
dWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKKyAg
ICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKG5v
ZGUsIGRlcHRoLCBub2Rlc01hcCk7CiAgICAgICAgIGlmIChjaGlsZHJlbi0+bGVuZ3RoKCkgPiAw
KQotICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGRyZW4oV1RGOjptb3ZlKGNoaWxkcmVuKSk7CiAgICAg
fQogCiAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewpAQCAtMTI4Miw5ICsxMjgzLDkgQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dS
b290KiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
PiBzaGFkb3dSb290cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2hhZG93Um9vdHMtPmFkZEl0ZW0oYnVpbGRP
YmplY3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7Ci0gICAgICAgICAgICB2YWx1ZS0+c2V0
U2hhZG93Um9vdHMoc2hhZG93Um9vdHMpOworICAgICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jv
b3RzKFdURjo6bW92ZShzaGFkb3dSb290cykpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVEVN
UExBVEVfRUxFTUVOVCkKQEAgLTEzMTcsMjYgKzEzMTgsMjYgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
ck5vZGUKICAgICAgICAgICAgIHZhbHVlLT5zZXRSb2xlKGF4T2JqZWN0LT5jb21wdXRlZFJvbGVT
dHJpbmcoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKHZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRB
dHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmli
dXRlcyhFbGVtZW50KiBlbGVtZW50KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBhdHRyaWJ1dGVzVmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGF0dHJpYnV0ZXNWYWx1ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgIC8vIEdvIHRocm91
Z2ggYWxsIGF0dHJpYnV0ZXMgYW5kIHNlcmlhbGl6ZSB0aGVtLgogICAgIGlmICghZWxlbWVudC0+
aGFzQXR0cmlidXRlcygpKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlLnJlbGVhc2Uo
KTsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShhdHRyaWJ1dGVzVmFsdWUpOwogICAgIGZvciAo
Y29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3Io
KSkgewogICAgICAgICAvLyBBZGQgYXR0cmlidXRlIHBhaXIKICAgICAgICAgYXR0cmlidXRlc1Zh
bHVlLT5hZGRJdGVtKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIGF0dHJp
YnV0ZXNWYWx1ZS0+YWRkSXRlbShhdHRyaWJ1dGUudmFsdWUoKSk7CiAgICAgfQotICAgIHJldHVy
biBhdHRyaWJ1dGVzVmFsdWUucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYXR0cmli
dXRlc1ZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRB
cnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRN
YXAqIG5vZGVzTWFwKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gY2hpbGRyZW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewog
ICAgICAgICAvLyBTcGVjaWFsLWNhc2UgdGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhh
dCBjb250YWluZXIncyBjaGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2Rl
KiBmaXJzdENoaWxkID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7CkBAIC0xMzQ0LDcgKzEzNDUs
NyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvcgogICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0
ZW0oYnVpbGRPYmplY3RGb3JOb2RlKGZpcnN0Q2hpbGQsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAg
ICAgICBtX2NoaWxkcmVuUmVxdWVzdGVkLmFkZChiaW5kKGNvbnRhaW5lciwgbm9kZXNNYXApKTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gY2hpbGRyZW4ucmVsZWFzZSgpOworICAgICAgICBy
ZXR1cm4gV1RGOjptb3ZlKGNoaWxkcmVuKTsKICAgICB9CiAKICAgICBOb2RlKiBjaGlsZCA9IGlu
bmVyRmlyc3RDaGlsZChjb250YWluZXIpOwpAQCAtMTM1NSwxMCArMTM1NiwxMCBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZT4+IEluc3BlY3RvcgogICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZv
ck5vZGUoY2hpbGQsIGRlcHRoLCBub2Rlc01hcCkpOwogICAgICAgICBjaGlsZCA9IGlubmVyTmV4
dFNpYmxpbmcoY2hpbGQpOwogICAgIH0KLSAgICByZXR1cm4gY2hpbGRyZW4ucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUoY2hpbGRyZW4pOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2Rl
KiBub2RlLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwSWQpCitSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RG
b3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lciwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIG5vZGUs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXBJZCkKIHsKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lciA9IHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmxpc3RlbmVyOwogCkBA
IC0xMzg2LDI5ICsxMzg3LDMxIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVyPiB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKCkKKyAgICBhdXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVyOjpjcmVhdGUoKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5z
ZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAg
IC5zZXRJc0F0dHJpYnV0ZShldmVudExpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQogICAgICAgICAu
c2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSkpCi0gICAgICAgIC5zZXRIYW5k
bGVyQm9keShib2R5KTsKKyAgICAgICAgLnNldEhhbmRsZXJCb2R5KGJvZHkpCisgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgaWYgKG9iamVjdEdyb3VwSWQgJiYgaGFuZGxlciAmJiBzdGF0ZSkgewog
ICAgICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihzdGF0ZSk7CiAgICAgICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICAgICAgdmFsdWUtPnNldEhhbmRsZXIoaW5qZWN0
ZWRTY3JpcHQud3JhcE9iamVjdChEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwg
aGFuZGxlciksICpvYmplY3RHcm91cElkKSk7CiAgICAgfQogICAgIGlmICghc2NyaXB0SUQuaXNO
dWxsKCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRp
b246OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gbG9jYXRpb24gPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0U2NyaXB0SWQo
c2NyaXB0SUQpCi0gICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKLSAgICAg
ICAgdmFsdWUtPnNldExvY2F0aW9uKGxvY2F0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAu
c2V0TGluZU51bWJlcihsaW5lTnVtYmVyKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAg
ICAgdmFsdWUtPnNldExvY2F0aW9uKFdURjo6bW92ZShsb2NhdGlvbikpOwogICAgICAgICBpZiAo
IXNvdXJjZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgdmFsdWUtPnNldFNvdXJjZU5hbWUo
c291cmNlTmFtZSk7CiAgICAgfQotICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7CisgICAgcmV0
dXJuIFdURjo6bW92ZSh2YWx1ZSk7CiB9CiAgICAgCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
cm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dD4gYXhPYmplY3QsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgY2hp
bGROb2RlSWRzKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlD
aGlsZHJlbihSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4mJiBheE9iamVjdCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+JiYgY2hpbGROb2RlSWRzKQogewogICAgIGNv
bnN0IGF1dG8mIGNoaWxkcmVuID0gYXhPYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgaWYgKCFjaGls
ZHJlbi5zaXplKCkpCkBAIC0xNDIxLDExICsxNDI0LDExIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqCiAgICAgICAgIGlmIChOb2RlKiBjaGlsZE5vZGUgPSBjaGlsZE9iamVjdC0+bm9kZSgpKQog
ICAgICAgICAgICAgY2hpbGROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
Y2hpbGROb2RlKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByb2Nlc3NBY2Nlc3NpYmls
aXR5Q2hpbGRyZW4oY2hpbGRPYmplY3QsIGNoaWxkTm9kZUlkcyk7CisgICAgICAgICAgICBwcm9j
ZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKGNoaWxkT2JqZWN0LmNvcHlSZWYoKSwgY2hpbGROb2Rl
SWRzLmNvcHlSZWYoKSk7CiAgICAgfQogfQogICAgIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKiBub2RlKQorUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3Bl
Y3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUq
IG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmICghbm9kZSkKQEAgLTE0MzYsNyAr
MTQzOSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6CiAKICAgICBOb2RlKiBhY3RpdmVEZXNj
ZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAgICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZCBjaGVj
a2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Q2hlY2tlZDo6RmFsc2U7CisgICAgYXV0byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+IGNoaWxkTm9kZUlkczsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4gY29udHJvbGxlZE5vZGVJZHM7CiAg
ICAgYm9vbCBleGlzdHMgPSBmYWxzZTsKQEAgLTE0NDYsMTIgKzE0NDksMTIgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNw
ZWN0b3JET01BZ2VudDoKICAgICBib29sIGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9y
ZWQgPSB0cnVlOwogICAgIGJvb2wgaWdub3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQgaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OkZhbHNlOworICAgIGF1dG8gaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgIGJvb2wg
aGlkZGVuID0gZmFsc2U7CiAgICAgU3RyaW5nIGxhYmVsOwogICAgIGJvb2wgbGl2ZVJlZ2lvbkF0
b21pYyA9IGZhbHNlOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJp
bmc+PiBsaXZlUmVnaW9uUmVsZXZhbnQ7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1cyBsaXZlUmVnaW9uU3RhdHVz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2
ZVJlZ2lvblN0YXR1czo6T2ZmOworICAgIGF1dG8gbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0
dXM6Ok9mZjsKICAgICBOb2RlKiBtb3VzZUV2ZW50Tm9kZSA9IG51bGxwdHI7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+IG93bmVkTm9kZUlkczsKICAgICBOb2Rl
KiBwYXJlbnROb2RlID0gbnVsbHB0cjsKQEAgLTE0OTIsNyArMTQ5NSw3IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBwcm9jZXNzQWNjZXNzaWJpbGl0
eUNoaWxkcmVuKGF4T2JqZWN0LCBjaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgcHJvY2Vzc0Fj
Y2Vzc2liaWxpdHlDaGlsZHJlbihheE9iamVjdCwgV1RGOjptb3ZlKGNoaWxkTm9kZUlkcykpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXhPYmplY3QtPnN1cHBvcnRzQVJJQUNvbnRy
b2xzKCkpIHsKICAgICAgICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVt
ZW50czsKQEAgLTE2MjIsMTEgKzE2MjUsMTIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDoKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQorICAgIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2YWx1ZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXRFeGlzdHMoZXhpc3RzKQogICAgICAgICAuc2V0TGFiZWwobGFiZWwpCiAgICAgICAg
IC5zZXRSb2xlKHJvbGUpCi0gICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChub2RlKSk7CisgICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rl
KSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmIChleGlzdHMpIHsKICAgICAgICAgaWYg
KGFjdGl2ZURlc2NlbmRhbnROb2RlKQpAQCAtMTY3OSw3ICsxNjgzLDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0
b3JET01BZ2VudDoKICAgICAgICAgICAgIHZhbHVlLT5zZXRTZWxlY3RlZENoaWxkTm9kZUlkcyhz
ZWxlY3RlZENoaWxkTm9kZUlkcyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHZhbHVlLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHZhbHVlKTsKIH0KIAogTm9kZSogSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyRmlyc3RDaGlsZChOb2RlKiBub2RlKQpAQCAtMTc1NCwxMCArMTc1OCwxMCBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRMb2FkKERvY3VtZW50KiBkb2N1bWVu
dCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlUmVtb3ZlZChwYXJlbnRJZCwg
ZnJhbWVPd25lcklkKTsKICAgICB1bmJpbmQoZnJhbWVPd25lciwgJm1fZG9jdW1lbnROb2RlVG9J
ZE1hcCk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1
ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lk
TWFwKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1
aWxkT2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsK
ICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFtZU93
bmVyKTsKICAgICBpbnQgcHJldklkID0gcHJldmlvdXNTaWJsaW5nID8gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwgdmFsdWUucmVsZWFzZSgpKTsK
KyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHBy
ZXZJZCwgV1RGOjptb3ZlKHZhbHVlKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRp
ZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKQEAgLTE3ODQsOCArMTc4OCw4IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8g
Q2hpbGRyZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hp
bGQuCiAgICAgICAgIE5vZGUqIHByZXZTaWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5v
ZGUpOwogICAgICAgICBpbnQgcHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRv
SWRNYXAuZ2V0KHByZXZTaWJsaW5nKSA6IDA7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAm
bV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNo
aWxkTm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIHZhbHVlLnJlbGVhc2UoKSk7CisgICAg
ICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmpl
Y3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdU
Rjo6bW92ZSh2YWx1ZSkpOwogICAgIH0KIH0KIApAQCAtMTg0OSw3ICsxODUzLDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25z
dCBBdG9taWNTdHJpbmcmIG4KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1
dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykKIHsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4gbm9kZUlkcyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOworICAgIGF1dG8gbm9kZUlkcyA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIHNpemUgPSBlbGVtZW50cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRzLmF0KGkpOwogICAgICAgICBpbnQgaWQgPSBi
b3VuZE5vZGVJZChlbGVtZW50KTsKQEAgLTE4NjEsNyArMTg2NSw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgZWxlbWVuCiAgICAgICAgICAgICBtX2RvbUxpc3RlbmVyLT5kaWRNb2RpZnlET01BdHRyKGVs
ZW1lbnQpOwogICAgICAgICBub2RlSWRzLT5hZGRJdGVtKGlkKTsKICAgICB9Ci0gICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmlubGluZVN0eWxlSW52YWxpZGF0ZWQobm9kZUlkcy5yZWxlYXNlKCkp
OworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbmxpbmVTdHlsZUludmFsaWRhdGVkKFdURjo6
bW92ZShub2RlSWRzKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRh
dGFNb2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQpAQCAtMTk4NCw3ICsxOTg4
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRl
bmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLAogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50
OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQorUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXApCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCmluZGV4IDUzMDUwNTYuLjQxMmI3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMzIsMjEgKzEzMiwyMSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRFdmVudExpc3Rl
bmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBXVEY6OlN0cmluZyog
b2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllcz4mIGF4UHJvcGVydGllcykgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdoaXRl
c3BhY2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
Piogbm9kZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiYmIG5vZGVJZHMsIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZXNvbHZlTm9kZShFcnJv
clN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiwgaW50IG5v
ZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiByZXN1bHQp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JT
dHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4qIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldElu
c3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwdXNo
Tm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGlu
dCogbm9kZUlkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcHVzaE5vZGVCeUJhY2tlbmRJ
ZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBCYWNrZW5kTm9kZUlkLCBpbnQqIG5vZGVJZCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VCYWNrZW5kTm9kZUlkcyhFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgbm9kZUdyb3VwKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBo
aWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNv
bnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGhpZ2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheT4mIHF1YWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRs
aW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9k
ZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
aGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYm
IG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIHF1YWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5h
dGVzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0Tm9kZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBoaWdobGlnaHRD
b25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElkKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
JiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxp
bmVDb2xvcikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5n
JiwgaW50IG5vZGVJZCwgaW50IHRhcmdldE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQs
IGludCogbmV3Tm9kZUlkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdW5kbyhFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqKTsKIAotICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXNvbHZlTm9kZShO
b2RlKiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSosIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXApOwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygpOwogICAg
IHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2ln
bmVkIG1vZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CkBAIC0yMzAsMjEg
KzIzMCwyMCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUqLCBpbnQg
dHlwZSk7CiAgICAgdm9pZCB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogcm9vdCwgdWlu
dDMyX3Qgcm9vdE1hc2ssIGJvb2wgdmFsdWUpOwotICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01F
dmVudChOb2RlKiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRlc2NyaXB0aW9uKTsKLQotICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBidWlsZE9iamVjdEZv
ck5vZGUoTm9kZSosIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqKTsKLSAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0
cmlidXRlcyhFbGVtZW50Kik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFp
bmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCk7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlz
dGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiwgY29uc3QgU3Ry
aW5nKiBvYmplY3RHcm91cElkKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0
eVByb3BlcnRpZXMoTm9kZSopOwotICAgIHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJl
bihQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8aW50Pj4mKTsKKworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+IGJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCop
OworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBidWlsZEFycmF5
Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCopOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9y
Q29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcj4gYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwSWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzKE5vZGUqKTsKKyAgICB2b2lkIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+JiYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxpbnQ+PiYmKTsKICAgICAKICAgICBOb2RlKiBub2RlRm9yUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpOwogICAgIE5vZGUqIG5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElk
KTsKIAogICAgIHZvaWQgZGlzY2FyZEJpbmRpbmdzKCk7CiAKLSAgICB2b2lkIGlubmVySGlnaGxp
Z2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4qIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVz
KTsKKyAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFk
PiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25z
dCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpOwogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBt
X3BhZ2VBZ2VudDsKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNzgyNmE5My4uZGQ4ZjUyMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50LmNwcApAQCAtMTcwLDkgKzE3MCw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluCiB2
b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9k
ZSYgbm9kZSkKIHsKICAgICBpZiAoaGFzQnJlYWtwb2ludCgmbm9kZSwgQXR0cmlidXRlTW9kaWZp
ZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoJm5v
ZGUsIEF0dHJpYnV0ZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERp
c3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBBdHRyaWJ1dGVNb2RpZmllZCwg
ZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQ
cm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwg
V1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogICAgIH0KIH0KIApAQCAtMjcwLDkgKzI3MCw5IEBAIHZv
aWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGluCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6Ondp
bGxJbnNlcnRET01Ob2RlKE5vZGUmIHBhcmVudCkKIHsKICAgICBpZiAoaGFzQnJlYWtwb2ludCgm
cGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGRlc2Ny
aXB0aW9uRm9yRE9NRXZlbnQoJnBhcmVudCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlLCBldmVudERh
dGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxl
YXNlKCkpOworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KHBhcmVu
dCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlLCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uOjpET00sIFdURjo6bW92ZShldmVudERhdGEpKTsKICAgICB9CiB9CiAKQEAg
LTI4MCwzOSArMjgwLDM5IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJl
bW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKIHsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmbm9kZSk7CiAgICAgaWYgKGhhc0JyZWFrcG9p
bnQoJm5vZGUsIE5vZGVSZW1vdmVkKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNjcmlw
dGlvbkZvckRPTUV2ZW50KCZub2RlLCBOb2RlUmVtb3ZlZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQo
KSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVn
Z2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7
CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJl
bW92ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQt
PmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
OjpET00sIFdURjo6bW92ZShldmVudERhdGEpKTsKICAgICB9IGVsc2UgaWYgKHBhcmVudE5vZGUg
JiYgaGFzQnJlYWtwb2ludChwYXJlbnROb2RlLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoJm5vZGUsIFN1YnRyZWVNb2Rp
ZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246
OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0
aW9uRm9yRE9NRXZlbnQobm9kZSwgU3VidHJlZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdl
dCgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVi
dWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEY6Om1vdmUoZXZlbnREYXRh
KSk7CiAgICAgfQogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2Rp
ZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoJmVs
ZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBkZXNj
cmlwdGlvbkZvckRPTUV2ZW50KCZlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2
ZW50RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKElu
c3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRh
LnJlbGVhc2UoKSk7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQo
ZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOworICAg
ICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURjo6bW92ZShldmVudERhdGEpKTsKICAgICB9
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01F
dmVudChOb2RlKiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIElu
c3BlY3Rvck9iamVjdCogZGVzY3JpcHRpb24pCit2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSYgdGFyZ2V0LCBpbnQgYnJlYWtwb2ludFR5
cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3JPYmplY3QmIGRlc2NyaXB0aW9uKQogewotICAg
IEFTU0VSVChoYXNCcmVha3BvaW50KHRhcmdldCwgYnJlYWtwb2ludFR5cGUpKTsKKyAgICBBU1NF
UlQoaGFzQnJlYWtwb2ludCgmdGFyZ2V0LCBicmVha3BvaW50VHlwZSkpOwogCi0gICAgTm9kZSog
YnJlYWtwb2ludE93bmVyID0gdGFyZ2V0OworICAgIE5vZGUqIGJyZWFrcG9pbnRPd25lciA9ICZ0
YXJnZXQ7CiAgICAgaWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRhYmxlRE9NQnJl
YWtwb2ludFR5cGVzTWFzaykgewogICAgICAgICAvLyBGb3IgaW5oZXJpdGFibGUgYnJlYWtwb2lu
dCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBub2RlIHRo
YXQgb3ducyBhIGJyZWFrcG9pbnQuCiAgICAgICAgIC8vIFRhcmdldCBub2RlIG1heSBiZSB1bmtu
b3duIHRvIGZyb250ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3QuCi0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHRhcmdldE5v
ZGVPYmplY3QgPSBtX2RvbUFnZW50LT5yZXNvbHZlTm9kZSh0YXJnZXQsIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnNl
dFZhbHVlKCJ0YXJnZXROb2RlIiwgdGFyZ2V0Tm9kZU9iamVjdCk7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHRhcmdldE5vZGVPYmpl
Y3QgPSBtX2RvbUFnZW50LT5yZXNvbHZlTm9kZSgmdGFyZ2V0LCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldFZhbHVl
KCJ0YXJnZXROb2RlIiwgdGFyZ2V0Tm9kZU9iamVjdCk7CiAKICAgICAgICAgLy8gRmluZCBicmVh
a3BvaW50IG93bmVyIG5vZGUuCiAgICAgICAgIGlmICghaW5zZXJ0aW9uKQotICAgICAgICAgICAg
YnJlYWtwb2ludE93bmVyID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSh0YXJn
ZXQpOworICAgICAgICAgICAgYnJlYWtwb2ludE93bmVyID0gSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVyUGFyZW50Tm9kZSgmdGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lcik7
CiAgICAgICAgIHdoaWxlICghKG1fZG9tQnJlYWtwb2ludHMuZ2V0KGJyZWFrcG9pbnRPd25lcikg
JiAoMSA8PCBicmVha3BvaW50VHlwZSkpKSB7CiAgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2Rl
ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZShicmVha3BvaW50T3duZXIpOwpA
QCAtMzIyLDEzICszMjIsMTMgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNj
cmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgaW50IGJyZWFrcG8KICAgICAgICAgfQog
CiAgICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9PSBTdWJ0cmVlTW9kaWZpZWQpCi0gICAgICAg
ICAgICBkZXNjcmlwdGlvbi0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgaW5zZXJ0aW9uKTsKKyAg
ICAgICAgICAgIGRlc2NyaXB0aW9uLnNldEJvb2xlYW4oImluc2VydGlvbiIsIGluc2VydGlvbik7
CiAgICAgfQogCiAgICAgaW50IGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IG1fZG9tQWdlbnQtPmJv
dW5kTm9kZUlkKGJyZWFrcG9pbnRPd25lcik7CiAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lck5v
ZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24tPnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRP
d25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24tPnNldFN0cmluZygidHlwZSIsIGRvbVR5cGVO
YW1lKGJyZWFrcG9pbnRUeXBlKSk7CisgICAgZGVzY3JpcHRpb24uc2V0SW50ZWdlcigibm9kZUlk
IiwgYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKKyAgICBkZXNjcmlwdGlvbi5zZXRTdHJpbmcoInR5
cGUiLCBkb21UeXBlTmFtZShicmVha3BvaW50VHlwZSkpOwogfQogCiBib29sIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgaW50IHR5cGUpCkBAIC0z
NjYsMTIgKzM2NiwxMiBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnBhdXNlT25O
YXRpdmVFdmVudElmTmVlZGVkKGJvb2wgaXNET01FdmVudCwgY29ucwogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnRE
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBldmVudERhdGEtPnNldFN0cmlu
ZygiZXZlbnROYW1lIiwgZnVsbEV2ZW50TmFtZSk7CiAgICAgaWYgKHN5bmNocm9ub3VzKQotICAg
ICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFdmVudExpc3RlbmVyLCBldmVudERhdGEucmVsZWFzZSgp
KTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3ZlKGV2
ZW50RGF0YSkpOwogICAgIGVsc2UKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBh
dXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb246OkV2ZW50TGlzdGVuZXIsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3ZlKGV2
ZW50RGF0YSkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFhIUkJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKQEAgLTQxMSwxMCArNDEx
LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVx
dWVzdChjb25zdCBTdHJpbmcmIHVybCkKICAgICBpZiAoYnJlYWtwb2ludFVSTC5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBl
dmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGV2ZW50RGF0YS0+c2V0
U3RyaW5nKCJicmVha3BvaW50VVJMIiwgYnJlYWtwb2ludFVSTCk7CiAgICAgZXZlbnREYXRhLT5z
ZXRTdHJpbmcoInVybCIsIHVybCk7Ci0gICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0o
SW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6WEhSLCBldmVudERh
dGEucmVsZWFzZSgpKTsKKyAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpYSFIsIFdURjo6bW92ZShldmVu
dERhdGEpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpjbGVhcigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuaAppbmRleCA1NTg3MzM3Li5jNjliM2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgKQEAgLTkyLDcgKzkyLDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoKSBvdmVycmlkZTsKICAgICB2b2lk
IGRpc2FibGUoKTsKIAotICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJn
ZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KiBkZXNjcmlwdGlvbik7CisgICAgdm9pZCBkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KE5vZGUmIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIGRlc2NyaXB0aW9uKTsKICAgICB2b2lkIHVwZGF0ZVN1YnRy
ZWVCcmVha3BvaW50cyhOb2RlKiwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KTsKICAgICBi
b29sIGhhc0JyZWFrcG9pbnQoTm9kZSosIGludCB0eXBlKTsKICAgICB2b2lkIGRpc2NhcmRCaW5k
aW5ncygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcAppbmRleCBkN2M1ZWEzLi44MTEzYzU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAt
OTQsMzQgKzk0LDM0IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nJikKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
Pj4mIGl0ZW1zKQordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJ
dGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykKIHsKICAgICBGcmFtZSogZnJh
bWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJl
YShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVh
PiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLmNv
cHlSZWYoKSwgZnJhbWUpOwogICAgIGlmICghc3RvcmFnZUFyZWEpIHsKICAgICAgICAgZXJyb3JT
dHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vIFN0b3JhZ2VBcmVhIGZvciBnaXZlbiBzdG9yYWdlSWQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4gc3RvcmFnZUl0
ZW1zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj46OmNyZWF0ZSgpOworICAgIGF1dG8gc3RvcmFnZUl0ZW1zID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj46OmNy
ZWF0ZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5n
dGgoKTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBrZXkgPSBzdG9yYWdlQXJlYS0+a2V5KGkpOwog
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBzdG9yYWdlQXJlYS0+aXRlbShrZXkpOwogCi0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBlbnRyeSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGVu
dHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAg
ICAgIGVudHJ5LT5hZGRJdGVtKGtleSk7CiAgICAgICAgIGVudHJ5LT5hZGRJdGVtKHZhbHVlKTsK
LSAgICAgICAgc3RvcmFnZUl0ZW1zLT5hZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7CisgICAgICAg
IHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShXVEY6Om1vdmUoZW50cnkpKTsKICAgICB9CiAKLSAgICBp
dGVtcyA9IHN0b3JhZ2VJdGVtcy5yZWxlYXNlKCk7CisgICAgaXRlbXMgPSBXVEY6Om1vdmUoc3Rv
cmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0
b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAg
RnJhbWUqIGZyYW1lOwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5k
U3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOworICAgIFJlZlB0cjxT
dG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0
b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1lKTsKICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CiAgICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJTdG9yYWdlIG5vdCBmb3VuZCIpOwogICAg
ICAgICByZXR1cm47CkBAIC0xMzMsMTAgKzEzMywxMCBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dAogICAgICAgICBlcnJvclN0cmluZyA9IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihRVU9UQV9F
WENFRURFRF9FUlIpLm5hbWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpy
ZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQordm9pZCBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQs
IGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3Rv
cmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9y
YWdlSWQsIGZyYW1lKTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmlu
ZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQuY29weVJlZigpLCBmcmFtZSk7CiAg
ICAgaWYgKCFzdG9yYWdlQXJlYSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJh
bCgiU3RvcmFnZSBub3QgZm91bmQiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3LDExICsxNTcs
MTIgQEAgU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2Uq
IHN0b3JhZ2UpCiAgICAgcmV0dXJuIHN0b3JhZ2VJZChzZWN1cml0eU9yaWdpbi5nZXQoKSwgaXNM
b2NhbFN0b3JhZ2UpLT50b0pTT05TdHJpbmcoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2Fs
U3RvcmFnZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdl
SWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKIHsKICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCi0gICAgICAg
IC5zZXRJc0xvY2FsU3RvcmFnZShpc0xvY2FsU3RvcmFnZSkucmVsZWFzZSgpOworICAgICAgICAu
c2V0SXNMb2NhbFN0b3JhZ2UoaXNMb2NhbFN0b3JhZ2UpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VF
dmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3Ry
aW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbiwgUGFnZSopCkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYg
a2V5LCBjb24KICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBk
YXRlZChpZCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdl
SWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUpCitSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0
RnJhbWUpCiB7CiAgICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luOwogICAgIGJvb2wgaXNMb2NhbFN0
b3JhZ2UgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuaAppbmRleCA2ZmRiMTlkLi4zNjFiNjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC02
MywxOSArNjMsMTkgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQu
CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+PiYgaXRlbXMpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJp
bmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlk
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldERP
TVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBz
dG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKIAogICAgIC8vIENhbGxlZCBm
cm9tIHRoZSBpbmplY3RlZCBzY3JpcHQuCiAgICAgU3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlKik7
Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdl
SWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3Jh
Z2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOwogCiAgICAgLy8gQ2Fs
bGVkIGZyb20gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkaWREaXNwYXRjaERP
TVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFn
ZSopOwogCiBwcml2YXRlOgotICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdl
QXJlYShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mLCBGcmFtZSomKTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiwg
RnJhbWUqJik7CiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6Okluc3BlY3RvckRPTVN0b3JhZ2VGcm9udGVuZERpc3Bh
dGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IGQ1YTM5NjguLmI0NzQ5ODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5jcHAKQEAgLTU4LDE5ICs1OCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVz
cGFjZSB7CiAKLXZvaWQgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNr
KiByZXF1ZXN0Q2FsbGJhY2ssIFNRTEVycm9yKiBlcnJvcikKK3ZvaWQgcmVwb3J0VHJhbnNhY3Rp
b25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2ssIFNRTEVycm9yKiBl
cnJvcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiBlcnJvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGVycm9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yOjpjcmVhdGUoKQogICAgICAgICAuc2V0TWVzc2FnZShlcnJvci0+bWVzc2FnZSgp
KQotICAgICAgICAuc2V0Q29kZShlcnJvci0+Y29kZSgpKTsKLSAgICByZXF1ZXN0Q2FsbGJhY2st
PnNlbmRTdWNjZXNzKG51bGxwdHIsIG51bGxwdHIsIGVycm9yT2JqZWN0LnJlbGVhc2UoKSk7Cisg
ICAgICAgIC5zZXRDb2RlKGVycm9yLT5jb2RlKCkpCisgICAgICAgIC5yZWxlYXNlKCk7CisgICAg
cmVxdWVzdENhbGxiYWNrLnNlbmRTdWNjZXNzKG51bGxwdHIsIG51bGxwdHIsIFdURjo6bW92ZShl
cnJvck9iamVjdCkpOwogfQogCiBjbGFzcyBTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBTUUxT
dGF0ZW1lbnRDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhdGVt
ZW50Q2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVz
dENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShSZWY8
RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3RhdGVtZW50Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0YXRlbWVudENhbGxiYWNrKFdURjo6bW92ZShy
ZXF1ZXN0Q2FsbGJhY2spKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+U3RhdGVtZW50Q2FsbGJh
Y2soKSB7IH0KQEAgLTc5LDU3ICs4MCw2MCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBTUUxS
ZXN1bHRTZXRSb3dMaXN0KiByb3dMaXN0ID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gY29sdW1uTmFtZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVh
dGUoKTsKICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvbHVtbnMgPSByb3dMaXN0LT5j
b2x1bW5OYW1lcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbnMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBjb2x1bW5OYW1lcy0+YWRkSXRlbShjb2x1bW5zW2ldKTsK
IAotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFs
dWU+PiB2YWx1ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT46
OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHZhbHVlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3RvclZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxTUUxW
YWx1ZT4mIGRhdGEgPSByb3dMaXN0LT52YWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBkYXRhLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBTUUxWYWx1ZSYg
dmFsdWUgPSByb3dMaXN0LT52YWx1ZXMoKVtpXTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWU7CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6IHZhbHVlcy0+YWRk
SXRlbShJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZS5zdHJpbmcoKSkpOyBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bWJlclZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlLm51bWJlcigpKSk7IGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVsbFZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9y
VmFsdWU6Om51bGwoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5n
VmFsdWU6IGluc3BlY3RvclZhbHVlID0gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUuc3Ry
aW5nKCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bWJlclZhbHVlOiBp
bnNwZWN0b3JWYWx1ZSA9IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZS5udW1iZXIo
KSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVsbFZhbHVlOiBpbnNwZWN0
b3JWYWx1ZSA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7IGJyZWFrOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKGluc3Bl
Y3RvclZhbHVlKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRT
dWNjZXNzKGNvbHVtbk5hbWVzLnJlbGVhc2UoKSwgdmFsdWVzLnJlbGVhc2UoKSwgbnVsbHB0cik7
CisgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUoY29sdW1u
TmFtZXMpLCBXVEY6Om1vdmUodmFsdWVzKSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTdGF0ZW1lbnRDYWxsYmFjayhQYXNzUmVmUHRyPEV4
ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQotICAgICAgICA6IG1fcmVxdWVzdENh
bGxiYWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0gICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFj
az4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgU3RhdGVtZW50Q2FsbGJhY2soUmVmPEV4ZWN1dGVT
UUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJh
Y2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpIHsgfQorICAgIFJlZjxFeGVjdXRlU1FMQ2Fs
bGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogY2xhc3MgU3RhdGVtZW50RXJyb3JDYWxs
YmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0
cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPFN0
YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNyZWF0ZShSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhdGVt
ZW50RXJyb3JDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU3RhdGVtZW50RXJyb3JDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNr
KSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgflN0YXRlbWVudEVycm9yQ2FsbGJhY2soKSB7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9y
KiBlcnJvcikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVk
KG1fcmVxdWVzdENhbGxiYWNrLmdldCgpLCBlcnJvcik7CisgICAgICAgIHJlcG9ydFRyYW5zYWN0
aW9uRmFpbGVkKG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSwgZXJyb3IpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsgIAogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrKFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCi0gICAg
ICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSB7IH0KLSAgICBSZWZQdHI8
RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAg
ICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSB7IH0K
KyAgICBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIGNs
YXNzIFRyYW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgU1FMVHJhbnNhY3Rpb25DYWxsYmFjayB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25DYWxsYmFjaz4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxs
YmFjaz4gcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8VHJhbnNhY3Rpb25DYWxsYmFj
az4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBSZWY8RXhlY3V0ZVNRTENhbGxi
YWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVHJhbnNhY3Rpb25DYWxsYmFjayhzcWxTdGF0ZW1lbnQsIHJlcXVlc3RDYWxsYmFjaykpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2FjdGlvbkNhbGxiYWNrKHNxbFN0YXRl
bWVudCwgV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IH5UcmFuc2FjdGlvbkNhbGxiYWNrKCkgeyB9CkBAIC0xNDAsMjQgKzE0NCwyNCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBWZWN0b3I8U1FMVmFsdWU+IHNx
bFZhbHVlczsKLSAgICAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayhT
dGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrLmdldCgpKSk7Ci0gICAg
ICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShtX3JlcXVlc3RDYWxsYmFjay5nZXQoKSkpOwotICAg
ICAgICB0cmFuc2FjdGlvbi0+ZXhlY3V0ZVNRTChtX3NxbFN0YXRlbWVudCwgc3FsVmFsdWVzLCBj
YWxsYmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICAgICAgUmVmPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayhTdGF0ZW1l
bnRDYWxsYmFjazo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSkpOworICAgICAg
ICBSZWY8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayhTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrOjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSk7CisgICAg
ICAgIHRyYW5zYWN0aW9uLT5leGVjdXRlU1FMKG1fc3FsU3RhdGVtZW50LCBzcWxWYWx1ZXMsIFdU
Rjo6bW92ZShjYWxsYmFjayksIFdURjo6bW92ZShlcnJvckNhbGxiYWNrKSwgSUdOT1JFX0VYQ0VQ
VElPTik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIHByaXZhdGU6Ci0gICAgVHJhbnNh
Y3Rpb25DYWxsYmFjayhjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgUGFzc1JlZlB0cjxFeGVj
dXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBUcmFuc2FjdGlvbkNhbGxiYWNr
KGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBtX3NxbFN0YXRlbWVudChzcWxTdGF0ZW1lbnQpCi0g
ICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSB7IH0KKyAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9CiAgICAg
U3RyaW5nIG1fc3FsU3RhdGVtZW50OwotICAgIFJlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1f
cmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENh
bGxiYWNrOwogfTsKIAogY2xhc3MgVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFeGVjdXRlU1FM
Q2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaz4gY3JlYXRlKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgflRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQpAQCAt
MTY4LDE2ICsxNzIsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBw
cml2YXRlOgotICAgIFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPEV4ZWN1dGVT
UUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNr
KHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0gICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9y
ZXF1ZXN0Q2FsbGJhY2s7CisgICAgVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKFJlZjxFeGVjdXRl
U1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAgICAgICA6IG1fcmVxdWVzdENhbGxi
YWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSB7IH0KKyAgICBSZWY8RXhlY3V0ZVNRTENh
bGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIGNsYXNzIFRyYW5zYWN0aW9uU3VjY2Vz
c0NhbGxiYWNrIDogcHVibGljIFZvaWRDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2s+IGNyZWF0ZSgpCisgICAgc3RhdGlj
IFJlZjxUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjaz4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgflRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrKCkgeyB9CkBA
IC0yNzIsMTAgKzI3Niw4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJh
c2VUYWJsZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyCiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFBhc3NSZWZQdHI8RXhl
Y3V0ZVNRTENhbGxiYWNrPiBwcnBSZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQogewotICAgIFJlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxs
YmFjayA9IHBycFJlcXVlc3RDYWxsYmFjazsKLQogICAgIGlmICghbV9lbmFibGVkKSB7CiAgICAg
ICAgIHJlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkRhdGFiYXNlIGFnZW50IGlzIG5vdCBl
bmFibGVkIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI4NywxMCArMjg5LDEwIEBAIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJZCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjayhUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUo
cXVlcnksIHJlcXVlc3RDYWxsYmFjay5nZXQoKSkpOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2soVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpj
cmVhdGUocmVxdWVzdENhbGxiYWNrLmdldCgpKSk7Ci0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4g
c3VjY2Vzc0NhbGxiYWNrKFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrOjpjcmVhdGUoKSk7Ci0g
ICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFj
ay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCkpOworICAgIFJlZjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjayhUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUocXVl
cnksIHJlcXVlc3RDYWxsYmFjay5nZXQoKSkpOworICAgIFJlZjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2soVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUo
cmVxdWVzdENhbGxiYWNrLmdldCgpKSk7CisgICAgUmVmPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrKFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrOjpjcmVhdGUoKSk7CisgICAgZGF0YWJh
c2UtPnRyYW5zYWN0aW9uKFdURjo6bW92ZShjYWxsYmFjayksIFdURjo6bW92ZShlcnJvckNhbGxi
YWNrKSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjaykpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJhc2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAppbmRleCA3N2Vm
ZWRmLi4zOGUzZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFz
ZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgbmFtZXMpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxs
YmFjaz4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhl
Y3V0ZVNRTENhbGxiYWNrPiYmKSBvdmVycmlkZTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBp
bmplY3RlZCBzY3JpcHQuCiAgICAgU3RyaW5nIGRhdGFiYXNlSWQoRGF0YWJhc2UqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1l
bnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5z
dHJ1bWVudGF0aW9uLmgKaW5kZXggZDZjYjYyMy4uY2RlYzNhYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0
aW9uLmgKQEAgLTM4LDExICszOCwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkT3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBSZWZQdHI8RGF0YWJhc2U+JiYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIGRp
ZE9wZW5EYXRhYmFzZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRhdGFiYXNlLCBkb21haW4s
IG5hbWUsIHZlcnNpb24pOworICAgICAgICBkaWRPcGVuRGF0YWJhc2VJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCBXVEY6Om1vdmUoZGF0YWJhc2UpLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGRhdGFi
YXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmNwcAppbmRleCA4M2I4ODQyLi45YmFmNWZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCkBA
IC00MywxMiArNDMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW50IG5leHRV
bnVzZWRJZCA9IDE7CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFi
YXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pCitSZWY8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZTo6Y3JlYXRlKFJlZlB0cjxEYXRhYmFzZT4mJiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShk
YXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShXVEY6Om1vdmUoZGF0YWJhc2UpLCBkb21haW4s
IG5hbWUsIHZlcnNpb24pKTsKIH0KIAotSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVj
dG9yRGF0YWJhc2VSZXNvdXJjZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQorSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShS
ZWZQdHI8RGF0YWJhc2U+JiYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKICAgICA6IG1fZGF0YWJhc2UoZGF0
YWJhc2UpCiAgICAgLCBtX2lkKFN0cmluZzo6bnVtYmVyKG5leHRVbnVzZWRJZCsrKSkKICAgICAs
IG1fZG9tYWluKGRvbWFpbikKQEAgLTU5LDEyICs1OSwxMyBAQCBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRh
dGFiYQogCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQoSW5zcGVjdG9yRGF0
YWJhc2VGcm9udGVuZERpc3BhdGNoZXIqIGRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2U+IGpzb25P
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2U6OmNyZWF0ZSgp
CisgICAgYXV0byBqc29uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRh
dGFiYXNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0SWQobV9pZCkKICAgICAgICAgLnNldERvbWFp
bihtX2RvbWFpbikKICAgICAgICAgLnNldE5hbWUobV9uYW1lKQotICAgICAgICAuc2V0VmVyc2lv
bihtX3ZlcnNpb24pOwotICAgIGRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyLT5hZGREYXRhYmFz
ZShqc29uT2JqZWN0KTsKKyAgICAgICAgLnNldFZlcnNpb24obV92ZXJzaW9uKQorICAgICAgICAu
cmVsZWFzZSgpOworICAgIGRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyLT5hZGREYXRhYmFzZShX
VEY6Om1vdmUoanNvbk9iamVjdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uu
aAppbmRleCA5ODhhMjc3Li5jYWE2OGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDUsMTUgKzQ0
LDE1IEBAIGNsYXNzIERhdGFiYXNlOwogCiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IGNyZWF0
ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBzdGF0aWMgUmVm
PEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IGNyZWF0ZShSZWZQdHI8RGF0YWJhc2U+JiYsIGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbik7CiAKICAgICB2b2lkIGJpbmQoSW5zcGVjdG9yOjpJbnNwZWN0b3JEYXRhYmFzZUZyb250
ZW5kRGlzcGF0Y2hlciopOwogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0
YWJhc2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldERhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+
IGRhdGFiYXNlKSB7IG1fZGF0YWJhc2UgPSBkYXRhYmFzZTsgfQorICAgIHZvaWQgc2V0RGF0YWJh
c2UoUmVmUHRyPERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7IG1fZGF0YWJhc2UgPSBkYXRhYmFzZTsg
fQogICAgIFN0cmluZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogcHJpdmF0ZToKLSAg
ICBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBT
dHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
OworICAgIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UoUmVmUHRyPERhdGFiYXNlPiYmLCBjb25z
dCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24pOwogCiAgICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOwogICAgIFN0cmluZyBtX2lk
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5o
CmluZGV4IDFhNzRlZGIuLjUwYmZlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKQEAgLTQ1LDkgKzQ1LDkgQEAgY2xhc3MgUGFnZTsK
IAogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVj
dG9yRnJvbnRlbmRIb3N0PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCwg
UGFnZSogZnJvbnRlbmRQYWdlKQorICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yRnJvbnRlbmRIb3N0
PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQ
YWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QoY2xpZW50LCBmcm9udGVuZFBhZ2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KGNsaWVudCwgZnJvbnRlbmRQYWdlKSk7CiAgICAgfQog
CiAgICAgV0VCQ09SRV9FWFBPUlQgfkluc3BlY3RvckZyb250ZW5kSG9zdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5k
ZXggZGExNmE4NC4uZjc5YzAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC05Miw5ICs5Miw5IEBAIG5hbWVzcGFj
ZSB7CiBjbGFzcyBHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRMaXN0ZW5l
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2s+
IGNyZWF0ZShQYXNzUmVmUHRyPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IHJlcXVlc3RD
YWxsYmFjaywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikKKyAgICBzdGF0aWMgUmVmPEdl
dERhdGFiYXNlTmFtZXNDYWxsYmFjaz4gY3JlYXRlKFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0Nh
bGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2V0RGF0YWJhc2VOYW1lc0NhbGxi
YWNrKHJlcXVlc3RDYWxsYmFjaywgc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2Fs
bGJhY2spLCBzZWN1cml0eU9yaWdpbikpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkdldERhdGFi
YXNlTmFtZXNDYWxsYmFjaygpIHsgfQpAQCAtMTI2LDE4ICsxMjYsMTggQEAgcHVibGljOgogICAg
ICAgICB9CiAKICAgICAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXNMaXN0
ID0gcmVxdWVzdFJlc3VsdC0+ZG9tU3RyaW5nTGlzdCgpOwotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gZGF0YWJhc2VOYW1lcyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gZGF0YWJhc2VOYW1lcyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRhdGFiYXNlTmFtZXNMaXN0LT5sZW5ndGgoKTsgKytpKQogICAgICAgICAgICAgZGF0
YWJhc2VOYW1lcy0+YWRkSXRlbShkYXRhYmFzZU5hbWVzTGlzdC0+aXRlbShpKSk7Ci0gICAgICAg
IG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7
CisgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUoZGF0YWJh
c2VOYW1lcykpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZXREYXRhYmFzZU5hbWVzQ2FsbGJh
Y2soUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiByZXF1ZXN0Q2FsbGJh
Y2ssIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4pCisgICAgR2V0RGF0YWJhc2VOYW1lc0Nh
bGxiYWNrKFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikKICAgICAgICAgOiBFdmVudExpc3RlbmVy
KEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQotICAgICAgICAsIG1fcmVxdWVz
dENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKICAgICAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNl
Y3VyaXR5T3JpZ2luKSB7IH0KLSAgICBSZWZQdHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFj
az4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJh
Y2s+IG1fcmVxdWVzdENhbGxiYWNrOwogICAgIFN0cmluZyBtX3NlY3VyaXR5T3JpZ2luOwogfTsK
IApAQCAtMTQ3LDggKzE0Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkgeyB9CiAgICAgdmlydHVhbCB+RXhlY3V0YWJsZVdpdGhEYXRhYmFzZSgpIHsgfTsKICAgICB2
b2lkIHN0YXJ0KElEQkZhY3RvcnkqLCBTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VOYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShQYXNzUmVmUHRyPElEQkRhdGFi
YXNlPikgPSAwOwotICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2so
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmKSA9
IDA7CisgICAgdmlydHVhbCBSZXF1ZXN0Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpID0gMDsK
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0
OyB9OwogcHJpdmF0ZToKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CkBA
IC0xNTYsOSArMTU2LDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgT3BlbkRhdGFiYXNlQ2FsbGJhY2sg
OiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0ZShFeGVjdXRhYmxlV2l0aERhdGFiYXNlKiBleGVj
dXRhYmxlV2l0aERhdGFiYXNlKQorICAgIHN0YXRpYyBSZWY8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+
IGNyZWF0ZShFeGVjdXRhYmxlV2l0aERhdGFiYXNlKiBleGVjdXRhYmxlV2l0aERhdGFiYXNlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuRGF0YWJhc2VDYWxsYmFjayhl
eGVjdXRhYmxlV2l0aERhdGFiYXNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9w
ZW5EYXRhYmFzZUNhbGxiYWNrKGV4ZWN1dGFibGVXaXRoRGF0YWJhc2UpKTsKICAgICB9CiAKICAg
ICB2aXJ0dWFsIH5PcGVuRGF0YWJhc2VDYWxsYmFjaygpIHsgfQpAQCAtMTcxLDcgKzE3MSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV2ZW50KiBldmVudCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChldmVudC0+
dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKLSAgICAgICAgICAgIG1fZXhl
Y3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCktPnNlbmRGYWlsdXJlKCJVbmV4
cGVjdGVkIGV2ZW50IHR5cGUuIik7CisgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJh
c2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUu
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTc5LDE2ICsxNzksMTYg
QEAgcHVibGljOgogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgUmVmUHRy
PElEQkFueT4gcmVxdWVzdFJlc3VsdCA9IGlkYk9wZW5EQlJlcXVlc3QtPnJlc3VsdChlYyk7CiAg
ICAgICAgIGlmIChlYykgewotICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5y
ZXF1ZXN0Q2FsbGJhY2soKS0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBnZXQgcmVzdWx0IGluIGNh
bGxiYWNrLiIpOworICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0
Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiQ291bGQgbm90IGdldCByZXN1bHQgaW4gY2FsbGJhY2su
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlcXVlc3RS
ZXN1bHQtPnR5cGUoKSAhPSBJREJBbnk6OklEQkRhdGFiYXNlVHlwZSkgewotICAgICAgICAgICAg
bV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS0+c2VuZEZhaWx1cmUo
IlVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUuIik7CisgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRo
RGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIHJlc3Vs
dCB0eXBlLiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgUmVm
UHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IHJlcXVlc3RSZXN1bHQtPmlkYkRhdGFiYXNl
KCk7Ci0gICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZShpZGJEYXRhYmFz
ZSk7CisgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZShXVEY6Om1vdmUo
aWRiRGF0YWJhc2UpKTsKICAgICAgICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6ZGVh
Y3RpdmF0ZU5ld1RyYW5zYWN0aW9ucygpOwogICAgICAgICBpZGJEYXRhYmFzZS0+Y2xvc2UoKTsK
ICAgICB9CkBAIC0yMDIsMTI3ICsyMDIsMTM2IEBAIHByaXZhdGU6CiAKIHZvaWQgRXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZTo6c3RhcnQoSURCRmFjdG9yeSogaWRiRmFjdG9yeSwgU2VjdXJpdHlPcmln
aW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKIHsKLSAgICBSZWZQdHI8T3BlbkRhdGFi
YXNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gT3BlbkRhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZSh0aGlz
KTsKKyAgICBSZWY8T3BlbkRhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gT3BlbkRhdGFiYXNl
Q2FsbGJhY2s6OmNyZWF0ZSh0aGlzKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBS
ZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gaWRiT3BlbkRCUmVxdWVzdCA9IGlkYkZhY3RvcnktPm9w
ZW4oY29udGV4dCgpLCBkYXRhYmFzZU5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAg
cmVxdWVzdENhbGxiYWNrKCktPnNlbmRGYWlsdXJlKCJDb3VsZCBub3Qgb3BlbiBkYXRhYmFzZS4i
KTsKKyAgICAgICAgcmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBvcGVu
IGRhdGFiYXNlLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlkYk9wZW5EQlJlcXVl
c3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgY2FsbGJhY2ss
IGZhbHNlKTsKKyAgICBpZGJPcGVuREJSZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5zdWNjZXNzRXZlbnQsIFdURjo6bW92ZShjYWxsYmFjayksIGZhbHNlKTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSURCRGF0YWJhc2Uq
IGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5n
JiBtb2RlID0gSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgpKQorc3RhdGljIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb25Gb3JEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJREJEYXRhYmFzZSogaWRiRGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIG1vZGUgPSBJREJUcmFu
c2FjdGlvbjo6bW9kZVJlYWRPbmx5KCkpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbiA9IGlkYkRhdGFiYXNlLT50
cmFuc2FjdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIG1vZGUs
IGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBp
ZGJUcmFuc2FjdGlvbjsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGlkYlRyYW5zYWN0aW9uKTsKIH0K
IAotc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlRm9yVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb24qIGlkYlRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSkKK3N0YXRpYyBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlRm9y
VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24qIGlkYlRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcm
IG9iamVjdFN0b3JlTmFtZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlID0gaWRiVHJhbnNhY3Rpb24tPm9iamVj
dFN0b3JlKG9iamVjdFN0b3JlTmFtZSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIGlkYk9iamVjdFN0b3JlOworICAgIHJldHVybiBXVEY6Om1v
dmUoaWRiT2JqZWN0U3RvcmUpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gaW5k
ZXhGb3JPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnN0IFN0
cmluZyYgaW5kZXhOYW1lKQorc3RhdGljIFJlZlB0cjxJREJJbmRleD4gaW5kZXhGb3JPYmplY3RT
dG9yZShJREJPYmplY3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgaW5kZXhO
YW1lKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxJREJJbmRleD4g
aWRiSW5kZXggPSBpZGJPYmplY3RTdG9yZS0+aW5kZXgoaW5kZXhOYW1lLCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaWRiSW5kZXg7CisgICAg
cmV0dXJuIFdURjo6bW92ZShpZGJJbmRleCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEtleVBh
dGg+IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBJREJLZXlQYXRoJiBpZGJLZXlQYXRoKQor
c3RhdGljIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgSURCS2V5
UGF0aCYgaWRiS2V5UGF0aCkKIHsKICAgICBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aDsKICAgICBz
d2l0Y2ggKGlkYktleVBhdGgudHlwZSgpKSB7CiAgICAgY2FzZSBJREJLZXlQYXRoOjpOdWxsVHlw
ZToKLSAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6
VHlwZTo6TnVsbCk7CisgICAgICAgIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKQorICAgICAg
ICAgICAgLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6TnVsbCkKKyAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURCS2V5UGF0aDo6U3RyaW5nVHlwZToKLSAg
ICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6
U3RyaW5nKTsKKyAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICAgICAg
ICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJpbmcpCisgICAgICAgICAgICAucmVsZWFzZSgp
OwogICAgICAgICBrZXlQYXRoLT5zZXRTdHJpbmcoaWRiS2V5UGF0aC5zdHJpbmcoKSk7CisKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJREJLZXlQYXRoOjpBcnJheVR5cGU6IHsKLSAgICAgICAg
a2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkp
OwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYXJy
YXkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAg
ICAgYXV0byBhcnJheSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOwogICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5nQXJyYXkgPSBpZGJLZXlQ
YXRoLmFycmF5KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5nQXJyYXku
c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbShzdHJpbmdBcnJheVtpXSk7
Ci0gICAgICAgIGtleVBhdGgtPnNldEFycmF5KGFycmF5KTsKKyAgICAgICAga2V5UGF0aCA9IEtl
eVBhdGg6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpBcnJh
eSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIGtleVBhdGgtPnNldEFycmF5KFdU
Rjo6bW92ZShhcnJheSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGtleVBhdGgu
cmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoa2V5UGF0aCk7CiB9CiAKIGNsYXNzIERh
dGFiYXNlTG9hZGVyIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4g
cmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJh
Y2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhYmFzZUxvYWRlcihjb250ZXh0LCByZXF1ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VMb2FkZXIoY29udGV4dCwgV1RGOjptb3ZlKHJlcXVl
c3RDYWxsYmFjaykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUxvYWRlcigpIHsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gcHJw
RGF0YWJhc2UpIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPElEQkRh
dGFiYXNlPiYmIGRhdGFiYXNlKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgUmVmUHRyPElEQkRh
dGFiYXNlPiBpZGJEYXRhYmFzZSA9IHBycERhdGFiYXNlOwotICAgICAgICBpZiAoIXJlcXVlc3RD
YWxsYmFjaygpLT5pc0FjdGl2ZSgpKQorICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLmlz
QWN0aXZlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSBkYXRhYmFzZU1ldGFkYXRhID0gaWRiRGF0YWJhc2UtPm1ldGFkYXRhKCk7Cisg
ICAgICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgZGF0YWJhc2VNZXRhZGF0YSA9IGRhdGFi
YXNlLT5tZXRhZGF0YSgpOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPj4gb2JqZWN0
U3RvcmVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
SW5kZXhlZERCOjpPYmplY3RTdG9yZT46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIG9iamVjdFN0
b3JlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6Oklu
ZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKIAogICAgICAgICBmb3IgKGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgOiBkYXRhYmFzZU1ldGFk
YXRhLm9iamVjdFN0b3Jlcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0
U3RvcmVJbmRleD4+IGluZGV4ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIGF1dG8gaW5kZXhlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwog
CiAgICAgICAgICAgICBmb3IgKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEg
OiBvYmplY3RTdG9yZU1ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAg
ICBSZWZQdHI8T2JqZWN0U3RvcmVJbmRleD4gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3Jl
SW5kZXg6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgUmVmPE9iamVjdFN0b3JlSW5kZXg+IG9i
amVjdFN0b3JlSW5kZXggPSBPYmplY3RTdG9yZUluZGV4OjpjcmVhdGUoKQogICAgICAgICAgICAg
ICAgICAgICAuc2V0TmFtZShpbmRleE1ldGFkYXRhLm5hbWUpCiAgICAgICAgICAgICAgICAgICAg
IC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURCS2V5UGF0aChpbmRleE1ldGFkYXRhLmtleVBhdGgp
KQogICAgICAgICAgICAgICAgICAgICAuc2V0VW5pcXVlKGluZGV4TWV0YWRhdGEudW5pcXVlKQot
ICAgICAgICAgICAgICAgICAgICAuc2V0TXVsdGlFbnRyeShpbmRleE1ldGFkYXRhLm11bHRpRW50
cnkpOwotICAgICAgICAgICAgICAgIGluZGV4ZXMtPmFkZEl0ZW0ob2JqZWN0U3RvcmVJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIC5zZXRNdWx0aUVudHJ5KGluZGV4TWV0YWRhdGEubXVsdGlF
bnRyeSkKKyAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBp
bmRleGVzLT5hZGRJdGVtKFdURjo6bW92ZShvYmplY3RTdG9yZUluZGV4KSk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIFJlZlB0cjxPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBPYmpl
Y3RTdG9yZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIFJlZjxPYmplY3RTdG9yZT4gb2JqZWN0U3Rv
cmUgPSBPYmplY3RTdG9yZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0TmFtZShvYmpl
Y3RTdG9yZU1ldGFkYXRhLm5hbWUpCiAgICAgICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5UGF0
aEZyb21JREJLZXlQYXRoKG9iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCkpCiAgICAgICAgICAg
ICAgICAgLnNldEF1dG9JbmNyZW1lbnQob2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50
KQotICAgICAgICAgICAgICAgIC5zZXRJbmRleGVzKGluZGV4ZXMpOworICAgICAgICAgICAgICAg
IC5zZXRJbmRleGVzKFdURjo6bW92ZShpbmRleGVzKSkKKyAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwogCi0gICAgICAgICAgICBvYmplY3RTdG9yZXMtPmFkZEl0ZW0ob2JqZWN0U3RvcmUpOwor
ICAgICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVtKFdURjo6bW92ZShvYmplY3RTdG9yZSkp
OwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcz4g
cmVzdWx0ID0gRGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzOjpjcmVhdGUoKQorICAgICAgICBSZWY8
RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzPiByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9y
ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShkYXRhYmFzZU1ldGFkYXRhLm5hbWUp
CiAgICAgICAgICAgICAuc2V0VmVyc2lvbihkYXRhYmFzZU1ldGFkYXRhLnZlcnNpb24pCi0gICAg
ICAgICAgICAuc2V0T2JqZWN0U3RvcmVzKG9iamVjdFN0b3Jlcyk7CisgICAgICAgICAgICAuc2V0
T2JqZWN0U3RvcmVzKFdURjo6bW92ZShvYmplY3RTdG9yZXMpKQorICAgICAgICAgICAgLnJlbGVh
c2UoKTsKIAotICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MocmVzdWx0KTsK
KyAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURjo6bW92ZShyZXN1bHQp
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayogcmVxdWVzdENhbGxiYWNr
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICB2aXJ0
dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VMb2FkZXIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQorICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0
KQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9Ci0gICAg
UmVmUHRyPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICAg
ICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9Cisg
ICAgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChJbnNw
ZWN0b3JPYmplY3QqIGtleSkKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVj
dG9yT2JqZWN0KEluc3BlY3Rvck9iamVjdCoga2V5KQogewogICAgIFJlZlB0cjxJREJLZXk+IGlk
YktleTsKIApAQCAtMzUyLDcgKzM2MSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gaWRi
S2V5RnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3JPYmplY3QqIGtleSkKICAgICAgICAgaWRi
S2V5ID0gSURCS2V5OjpjcmVhdGVEYXRlKGRhdGUpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBh
cnJheVR5cGUpIHsKICAgICAgICAgSURCS2V5OjpLZXlBcnJheSBrZXlBcnJheTsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9IGtleS0+Z2V0QXJyYXkoImFycmF5Iik7Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7CisgICAgICAgIGlmICgha2V5LT5n
ZXRBcnJheSgiYXJyYXkiLCBhcnJheSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGFycmF5LT5nZXQoaSk7CiAg
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CkBAIC0zNjcsMTYgKzM3
OCwyMCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmpl
Y3QoSW5zcGVjdG9yT2JqZWN0KiBrZXkpCiAgICAgcmV0dXJuIGlkYktleS5yZWxlYXNlKCk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5n
ZShJbnNwZWN0b3JPYmplY3QqIGtleVJhbmdlKQorc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4g
aWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoSW5zcGVjdG9yT2JqZWN0KiBrZXlSYW5nZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb3dlciA9IGtleVJhbmdlLT5nZXRPYmplY3QoImxv
d2VyIik7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiTG93ZXIgPSBsb3dlciA/IGlkYktleUZyb21J
bnNwZWN0b3JPYmplY3QobG93ZXIuZ2V0KCkpIDogbnVsbHB0cjsKLSAgICBpZiAobG93ZXIgJiYg
IWlkYkxvd2VyKQorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvd2VyOworICAgIGlmICgh
a2V5UmFuZ2UtPmdldE9iamVjdCgibG93ZXIiLCBsb3dlcikpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIFJlZlB0cjxJREJLZXk+IGlkYkxvd2VyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9i
amVjdChsb3dlci5nZXQoKSk7CisgICAgaWYgKCFpZGJMb3dlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB1cHBlciA9IGtleVJhbmdlLT5n
ZXRPYmplY3QoInVwcGVyIik7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiVXBwZXIgPSB1cHBlciA/
IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QodXBwZXIuZ2V0KCkpIDogbnVsbHB0cjsKLSAgICBp
ZiAodXBwZXIgJiYgIWlkYlVwcGVyKQorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwcGVy
OworICAgIGlmICgha2V5UmFuZ2UtPmdldE9iamVjdCgidXBwZXIiLCB1cHBlcikpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyID0gaWRiS2V5RnJv
bUluc3BlY3Rvck9iamVjdCh1cHBlci5nZXQoKSk7CisgICAgaWYgKCFpZGJVcHBlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29sIGxvd2VyT3BlbjsKQEAgLTM4OSwxNyArNDA0
LDE2IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlS
YW5nZShJbnNwZWN0b3JPYmplY3QqIGtleVJhbmdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIElEQktleVJhbmdlOjpVcHBlckJvdW5kVHlwZSB1cHBlckJvdW5kVHlwZSA9IHVwcGVyT3Bl
biA/IElEQktleVJhbmdlOjpVcHBlckJvdW5kT3BlbiA6IElEQktleVJhbmdlOjpVcHBlckJvdW5k
Q2xvc2VkOwogCi0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IElEQktleVJh
bmdlOjpjcmVhdGUoaWRiTG93ZXIsIGlkYlVwcGVyLCBsb3dlckJvdW5kVHlwZSwgdXBwZXJCb3Vu
ZFR5cGUpOwotICAgIHJldHVybiBpZGJLZXlSYW5nZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIElE
QktleVJhbmdlOjpjcmVhdGUoaWRiTG93ZXIsIGlkYlVwcGVyLCBsb3dlckJvdW5kVHlwZSwgdXBw
ZXJCb3VuZFR5cGUpOwogfQogCiBjbGFzcyBEYXRhTG9hZGVyOwogCiBjbGFzcyBPcGVuQ3Vyc29y
Q2FsbGJhY2sgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNr
LCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAgICBzdGF0aWMgUmVmPE9wZW5D
dXJzb3JDYWxsYmFjaz4gY3JlYXRlKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8
UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVu
c2lnbmVkIHBhZ2VTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVu
Q3Vyc29yQ2FsbGJhY2soaW5qZWN0ZWRTY3JpcHQsIHJlcXVlc3RDYWxsYmFjaywgc2tpcENvdW50
LCBwYWdlU2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuQ3Vyc29yQ2Fs
bGJhY2soaW5qZWN0ZWRTY3JpcHQsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBza2lwQ291
bnQsIHBhZ2VTaXplKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+T3BlbkN1cnNvckNhbGxiYWNr
KCkgeyB9CkBAIC00NTgsOCArNDcyLDkgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8RGF0YUVu
dHJ5PiBkYXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0S2V5
KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChpZGJDdXJzb3ItPmtleSgpLCBTdHJpbmcoKSkp
CiAgICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
aWRiQ3Vyc29yLT5wcmltYXJ5S2V5KCksIFN0cmluZygpKSkKLSAgICAgICAgICAgIC5zZXRWYWx1
ZShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT52YWx1ZSgpLCBTdHJpbmco
KSkpOwotICAgICAgICBtX3Jlc3VsdC0+YWRkSXRlbShkYXRhRW50cnkpOworICAgICAgICAgICAg
LnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChpZGJDdXJzb3ItPnZhbHVlKCks
IFN0cmluZygpKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIG1fcmVzdWx0LT5h
ZGRJdGVtKFdURjo6bW92ZShkYXRhRW50cnkpKTsKIAogICAgIH0KIApAQCAtNDY3LDQxICs0ODIs
NDAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFtX3JlcXVlc3RDYWxsYmFjay0+aXNB
Y3RpdmUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2st
PnNlbmRTdWNjZXNzKG1fcmVzdWx0LnJlbGVhc2UoKSwgaGFzTW9yZSk7CisgICAgICAgIG1fcmVx
dWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUobV9yZXN1bHQpLCBoYXNNb3JlKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3BlbkN1cnNvckNhbGxiYWNrKEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0LCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RD
YWxsYmFjaywgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgT3BlbkN1cnNv
ckNhbGxiYWNrKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VT
aXplKQogICAgICAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0
ZW5lclR5cGUpCiAgICAgICAgICwgbV9pbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKLSAg
ICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwgbV9y
ZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9z
a2lwQ291bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCisgICAg
ICAgICwgbV9yZXN1bHQoQXJyYXk8RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgewotICAgICAg
ICBtX3Jlc3VsdCA9IEFycmF5PERhdGFFbnRyeT46OmNyZWF0ZSgpOwogICAgIH0KICAgICBJbmpl
Y3RlZFNjcmlwdCBtX2luamVjdGVkU2NyaXB0OwotICAgIFJlZlB0cjxSZXF1ZXN0RGF0YUNhbGxi
YWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9y
ZXF1ZXN0Q2FsbGJhY2s7CiAgICAgaW50IG1fc2tpcENvdW50OwogICAgIHVuc2lnbmVkIG1fcGFn
ZVNpemU7Ci0gICAgUmVmUHRyPEFycmF5PERhdGFFbnRyeT4+IG1fcmVzdWx0OworICAgIFJlZjxB
cnJheTxEYXRhRW50cnk+PiBtX3Jlc3VsdDsKIH07CiAKIGNsYXNzIERhdGFMb2FkZXIgOiBwdWJs
aWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YUxvYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmpl
Y3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
LCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5
UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIHN0YXRpYyBSZWY8
RGF0YUxvYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxS
ZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3Jp
cHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50
IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERhdGFMb2FkZXIoY29udGV4dCwgcmVxdWVzdENhbGxiYWNrLCBpbmplY3RlZFNj
cmlwdCwgb2JqZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQs
IHBhZ2VTaXplKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFMb2FkZXIoY29u
dGV4dCwgV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjayksIGluamVjdGVkU2NyaXB0LCBvYmplY3RT
dG9yZU5hbWUsIGluZGV4TmFtZSwgV1RGOjptb3ZlKGlkYktleVJhbmdlKSwgc2tpcENvdW50LCBw
YWdlU2l6ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkRhdGFMb2FkZXIoKSB7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IHBycERhdGFiYXNl
KSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKFJlZlB0cjxJREJEYXRhYmFzZT4m
JiBkYXRhYmFzZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZT4g
aWRiRGF0YWJhc2UgPSBwcnBEYXRhYmFzZTsKLSAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2so
KS0+aXNBY3RpdmUoKSkKKyAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS5pc0FjdGl2ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlk
YlRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25Gb3JEYXRhYmFzZShjb250ZXh0KCksIGlkYkRhdGFi
YXNlLmdldCgpLCBtX29iamVjdFN0b3JlTmFtZSk7CisgICAgICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gaWRiVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwg
ZGF0YWJhc2UuZ2V0KCksIG1fb2JqZWN0U3RvcmVOYW1lKTsKICAgICAgICAgaWYgKCFpZGJUcmFu
c2FjdGlvbikgewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJD
b3VsZCBub3QgZ2V0IHRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MTIs
NyArNTI2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgUmVmUHRyPE9wZW5DdXJzb3JDYWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNrID0gT3Bl
bkN1cnNvckNhbGxiYWNrOjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdCwgbV9yZXF1ZXN0Q2FsbGJh
Y2ssIG1fc2tpcENvdW50LCBtX3BhZ2VTaXplKTsKKyAgICAgICAgUmVmPE9wZW5DdXJzb3JDYWxs
YmFjaz4gb3BlbkN1cnNvckNhbGxiYWNrID0gT3BlbkN1cnNvckNhbGxiYWNrOjpjcmVhdGUobV9p
bmplY3RlZFNjcmlwdCwgbV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpLCBtX3NraXBDb3VudCwg
bV9wYWdlU2l6ZSk7CiAKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiBpZGJSZXF1ZXN0OwpAQCAtNTIzLDIzICs1MzcsMjMgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWRiUmVxdWVzdCA9IGlkYkluZGV4LT5vcGVuQ3Vyc29yKGNvbnRleHQoKSwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4obV9pZGJLZXlSYW5nZSksIGVjKTsKKyAgICAgICAgICAgIGlkYlJlcXVlc3Qg
PSBpZGJJbmRleC0+b3BlbkN1cnNvcihjb250ZXh0KCksIG1faWRiS2V5UmFuZ2UuY29weVJlZigp
LCBlYyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlkYk9iamVj
dFN0b3JlLT5vcGVuQ3Vyc29yKGNvbnRleHQoKSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4obV9p
ZGJLZXlSYW5nZSksIGVjKTsKLSAgICAgICAgaWRiUmVxdWVzdC0+YWRkRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBvcGVuQ3Vyc29yQ2FsbGJhY2ssIGZhbHNlKTsKKyAg
ICAgICAgICAgIGlkYlJlcXVlc3QgPSBpZGJPYmplY3RTdG9yZS0+b3BlbkN1cnNvcihjb250ZXh0
KCksIG1faWRiS2V5UmFuZ2UuY29weVJlZigpLCBlYyk7CisgICAgICAgIGlkYlJlcXVlc3QtPmFk
ZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgV1RGOjptb3ZlKG9wZW5D
dXJzb3JDYWxsYmFjayksIGZhbHNlKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxs
YmFjayogcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJh
Y2suZ2V0KCk7IH0KLSAgICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVz
dENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VT
aXplKQorICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVy
cmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQorICAgIERhdGFMb2FkZXIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlcXVl
c3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYg
aW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJp
bmcmIGluZGV4TmFtZSwgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBD
b3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJl
cXVlc3RDYWxsYmFjaykKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVx
dWVzdENhbGxiYWNrKSkKICAgICAgICAgLCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0
KQogICAgICAgICAsIG1fb2JqZWN0U3RvcmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAg
LCBtX2luZGV4TmFtZShpbmRleE5hbWUpCi0gICAgICAgICwgbV9pZGJLZXlSYW5nZShpZGJLZXlS
YW5nZSkKKyAgICAgICAgLCBtX2lkYktleVJhbmdlKFdURjo6bW92ZShpZGJLZXlSYW5nZSkpCiAg
ICAgICAgICwgbV9za2lwQ291bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFn
ZVNpemUpIHsgfQotICAgIFJlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKKyAgICBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAg
ICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RT
dG9yZU5hbWU7CiAgICAgU3RyaW5nIG1faW5kZXhOYW1lOwpAQCAtNjA1LDcgKzYxOSw3IEBAIHN0
YXRpYyBJREJGYWN0b3J5KiBhc3NlcnRJREJGYWN0b3J5KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgcmV0dXJuIGlkYkZhY3Rvcnk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUGFzc1JlZlB0cjxS
ZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3Bl
Y3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2VOYW1lcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJh
c2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2lu
KTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywg
ZnJhbWUpOwpAQCAtNjIzLDEwICs2MzcsMTAgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dDo6cmVxdWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb24KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpjcmVh
dGUocmVxdWVzdENhbGxiYWNrLCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJp
bmcoKSksIGZhbHNlKTsKKyAgICBpZGJSZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5zdWNjZXNzRXZlbnQsIEdldERhdGFiYXNlTmFtZXNDYWxsYmFjazo6Y3JlYXRlKFdURjo6
bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdT
dHJpbmcoKSksIGZhbHNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVx
dWVzdERhdGFiYXNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFBhc3NSZWZQdHI8UmVxdWVz
dERhdGFiYXNlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8
UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZUFnZW50LT5maW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oc2VjdXJp
dHlPcmlnaW4pOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9y
U3RyaW5nLCBmcmFtZSk7CkBAIC02MzcsMTEgKzY1MSwxMSBAQCB2b2lkIEluc3BlY3RvckluZGV4
ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdAogICAgIGlmICghaWRiRmFjdG9yeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PERhdGFiYXNlTG9hZGVyPiBkYXRhYmFzZUxvYWRlciA9IERhdGFiYXNlTG9hZGVyOjpjcmVhdGUo
ZG9jdW1lbnQsIHJlcXVlc3RDYWxsYmFjayk7CisgICAgUmVmPERhdGFiYXNlTG9hZGVyPiBkYXRh
YmFzZUxvYWRlciA9IERhdGFiYXNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQsIFdURjo6bW92ZShy
ZXF1ZXN0Q2FsbGJhY2spKTsKICAgICBkYXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwg
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5h
bWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFt
ZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0Pioga2V5UmFuZ2UsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENh
bGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNr
PiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+
ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjU0
LDIyICs2NjgsMjIgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKIAogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2Ny
aXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwogCi0gICAgUmVmUHRyPElEQktleVJh
bmdlPiBpZGJLZXlSYW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5
UmFuZ2UtPmdldCgpKSA6IG51bGxwdHI7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlS
YW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UuZ2V0KCkp
IDogbnVsbHB0cjsKICAgICBpZiAoa2V5UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDYW4gbm90IHBhcnNlIGtleSByYW5nZS4iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhTG9hZGVyPiBkYXRhTG9h
ZGVyID0gRGF0YUxvYWRlcjo6Y3JlYXRlKGRvY3VtZW50LCByZXF1ZXN0Q2FsbGJhY2ssIGluamVj
dGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4TmFtZSwgaWRiS2V5UmFuZ2UsIHNraXBD
b3VudCwgcGFnZVNpemUpOworICAgIFJlZjxEYXRhTG9hZGVyPiBkYXRhTG9hZGVyID0gRGF0YUxv
YWRlcjo6Y3JlYXRlKGRvY3VtZW50LCBXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0
ZWRTY3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBXVEY6Om1vdmUoaWRiS2V5UmFu
Z2UpLCBza2lwQ291bnQsIHBhZ2VTaXplKTsKICAgICBkYXRhTG9hZGVyLT5zdGFydChpZGJGYWN0
b3J5LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAogY2xh
c3MgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcik7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyPiBjcmVhdGUo
UGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAg
ICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxDbGVhck9i
amVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKHJlcXVlc3RDYWxsYmFjaykp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIo
V1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5DbGVh
ck9iamVjdFN0b3JlTGlzdGVuZXIoKSB7IH0KQEAgLTY5MSwzNiArNzA1LDM1IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfQogcHJpdmF0
ZToKLSAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0
b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVu
ZXIoUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkK
LSAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spCisgICAgICAgICwg
bV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAg
IH0KIAotICAgIFJlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxi
YWNrOworICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNr
OwogfTsKIAogCiBjbGFzcyBDbGVhck9iamVjdFN0b3JlIDogcHVibGljIEV4ZWN1dGFibGVXaXRo
RGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3Rv
cmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG9iamVjdFN0b3JlTmFtZSwgUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
TmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsZWFyT2JqZWN0U3RvcmUoY29udGV4
dCwgb2JqZWN0U3RvcmVOYW1lLCByZXF1ZXN0Q2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZShjb250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIFdU
Rjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSk7CiAgICAgfQogCi0gICAgQ2xlYXJPYmplY3RTdG9y
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0
b3JlTmFtZSwgUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxs
YmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNh
bGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0aERhdGFi
YXNlKGNvbnRleHQpCiAgICAgICAgICwgbV9vYmplY3RTdG9yZU5hbWUob2JqZWN0U3RvcmVOYW1l
KQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKICAgICB7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4g
cHJwRGF0YWJhc2UpIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPElE
QkRhdGFiYXNlPiYmIGRhdGFiYXNlKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgUmVmUHRyPElE
QkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IHBycERhdGFiYXNlOwotICAgICAgICBpZiAoIXJlcXVl
c3RDYWxsYmFjaygpLT5pc0FjdGl2ZSgpKQorICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygp
LmlzQWN0aXZlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQo
KSwgaWRiRGF0YWJhc2UuZ2V0KCksIG1fb2JqZWN0U3RvcmVOYW1lLCBJREJUcmFuc2FjdGlvbjo6
bW9kZVJlYWRXcml0ZSgpKTsKKyAgICAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFu
c2FjdGlvbiA9IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoY29udGV4dCgpLCBkYXRhYmFzZS5nZXQo
KSwgbV9vYmplY3RTdG9yZU5hbWUsIElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRlKCkpOwog
ICAgICAgICBpZiAoIWlkYlRyYW5zYWN0aW9uKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxs
YmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBnZXQgdHJhbnNhY3Rpb24iKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTczOCwxNiArNzUxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1f
cmVxdWVzdENhbGxiYWNrLT5zZW5kRmFpbHVyZShTdHJpbmc6OmZvcm1hdCgiQ291bGQgbm90IGNs
ZWFyIG9iamVjdCBzdG9yZSAnJXMnOiAlZCIsIG1fb2JqZWN0U3RvcmVOYW1lLnV0ZjgoKS5kYXRh
KCksIGVjKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWRiVHJh
bnNhY3Rpb24tPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrKSwgZmFsc2Up
OworICAgICAgICBpZGJUcmFuc2FjdGlvbi0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
Y29tcGxldGVFdmVudCwgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyOjpjcmVhdGUobV9yZXF1ZXN0
Q2FsbGJhY2suY29weVJlZigpKSwgZmFsc2UpOwogICAgIH0KIAotICAgIHZpcnR1YWwgUmVxdWVz
dENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RD
YWxsYmFjay5nZXQoKTsgfQorICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2Fs
bGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQogcHJp
dmF0ZToKICAgICBjb25zdCBTdHJpbmcgbV9vYmplY3RTdG9yZU5hbWU7Ci0gICAgUmVmUHRyPENs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPENsZWFy
T2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCi12b2lkIEluc3Bl
Y3RvckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBQYXNzUmVmUHRyPENsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6Y2xlYXJPYmplY3RTdG9yZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4m
JiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZp
bmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTc1Nyw3
ICs3NzAsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3Jl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUwogICAgIGlmICghaWRiRmFjdG9yeSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPENsZWFyT2JqZWN0U3RvcmU+IGNsZWFyT2Jq
ZWN0U3RvcmUgPSBDbGVhck9iamVjdFN0b3JlOjpjcmVhdGUoZG9jdW1lbnQsIG9iamVjdFN0b3Jl
TmFtZSwgcmVxdWVzdENhbGxiYWNrKTsKKyAgICBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY2xlYXJP
YmplY3RTdG9yZSA9IENsZWFyT2JqZWN0U3RvcmU6OmNyZWF0ZShkb2N1bWVudCwgb2JqZWN0U3Rv
cmVOYW1lLCBXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSk7CiAgICAgY2xlYXJPYmplY3RTdG9y
ZS0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNl
TmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50LmgKaW5kZXggOGFmNGUxNy4uM2IwZTlmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKQEAgLTU4LDEwICs1
OCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KICAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+KSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFBhc3NSZWZQ
dHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGtleVJhbmdlLCBQYXNzUmVm
UHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJPYmplY3RTdG9yZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaW5fc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0cmluZyYgaW5fZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIGluX29iamVj
dFN0b3JlTmFtZSwgUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxs
YmFjaz4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFzZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0YShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9i
amVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGlu
dCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGtl
eVJhbmdlLCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGluX3Nl
Y3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5n
JiBpbl9vYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpIG92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggMzU4OWVmZi4uODM5OTAz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHAKQEAgLTY4OSwxMCArNjg5LDEwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVu
dEltCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0
ZWRMb2FkaW5nRm9yQ2xpZW50KGlkZW50aWZpZXIsIGNsaWVudCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8
Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGlu
Y2x1ZGVDcmVkZW50aWFscykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9h
ZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJM
JiB1cmwsIGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRU
UEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CiAgICAgaWYg
KEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKLSAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2ls
bExvYWRYSFIoY2xpZW50LCBtZXRob2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBp
bmNsdWRlQ3JlZGVudGlhbHMpOworICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsTG9hZFhIUihj
bGllbnQsIG1ldGhvZCwgdXJsLCBhc3luYywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywg
aW5jbHVkZUNyZWRlbnRpYWxzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEZhaWxYSFJMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQpCkBAIC05MTYsNyArOTE2LDcg
QEAgc3RhdGljIGJvb2wgaXNDb25zb2xlQXNzZXJ0TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJj
ZSwgTWVzc2FnZVR5cGUgdHlwZSkKIH0KIAogLy8gRklYTUU6IERyb3AgdGhpcyBvbmNlIHdlIG5v
IGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3IuCi12b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3Nh
Z2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQ
YXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVl
c3RJZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VU
b0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIE1l
c3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3Rh
Y2ssIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKFdlYkNvbnNv
bGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdl
bnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwg
dHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOwpAQCAt
OTI3LDcgKzkyNyw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdl
VG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0CiAgICAgfQogfQogCi12b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VU
eXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmIChXZWJDb25zb2xlQWdl
bnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkp
CiAgICAgICAgIGNvbnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUs
IGxldmVsLCBtZXNzYWdlLCBzdGF0ZSwgYXJndW1lbnRzLCByZXF1ZXN0SWRlbnRpZmllcik7CkBA
IC05NDksNyArOTQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3Nh
Z2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3QKICAgICB9CiB9CiAKLXZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFz
c1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4mJiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29s
ZUFnZW50LT5jb3VudChzdGF0ZSwgYXJndW1lbnRzKTsKQEAgLTk2Myw3ICs5NjMsNyBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cgogICAgICAgICBjb25zb2xlQWdlbnQtPnN0YXJ0VGltaW5nKHRp
dGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGlt
aW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYg
ZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBz
dGFjaykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0lt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1l
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmIHN0YWNrKQog
ewogICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+c3RvcFRpbWlu
Zyh0aXRsZSwgc3RhY2spOwpAQCAtOTcxLDcgKzk3MSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPnRpbWVFbmQoZnJhbWUsIHRpdGxlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJn
dW1lbnRzKQogewogICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAg
ICAgU3RyaW5nIG1lc3NhZ2U7CkBAIC05ODYsNyArOTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW4KICAgICAgICAgdGltZWxpbmVBZ2VudC0+c3RhcnRGcm9tQ29uc29sZShleGVjLCB0aXRs
ZSk7CiB9CiAKLVBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnN0b3BQcm9maWxpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQorUmVmUHRy
PEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxp
bmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudElu
c3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIHRpbWVsaW5lQWdlbnQtPnN0
b3BGcm9tQ29uc29sZShleGVjLCB0aXRsZSk7CkBAIC05OTQsNyArOTk0LDcgQEAgUGFzc1JlZlB0
cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZ0lt
cGwoSW5zdHJ1bWVudGkKIH0KIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi12b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwg
Y29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUlt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPERhdGFi
YXNlPiYmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAgaWYgKCFpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvckVudmlyb25tZW50KCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xMTA3LDQwICsxMTA3LDQwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRTZW5kV2ViU29ja2V0RnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkNyZWF0ZWRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Np
b24pCiB7CiAgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKLSAgICAgICAgcmVwbGF5QWdl
bnQtPnNlc3Npb25DcmVhdGVkKHNlc3Npb24pOworICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lv
bkNyZWF0ZWQoV1RGOjptb3ZlKHNlc3Npb24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnNlc3Npb25Mb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9u
KQogewogICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50
LT5zZXNzaW9uTG9hZGVkKHNlc3Npb24pOworICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbkxv
YWRlZChXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6c2Vzc2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9u
KQogewogICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50
LT5zZXNzaW9uTW9kaWZpZWQoc2Vzc2lvbik7CisgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9u
TW9kaWZpZWQoV1RGOjptb3ZlKHNlc3Npb24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQor
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNl
Z21lbnQ+JiYgc2VnbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxh
eUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAg
ICAgICByZXBsYXlBZ2VudC0+c2VnbWVudENyZWF0ZWQoc2VnbWVudCk7CisgICAgICAgIHJlcGxh
eUFnZW50LT5zZWdtZW50Q3JlYXRlZChXVEY6Om1vdmUoc2VnbWVudCkpOwogfQogCi12b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4gc2VnbWVudCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29t
cGxldGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQ
dHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9y
UmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JS
ZXBsYXlBZ2VudCgpKQotICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVudENvbXBsZXRlZChzZWdt
ZW50KTsKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRDb21wbGV0ZWQoV1RGOjptb3ZlKHNl
Z21lbnQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2Fk
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQ
dHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQpCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c2VnbWVudExvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7CiAg
ICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKLSAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21l
bnRMb2FkZWQoc2VnbWVudCk7CisgICAgICAgIHJlcGxheUFnZW50LT5zZWdtZW50TG9hZGVkKFdU
Rjo6bW92ZShzZWdtZW50KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZWdtZW50VW5sb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmgKaW5kZXggZDdjYWE1OS4uMzIyMTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMTg2LDcgKzE4Niw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKEZyYW1lKiwgRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1l
KTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZyhGcmFtZSosIERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAg
c3RhdGljIHZvaWQgZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGll
bnQoRG9jdW1lbnQmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFRocmVhZGFibGVMb2FkZXJD
bGllbnQqKTsKLSAgICBzdGF0aWMgdm9pZCB3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYs
IGJvb2wsIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9vbCk7
CisgICAgc3RhdGljIHZvaWQgd2lsbExvYWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBib29sLCBS
ZWZQdHI8Rm9ybURhdGE+JiYsIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBib29sKTsKICAgICBzdGF0
aWMgdm9pZCBkaWRGYWlsWEhSTG9hZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaFhIUkxvYWRpbmco
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlciwg
dW5zaWduZWQgc2VuZENvbHVtbk51bWJlcik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVhI
UlJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpOwpAQCAtMjEzLDE4ICsyMTMsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpZFdy
aXRlSFRNTChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmLCB1bnNpZ25lZCBl
bmRMaW5lKTsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIgZ2VuZXJh
dGUgc3RhY2tzIG91dHNpZGUgb2YgSW5zcGVjdG9yLgotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3Nh
Z2VUb0NvbnNvbGUoUGFnZSYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENh
bGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICBzdGF0
aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdl
VHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4sIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25z
b2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIgPSAwKTsKICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBN
ZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdG8gU2Ny
aXB0QXJndW1lbnRzIHRvIG1hdGNoIG5vbi13b3JrZXIgY29udGV4dC4KLSAgICBzdGF0aWMgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2Vy
R2xvYmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4m
JiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHN0YXRpYyB2b2lk
IGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRp
ZmllciA9IDApOwogCi0gICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UmLCBKU0M6OkV4
ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBz
dGF0aWMgdm9pZCBjb25zb2xlQ291bnQoUGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNv
bGVUaW1pbmcoRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCBz
dG9wQ29uc29sZVRpbWluZyhGcmFtZSYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGlt
ZVN0YW1wKEZyYW1lJiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwor
ICAgIHN0YXRpYyB2b2lkIHN0b3BDb25zb2xlVGltaW5nKEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0
aXRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKTsKKyAgICBzdGF0aWMg
dm9pZCBjb25zb2xlVGltZVN0YW1wKEZyYW1lJiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJn
dW1lbnRzPiYmKTsKIAogICAgIHN0YXRpYyB2b2lkIGRpZFJlcXVlc3RBbmltYXRpb25GcmFtZShE
b2N1bWVudCosIGludCBjYWxsYmFja0lkKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDYW5jZWxBbmlt
YXRpb25GcmFtZShEb2N1bWVudCosIGludCBjYWxsYmFja0lkKTsKQEAgLTIzMiwxMCArMjMyLDEw
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRGaXJlQW5pbWF0aW9uRnJhbWUoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBzdGFy
dFByb2ZpbGluZyhQYWdlJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmcoUGFnZSYs
IEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgc3RhdGljIFJlZlB0
cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmcoUGFnZSYsIEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiB0aXRsZSk7CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHN0YXRp
YyB2b2lkIGRpZE9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBSZWZQdHI8RGF0YWJhc2U+JiYsIGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5k
aWYKIAogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVl
LCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CkBAIC0yNDYsMTMgKzI0Niwx
MyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgd2lsbEV2YWx1YXRlV29ya2VyU2NyaXB0KFdv
cmtlckdsb2JhbFNjb3BlKiwgaW50IHdvcmtlclRocmVhZFN0YXJ0TW9kZSk7CiAKICNpZiBFTkFC
TEUoV0VCX1JFUExBWSkKLSAgICBzdGF0aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdlJiwgUGFz
c1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZChQ
YWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lv
bk1vZGlmaWVkKFBhZ2UmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+KTsKKyAgICBzdGF0aWMg
dm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdlJiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOworICAg
IHN0YXRpYyB2b2lkIHNlc3Npb25Mb2FkZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYm
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXNzaW9uTW9kaWZpZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlT
ZXNzaW9uPiYmKTsKIAotICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDcmVhdGVkKFBhZ2UmLCBQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudENv
bXBsZXRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOwotICAgIHN0
YXRpYyB2b2lkIHNlZ21lbnRMb2FkZWQoUGFnZSYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNl
Z21lbnQ+KTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q3JlYXRlZChQYWdlJiwgUmVmUHRyPFJl
cGxheVNlc3Npb25TZWdtZW50PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q29tcGxldGVk
KFBhZ2UmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYpOworICAgIHN0YXRpYyB2b2lk
IHNlZ21lbnRMb2FkZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJik7CiAg
ICAgc3RhdGljIHZvaWQgc2VnbWVudFVubG9hZGVkKFBhZ2UmKTsKIAogICAgIHN0YXRpYyB2b2lk
IGNhcHR1cmVTdGFydGVkKFBhZ2UmKTsKQEAgLTM4Niw3ICszODYsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgZG91YmxlIGZpbmlzaFRp
bWUpOwogICAgIHN0YXRpYyB2b2lkIGRpZEZhaWxMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKICAgICBzdGF0aWMgdm9pZCBkb2N1bWVudFRocmVhZGFibGVMb2FkZXJT
dGFydGVkTG9hZGluZ0ZvckNsaWVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwotICAgIHN0YXRpYyB2
b2lkIHdpbGxMb2FkWEhSSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGJvb2wsIFBhc3NSZWZQdHI8Rm9y
bURhdGE+LCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgd2ls
bExvYWRYSFJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgYm9vbCwgUmVmUHRyPEZvcm1EYXRhPiYmLCBj
b25zdCBIVFRQSGVhZGVyTWFwJiwgYm9vbCk7CiAgICAgc3RhdGljIHZvaWQgZGlkRmFpbFhIUkxv
YWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kik7
CiAgICAgc3RhdGljIHZvaWQgZGlkRmluaXNoWEhSTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlciwgdW5zaWduZWQgc2VuZENvbHVt
bk51bWJlcik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVhIUlJlc3BvbnNlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTQxMiwxNiAr
NDEyLDE2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsV3JpdGVIVE1MSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgc3Rh
cnRMaW5lLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZFdyaXRlSFRNTEltcGwoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgdW5zaWduZWQgZW5kTGluZSk7CiAKLSAg
ICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBzdGF0aWMg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgc3RhdGljIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VTb3VyY2UsIE1l
c3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBzY3JpcHRJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVy
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOwogCiAg
ICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0
c2lkZSBvZiBJbnNwZWN0b3IuCi0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUlt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOworICAgIHN0
YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBN
ZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllcik7CiAKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4mJik7CiAgICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5n
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsK
LSAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYsIEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdENhbGxTdGFjaz4pOwotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVUaW1lU3RhbXBJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+KTsKKyAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0
YW1wSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+JiYpOwogCiAgICAgc3RhdGljIHZvaWQgZGlkUmVxdWVzdEFuaW1hdGlv
bkZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgaW50IGNhbGxiYWNrSWQsIEZyYW1lKik7
CiAgICAgc3RhdGljIHZvaWQgZGlkQ2FuY2VsQW5pbWF0aW9uRnJhbWVJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmLCBpbnQgY2FsbGJhY2tJZCwgRnJhbWUqKTsKQEAgLTQyOSwxMCArNDI5LDEwIEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGlkRmlyZUFuaW1hdGlvbkZyYW1lSW1wbChjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKIAogICAgIHN0YXRpYyB2b2lkIHN0
YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+
IHN0b3BQcm9maWxpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpQcm9maWxlPiBz
dG9wUHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmIHRpdGxlKTsKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgc3Rh
dGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJp
bmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwog
I2VuZGlmCiAKICAgICBzdGF0aWMgdm9pZCBkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmln
aW4qLCBQYWdlKik7CkBAIC00NDIsMTMgKzQ0MiwxMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIHdvcmtlckdsb2JhbFNjb3BlVGVybWluYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYs
IFdvcmtlckdsb2JhbFNjb3BlUHJveHkqKTsKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAg
IHN0YXRpYyB2b2lkIHNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFz
c1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7Ci0gICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOwotICAg
IHN0YXRpYyB2b2lkIHNlc3Npb25Nb2RpZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBh
c3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVhdGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOworICAg
IHN0YXRpYyB2b2lkIHNlc3Npb25Mb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBSZWZQ
dHI8UmVwbGF5U2Vzc2lvbj4mJik7CisgICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOwogCi0gICAg
c3RhdGljIHZvaWQgc2VnbWVudENyZWF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudENv
bXBsZXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+KTsKLSAgICBzdGF0aWMgdm9pZCBzZWdtZW50TG9hZGVkSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHN0YXRp
YyB2b2lkIHNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJl
cGxheVNlc3Npb25TZWdtZW50PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q29tcGxldGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYm
KTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50TG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmKTsKICAgICBzdGF0aWMgdm9pZCBzZWdt
ZW50VW5sb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmKTsKIAogICAgIHN0YXRpYyB2b2lk
IGNhcHR1cmVTdGFydGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJik7CkBAIC0xMzg2LDExICsx
Mzg2LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDCiAjZW5kaWYKIH0KIAotaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVk
ZUNyZWRlbnRpYWxzKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TG9hZFhIUihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9v
bCBhc3luYywgUmVmUHRyPEZvcm1EYXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFw
JiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKIHsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHdpbGxMb2Fk
WEhSSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY2xpZW50LCBtZXRob2QsIHVybCwgYXN5bmMs
IGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOworICAgICAgICB3aWxsTG9h
ZFhIUkltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGNsaWVudCwgbWV0aG9kLCB1cmwsIGFzeW5j
LCBXVEY6Om1vdmUoZm9ybURhdGEpLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGNsaWVudCk7
CkBAIC0xNzk2LDcyICsxNzk2LDcyIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKERvY3VtZW50KiBkb2N1bWVudCwKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlc3Npb25DcmVhdGVkKFBhZ2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lv
bj4gc2Vzc2lvbikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lv
bkNyZWF0ZWQoUGFnZSYgcGFnZSwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2
b2lkKCkpOwogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIHNlc3Npb25DcmVh
dGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc2Vzc2lvbik7CisgICAgICAgIHNlc3Npb25D
cmVhdGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjptb3ZlKHNlc3Npb24pKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsK
ICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Np
b25Mb2FkZWQoUGFnZSYgcGFnZSwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQor
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkKFBhZ2Um
IHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBzZXNzaW9uTG9hZGVkSW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgc2Vzc2lvbik7CisgICAgICAgIHNlc3Npb25Mb2FkZWRJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1vdmUoc2Vzc2lvbikpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOwogI2VuZGlmCiB9CiAKLWlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKFBhZ2Um
IHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK2lubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKFBhZ2UmIHBhZ2UsIFJlZlB0
cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQ
YWdlKHBhZ2UpKQotICAgICAgICBzZXNzaW9uTW9kaWZpZWRJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBzZXNzaW9uKTsKKyAgICAgICAgc2Vzc2lvbk1vZGlmaWVkSW1wbCgqaW5zdHJ1bWVudGlu
Z0FnZW50cywgV1RGOjptb3ZlKHNlc3Npb24pKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBh
Z2UpOwogICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkKFBhZ2UmIHBhZ2UsIFBh
c3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQpCitpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgc2VnbWVudENyZWF0ZWRJbXBsKCppbnN0cnVtZW50aW5n
QWdlbnRzLCBzZWdtZW50KTsKKyAgICAgICAgc2VnbWVudENyZWF0ZWRJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCBXVEY6Om1vdmUoc2VnbWVudCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNlZ21lbnQpOwogI2VuZGlmCiB9CiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZChQYWdlJiBwYWdl
LCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQoraW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKFBhZ2UmIHBhZ2UsIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAgc2VnbWVudENvbXBsZXRlZEltcGwoKmluc3Ry
dW1lbnRpbmdBZ2VudHMsIHNlZ21lbnQpOworICAgICAgICBzZWdtZW50Q29tcGxldGVkSW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjptb3ZlKHNlZ21lbnQpKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzZWdtZW50KTsKICNlbmRpZgogfQog
Ci1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWQoUGFn
ZSYgcGFnZSwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK2lubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZChQYWdlJiBwYWdl
LCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAg
IGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIHNlZ21lbnRMb2FkZWRJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBzZWdtZW50KTsKKyAgICAgICAgc2VnbWVudExvYWRlZEltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIFdURjo6bW92ZShzZWdtZW50KSk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0oc2VnbWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCA2
Y2IyMTI0Li40NTU1ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5
KEVycm9yU3RyaW5nJgogICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFy
Y2h5KGVycm9yU3RyaW5nLCByZW5kZXJMYXllciwgbGF5ZXJzKTsKIH0KIAotUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6
OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gJnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJl
bmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0x
NjYsMTMgKzE2NiwxNCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZAogICAgICAgICBub2RlID0g
cmVuZGVyZXItPnBhcmVudCgpLT5lbGVtZW50KCk7CiAKICAgICAvLyBCYXNpYyBzZXQgb2YgcHJv
cGVydGllcy4KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXll
cj4gbGF5ZXJPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpj
cmVhdGUoKQorICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkxheWVyOjpjcmVhdGUoKQogICAgICAgICAuc2V0TGF5ZXJJZChiaW5kKHJlbmRlckxh
eWVyKSkKICAgICAgICAgLnNldE5vZGVJZChpZEZvck5vZGUoZXJyb3JTdHJpbmcsIG5vZGUpKQog
ICAgICAgICAuc2V0Qm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChyZW5kZXJlci0+YWJzb2x1
dGVCb3VuZGluZ0JveFJlY3QoKSkpCiAgICAgICAgIC5zZXRNZW1vcnkoYmFja2luZy0+YmFja2lu
Z1N0b3JlTWVtb3J5RXN0aW1hdGUoKSkKICAgICAgICAgLnNldENvbXBvc2l0ZWRCb3VuZHMoYnVp
bGRPYmplY3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYmFja2luZy0+Y29tcG9zaXRlZEJv
dW5kcygpKSkpCi0gICAgICAgIC5zZXRQYWludENvdW50KGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIo
KS0+cmVwYWludENvdW50KCkpOworICAgICAgICAuc2V0UGFpbnRDb3VudChiYWNraW5nLT5ncmFw
aGljc0xheWVyKCktPnJlcGFpbnRDb3VudCgpKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAg
aWYgKG5vZGUgJiYgbm9kZS0+c2hhZG93SG9zdCgpKQogICAgICAgICBsYXllck9iamVjdC0+c2V0
SXNJblNoYWRvd1RyZWUodHJ1ZSk7CkBAIC0yMDEsNyArMjAyLDcgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6YnVpbGQKICAgICAgICAgICAgIGxheWVyT2JqZWN0LT5zZXRQc2V1ZG9FbGVtZW50KCJmaXJz
dC1saW5lIik7CiAgICAgfQogCi0gICAgcmV0dXJuIGxheWVyT2JqZWN0OworICAgIHJldHVybiBX
VEY6Om1vdmUobGF5ZXJPYmplY3QpOwogfQogCiBpbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmlkRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCkBAIC0yMTgs
MTYgKzIxOSwxNyBAQCBpbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIG5vZGVJZDsKIH0K
IAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IElu
c3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IElu
c3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJ
bnRSZWN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0WChyZWN0LngoKSkKICAgICAgICAgLnNldFko
cmVjdC55KCkpCiAgICAgICAgIC5zZXRXaWR0aChyZWN0LndpZHRoKCkpCi0gICAgICAgIC5zZXRI
ZWlnaHQocmVjdC5oZWlnaHQoKSkucmVsZWFzZSgpOworICAgICAgICAuc2V0SGVpZ2h0KHJlY3Qu
aGVpZ2h0KCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+JiBjb21wb3NpdGluZ1JlYXNvbnMpCit2b2lk
IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYgY29tcG9zaXRp
bmdSZWFzb25zUmVzdWx0KQogewogICAgIGNvbnN0IFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9
IG1faWRUb0xheWVyLmdldChsYXllcklkKTsKIApAQCAtMjM3LDcgKzIzOSw3IEBAIHZvaWQgSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluCiAgICAgfQogCiAgICAgQ29tcG9zaXRpbmdSZWFzb25zIHJlYXNvbnNC
aXRtYXNrID0gcmVuZGVyTGF5ZXItPmNvbXBvc2l0b3IoKS5yZWFzb25zRm9yQ29tcG9zaXRpbmco
KnJlbmRlckxheWVyKTsKLSAgICBjb21wb3NpdGluZ1JlYXNvbnMgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29uczo6Y3JlYXRlKCk7CisgICAgYXV0byBj
b21wb3NpdGluZ1JlYXNvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBv
c2l0aW5nUmVhc29uczo6Y3JlYXRlKCkucmVsZWFzZSgpOwogCiAgICAgaWYgKHJlYXNvbnNCaXRt
YXNrICYgQ29tcG9zaXRpbmdSZWFzb24zRFRyYW5zZm9ybSkKICAgICAgICAgY29tcG9zaXRpbmdS
ZWFzb25zLT5zZXRUcmFuc2Zvcm0zRCh0cnVlKTsKQEAgLTMxMCw2ICszMTIsOCBAQCB2b2lkIElu
c3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0
cmluZyYgZXJyb3JTdHJpbgogCiAgICAgaWYgKHJlYXNvbnNCaXRtYXNrICYgQ29tcG9zaXRpbmdS
ZWFzb25Sb290KQogICAgICAgICBjb21wb3NpdGluZ1JlYXNvbnMtPnNldFJvb3QodHJ1ZSk7Cisg
ICAgCisgICAgY29tcG9zaXRpbmdSZWFzb25zUmVzdWx0ID0gV1RGOjptb3ZlKGNvbXBvc2l0aW5n
UmVhc29ucyk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YmluZChjb25z
dCBSZW5kZXJMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCmluZGV4IDY2MzM5MzIuLjI3NGUyM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCkBA
IC03NSw4ICs3NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRl
ck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYsIFJlbmRlck9iamVjdCosIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Okxh
eWVyPj4mKTsKICAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHko
RXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mKTsKIAotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVpbGRPYmpl
Y3RGb3JMYXllcihFcnJvclN0cmluZyYsIFJlbmRlckxheWVyKik7Ci0gICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50
UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXll
ciopOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1
aWxkT2JqZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0Jik7CiAKICAgICBpbnQgaWRGb3JOb2Rl
KEVycm9yU3RyaW5nJiwgTm9kZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggYzg0NzQ1Yy4uMjk0YzA0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMzMxLDUwICszMzEsNTAg
QEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQogICAgIGZvcmNlUGFpbnQoKTsKIH0K
IAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1
aWxkT2JqZWN0Rm9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgieCIpLCBwb2ludC54KCkpOwog
ICAgIG9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgieSIpLCBwb2ludC55KCkpOwotICAg
IHJldHVybiBvYmplY3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUob2JqZWN0KTsK
IH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1
aWxkT2JqZWN0Rm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIG9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgieCIpLCByZWN0LngoKSk7CiAgICAg
b2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ5IiksIHJlY3QueSgpKTsKICAgICBvYmpl
Y3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoIndpZHRoIiksIHJlY3Qud2lkdGgoKSk7CiAgICAg
b2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJoZWlnaHQiKSwgcmVjdC5oZWlnaHQoKSk7
Ci0gICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShvYmpl
Y3QpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZv
clF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQorc3RhdGljIFJlZjxJbnNwZWN0b3JBcnJheT4g
YnVpbGRBcnJheUZvclF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
PEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBh
cnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDEoKSkpOwogICAgIGFy
cmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMigpKSk7CiAgICAgYXJy
YXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAzKCkpKTsKICAgICBhcnJh
eS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDQoKSkpOwotICAgIHJldHVy
biBhcnJheS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShhcnJheSk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQo
Y29uc3QgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCitzdGF0aWMgUmVmPEluc3BlY3Rvck9iamVjdD4g
YnVpbGRPYmplY3RGb3JIaWdobGlnaHQoY29uc3QgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhpZ2hsaWdodC5x
dWFkcy5zaXplKCk7ICsraSkKICAgICAgICAgYXJyYXktPnB1c2hBcnJheShidWlsZEFycmF5Rm9y
UXVhZChoaWdobGlnaHQucXVhZHNbaV0pKTsKLSAgICBvYmplY3QtPnNldEFycmF5KCJxdWFkcyIs
IGFycmF5LnJlbGVhc2UoKSk7CisgICAgb2JqZWN0LT5zZXRBcnJheSgicXVhZHMiLCBXVEY6Om1v
dmUoYXJyYXkpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygiY29udGVudENvbG9yIiwgaGlnaGxp
Z2h0LmNvbnRlbnRDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJj
b250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0LmNvbnRlbnRPdXRsaW5lQ29sb3Iuc2VyaWFs
aXplZCgpKTsKICAgICBvYmplY3QtPnNldFN0cmluZygicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0
LnBhZGRpbmdDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJib3Jk
ZXJDb2xvciIsIGhpZ2hsaWdodC5ib3JkZXJDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIG9iamVj
dC0+c2V0U3RyaW5nKCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdodC5tYXJnaW5Db2xvci5zZXJpYWxp
emVkKCkpOwotICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1v
dmUob2JqZWN0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodChGcmFtZVZpZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdp
b24qIHJlZ2lvbikKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
clJlZ2lvbkhpZ2hsaWdodChGcmFtZVZpZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lv
bikKIHsKICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gcmVnaW9uLT5mcmFtZSgpLnZp
ZXcoKTsKICAgICBpZiAoIWNvbnRhaW5pbmdWaWV3KQpAQCAtNDA2LDIwICs0MDYsMjAgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hs
aWdodChGcmFtZVZpZXcqIG1haW4KICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNv
bnRhaW5pbmdWaWV3LCBpbmNvbWluZ1JlY3RRdWFkKTsKICAgICBjb250ZW50c1F1YWRUb1BhZ2Uo
bWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBvdXRnb2luZ1JlY3RRdWFkKTsKIAotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKIAogICAgIHJlZ2lvbk9iamVjdC0+c2V0QXJyYXkoImJvcmRlclF1YWQi
LCBidWlsZEFycmF5Rm9yUXVhZChib3JkZXJSZWN0UXVhZCkpOwogICAgIHJlZ2lvbk9iamVjdC0+
c2V0QXJyYXkoImluY29taW5nUXVhZCIsIGJ1aWxkQXJyYXlGb3JRdWFkKGluY29taW5nUmVjdFF1
YWQpKTsKICAgICByZWdpb25PYmplY3QtPnNldEFycmF5KCJvdXRnb2luZ1F1YWQiLCBidWlsZEFy
cmF5Rm9yUXVhZChvdXRnb2luZ1JlY3RRdWFkKSk7CiAKLSAgICByZXR1cm4gcmVnaW9uT2JqZWN0
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlZ2lvbk9iamVjdCk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNI
aWdobGlnaHQoUmVuZGVyUmVnaW9uKiByZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQpCitzdGF0aWMgUmVmPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNI
aWdobGlnaHQoUmVuZGVyUmVnaW9uKiByZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQpCiB7CiAgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gcmVnaW9uLT5kb2N1bWVudCgp
LnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpOwogCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yQXJy
YXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogCiAgICAgY29uc3QgUmVuZGVy
UmVnaW9uTGlzdCYgcmVnaW9uTGlzdCA9IGZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsK
ICAgICBmb3IgKGF1dG8mIGl0ZXJSZWdpb24gOiByZWdpb25MaXN0KSB7CkBAIC00MzUsMTggKzQz
NSwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JD
U1NSZWdpb25zSGlnaGxpZ2h0KFJlbmRlclJlZ2lvbgogICAgICAgICBhcnJheS0+cHVzaE9iamVj
dChyZWdpb25IaWdobGlnaHRPYmplY3QucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICByZXR1cm4g
YXJyYXkucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoYXJyYXkpOwogfQogCi1zdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQorc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNl
dEludGVnZXIoIndpZHRoIiwgc2l6ZS53aWR0aCgpKTsKICAgICByZXN1bHQtPnNldEludGVnZXIo
ImhlaWdodCIsIHNpemUuaGVpZ2h0KCkpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbkNvbnRlbnRDbGlwKFJlbmRlclJl
Z2lvbiogcmVnaW9uKQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAoUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgRnJh
bWUqIGNvbnRhaW5pbmdGcmFtZSA9IHJlZ2lvbi0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlm
ICghY29udGFpbmluZ0ZyYW1lKQpAQCAtNDY2LDkgKzQ2Niw5IEBAIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChSZW5k
ZXJSZWdpCiAgICAgRmxvYXRRdWFkIGNsaXBRdWFkID0gcmVnaW9uLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UmVjdChmbGlwcGVkUmVnaW9uUmVjdCkpOwogICAgIGNvbnRlbnRzUXVhZFRvUGFn
ZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGNsaXBRdWFkKTsKIAotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlZ2lvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICByZWdpb25PYmplY3QtPnNldEFycmF5KCJxdWFkIiwgYnVpbGRBcnJheUZv
clF1YWQoY2xpcFF1YWQpKTsKLSAgICByZXR1cm4gcmVnaW9uT2JqZWN0LnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gV1RGOjptb3ZlKHJlZ2lvbk9iamVjdCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6c2V0U2hvd2luZ1BhaW50UmVjdHMoYm9vbCBzaG93aW5nUGFpbnRSZWN0cykKQEAgLTUy
NiwxMSArNTI2LDExIEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlUGFpbnRSZWN0c1Rp
bWVyRmlyZWQoKQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYWludFJlY3RzKCkKIHsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGZyYWdtZW50c0FycmF5ID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gZnJhZ21lbnRzQXJyYXkgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogbV9w
YWludFJlY3RzKQogICAgICAgICBmcmFnbWVudHNBcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVj
dEZvclJlY3QocGFpci5zZWNvbmQpKTsKIAotICAgIGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJTGl0
ZXJhbCgidXBkYXRlUGFpbnRSZWN0cyIpLCBmcmFnbWVudHNBcnJheS5yZWxlYXNlKCkpOworICAg
IGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJTGl0ZXJhbCgidXBkYXRlUGFpbnRSZWN0cyIpLCBXVEY6
Om1vdmUoZnJhZ21lbnRzQXJyYXkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3
R3V0dGVyKCkKQEAgLTUzOCw5ICs1MzgsOSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdH
dXR0ZXIoKQogICAgIGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJTGl0ZXJhbCgiZHJhd0d1dHRlciIp
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9y
UmVuZGVyZXJGcmFnbWVudHMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGlnaGxpZ2h0
Q29uZmlnJiBjb25maWcpCitzdGF0aWMgUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVj
dEZvclJlbmRlcmVyRnJhZ21lbnRzKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpZ2hs
aWdodENvbmZpZyYgY29uZmlnKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZnJhZ21l
bnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFy
cmF5PiBmcmFnbWVudHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKIAogICAgIFJl
bmRlckZsb3dUaHJlYWQqIGNvbnRhaW5pbmdGbG93VGhyZWFkID0gcmVuZGVyZXItPmZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoIWNvbnRhaW5pbmdGbG93VGhyZWFkKSB7CkBA
IC01NjIsMTggKzU2MiwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVp
bGRPYmplY3RGb3JSZW5kZXJlckZyYWdtZW50cyhSZW5kZXJPYmplY3QqCiAgICAgICAgICAgICAg
ICAgLy8gQ29tcHV0ZSB0aGUgaGlnaGxpZ2h0IG9mIHRoZSBmcmFnbWVudCBpbnNpZGUgdGhlIGN1
cnJlbnQgcmVnaW9uLgogICAgICAgICAgICAgICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CiAgICAg
ICAgICAgICAgICAgYnVpbGRSZW5kZXJlckhpZ2hsaWdodChyZW5kZXJlciwgcmVnaW9uLCBjb25m
aWcsICZoaWdobGlnaHQsIEluc3BlY3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXcp
OwotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYWdtZW50T2JqZWN0
ID0gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKKyAgICAgICAgICAgICAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBmcmFnbWVudE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9ySGlnaGxp
Z2h0KGhpZ2hsaWdodCk7CiAKICAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjbGlwcGlu
ZyBhcmVhIG9mIHRoZSByZWdpb24uCiAgICAgICAgICAgICAgICAgZnJhZ21lbnRPYmplY3QtPnNl
dE9iamVjdCgicmVnaW9uIiwgYnVpbGRPYmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChyZWdp
b24pKTsKLSAgICAgICAgICAgICAgICBmcmFnbWVudHNBcnJheS0+cHVzaE9iamVjdChmcmFnbWVu
dE9iamVjdC5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIGZyYWdtZW50c0FycmF5LT5wdXNo
T2JqZWN0KFdURjo6bW92ZShmcmFnbWVudE9iamVjdCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRSZWdpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gZnJhZ21lbnRzQXJyYXkucmVsZWFzZSgpOwor
ICAgIHJldHVybiBXVEY6Om1vdmUoZnJhZ21lbnRzQXJyYXkpOwogfQogCiAjaWYgRU5BQkxFKENT
U19TSEFQRVMpCkBAIC02MzMsMTMgKzYzMywxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRQYXRoU2Vn
bWVudCh2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogcGF0aEVsZW1lbnQpCiAgICAgfQog
fQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2hh
cGVPdXRzaWRlKEZyYW1lKiBjb250YWluaW5nRnJhbWUsIFJlbmRlckJveCogcmVuZGVyZXIpCitz
dGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUo
RnJhbWUqIGNvbnRhaW5pbmdGcmFtZSwgUmVuZGVyQm94KiByZW5kZXJlcikKIHsKICAgICBjb25z
dCBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gcmVuZGVyZXItPnNoYXBlT3V0
c2lkZUluZm8oKTsKICAgICBpZiAoIXNoYXBlT3V0c2lkZUluZm8pCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2hhcGVPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBMYXlvdXRSZWN0IHNoYXBlQm91
bmRzID0gc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0ZWRTaGFwZVBoeXNpY2FsQm91bmRpbmdCb3go
KTsKICAgICBGbG9hdFF1YWQgc2hhcGVRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KHNoYXBlQm91bmRzKSk7CiAgICAgY29udGVudHNRdWFkVG9QYWdlKGNvbnRh
aW5pbmdGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCksIGNvbnRhaW5pbmdGcmFtZS0+
dmlldygpLCBzaGFwZVF1YWQpOwpAQCAtNjQ5LDM5ICs2NDksMzkgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNoYXBlT3V0c2lkZShGcmFtZSogY29u
dGFpbmluZ0YKICAgICBzaGFwZU91dHNpZGVJbmZvLT5jb21wdXRlZFNoYXBlKCkuYnVpbGREaXNw
bGF5UGF0aHMocGF0aHMpOwogCiAgICAgaWYgKHBhdGhzLnNoYXBlLmxlbmd0aCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgICAgICBSZWY8SW5zcGVjdG9yQXJyYXk+IHNoYXBlUGF0aCA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgUGF0aEFwcGx5SW5mbyBpbmZvOwogICAgICAgICBp
bmZvLnJvb3RWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXco
KTsKICAgICAgICAgaW5mby52aWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7Ci0gICAgICAg
IGluZm8uYXJyYXkgPSBzaGFwZVBhdGguZ2V0KCk7CisgICAgICAgIGluZm8uYXJyYXkgPSAmc2hh
cGVQYXRoLmdldCgpOwogICAgICAgICBpbmZvLnJlbmRlcmVyID0gcmVuZGVyZXI7CiAgICAgICAg
IGluZm8uc2hhcGVPdXRzaWRlSW5mbyA9IHNoYXBlT3V0c2lkZUluZm87CiAKICAgICAgICAgcGF0
aHMuc2hhcGUuYXBwbHkoJmluZm8sICZhcHBlbmRQYXRoU2VnbWVudCk7CiAKLSAgICAgICAgc2hh
cGVPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgic2hhcGUiKSwgc2hhcGVQYXRoLnJlbGVh
c2UoKSk7CisgICAgICAgIHNoYXBlT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoInNoYXBl
IiksIHNoYXBlUGF0aC5jb3B5UmVmKCkpOwogCiAgICAgICAgIGlmIChwYXRocy5tYXJnaW5TaGFw
ZS5sZW5ndGgoKSkgewogICAgICAgICAgICAgc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwotICAgICAgICAgICAgaW5mby5hcnJheSA9IHNoYXBlUGF0aC5nZXQoKTsKKyAgICAg
ICAgICAgIGluZm8uYXJyYXkgPSAmc2hhcGVQYXRoLmdldCgpOwogCiAgICAgICAgICAgICBwYXRo
cy5tYXJnaW5TaGFwZS5hcHBseSgmaW5mbywgJmFwcGVuZFBhdGhTZWdtZW50KTsKIAotICAgICAg
ICAgICAgc2hhcGVPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgibWFyZ2luU2hhcGUiKSwg
c2hhcGVQYXRoLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBzaGFwZU9iamVjdC0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJtYXJnaW5TaGFwZSIpLCBzaGFwZVBhdGguY29weVJlZigpKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiBzaGFwZU9iamVjdC5yZWxlYXNlKCk7CisgICAgcmV0
dXJuIFdURjo6bW92ZShzaGFwZU9iamVjdCk7CiB9CiAjZW5kaWYKIAotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUp
CitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5m
byhOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoIWlzPEVsZW1lbnQ+
KCpub2RlKSB8fCAhbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5m
byA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQuZG9j
dW1lbnQoKS5pc1hIVE1MRG9jdW1lbnQoKTsKQEAgLTc0NiwxMCArNzQ2LDEwIEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2Rl
KiBub2RlKQogICAgICAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmluZygicm9sZSIsIGF4T2Jq
ZWN0LT5jb21wdXRlZFJvbGVTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGVsZW1lbnRJ
bmZvLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGVsZW1lbnRJbmZvKTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0
Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3Bl
Y3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NjMs
NyArNzYzLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6
OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY28KICAgICBpZiAoIWhpZ2hsaWdodEZy
YWdtZW50cykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBoaWdobGlnaHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGhpZ2hsaWdodE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAKICAgICAvLyBUaGUgbWFpbiB2aWV3J3Mgc2Nyb2xsIG9mZnNldCBpcyBzaGFy
ZWQgYWNyb3NzIGFsbCBxdWFkcy4KICAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gbV9wYWdlLm1h
aW5GcmFtZSgpLnZpZXcoKTsKQEAgLTc3Nyw3ICs3NzcsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUo
KSBjbwogICAgICAgICAgICAgaGlnaGxpZ2h0T2JqZWN0LT5zZXRPYmplY3QoImVsZW1lbnRJbmZv
IiwgZWxlbWVudEluZm8ucmVsZWFzZSgpKTsKICAgICB9CiAgICAgICAgIAotICAgIHJldHVybiBo
aWdobGlnaHRPYmplY3QucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoaGlnaGxpZ2h0
T2JqZWN0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCgp
CkBAIC04NTksMzMgKzg1OSwzMyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmZvcmNlUGFpbnQo
KQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnJlc2V0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0
U2l6ZSwgY29uc3QgSW50U2l6ZSYgZnJhbWVWaWV3RnVsbFNpemUpCiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzZXREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXNldERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIHJlc2V0RGF0YS0+c2V0RG91YmxlKCJkZXZpY2VTY2FsZUZhY3RvciIsIG1fcGFn
ZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICByZXNldERhdGEtPnNldE9iamVjdCgidmlld3Bv
cnRTaXplIiwgYnVpbGRPYmplY3RGb3JTaXplKHZpZXdwb3J0U2l6ZSkpOwogICAgIHJlc2V0RGF0
YS0+c2V0T2JqZWN0KCJmcmFtZVZpZXdGdWxsU2l6ZSIsIGJ1aWxkT2JqZWN0Rm9yU2l6ZShmcmFt
ZVZpZXdGdWxsU2l6ZSkpOwotICAgIGV2YWx1YXRlSW5PdmVybGF5KCJyZXNldCIsIHJlc2V0RGF0
YS5yZWxlYXNlKCkpOworICAgIGV2YWx1YXRlSW5PdmVybGF5KCJyZXNldCIsIFdURjo6bW92ZShy
ZXNldERhdGEpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3Zlcmxh
eShjb25zdCBTdHJpbmcmIG1ldGhvZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNv
bW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5
PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hT
dHJpbmcobWV0aG9kKTsKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5l
dmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQt
PnRvSlNPTlN0cmluZygpLCAnKScpKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZh
bHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1l
bnQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gY29tbWFuZCA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKICAgICBjb21tYW5kLT5wdXNoU3RyaW5nKG1ldGhvZCk7CiAgICAg
Y29tbWFuZC0+cHVzaFN0cmluZyhhcmd1bWVudCk7CiAgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZy
YW1lKCkuc2NyaXB0KCkuZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNw
YXRjaCgiLCBjb21tYW5kLT50b0pTT05TdHJpbmcoKSwgJyknKSkpOwogfQogCi12b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBhcmd1bWVudCkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6
ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4mJiBhcmd1bWVudCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3RvckFycmF5PiBjb21t
YW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmco
bWV0aG9kKTsKLSAgICBjb21tYW5kLT5wdXNoVmFsdWUoYXJndW1lbnQpOworICAgIGNvbW1hbmQt
PnB1c2hWYWx1ZShXVEY6Om1vdmUoYXJndW1lbnQpKTsKICAgICBvdmVybGF5UGFnZSgpLT5tYWlu
RnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRp
c3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNPTlN0cmluZygpLCAnKScpKSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCmluZGV4IDRlZmI0NTguLmU1Y2Zl
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAt
MTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sIGlu
ZGljYXRpbmcpOwogCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjb25zdDsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29u
c3Q7CiAKICAgICB2b2lkIGZyZWVQYWdlKCk7CiBwcml2YXRlOgpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNv
bnN0IEludFNpemUmIGZyYW1lVmlld0Z1bGxTaXplKTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVy
bGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kKTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KTsKLSAgICB2b2lkIGV2
YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IGFyZ3VtZW50KTsKKyAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5
KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4m
JiBhcmd1bWVudCk7CiAKICAgICBQYWdlJiBtX3BhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBt
X2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKaW5kZXggN2UyY2JkYi4uMTBkZWY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMg
Ym9vbCBoYXNUZXh0Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAg
cmV0dXJuIHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlIHx8IHR5
cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9PSBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFn
ZUFnZW50OjpYSFJSZXNvdXJjZTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNl
RGVjb2Rlcj4gY3JlYXRlWEhSVGV4dERlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lKQorc3RhdGljIFJlZlB0cjxUZXh0UmVzb3VyY2VE
ZWNvZGVyPiBjcmVhdGVYSFJUZXh0RGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUpCiB7CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURl
Y29kZXI+IGRlY29kZXI7CiAgICAgaWYgKCF0ZXh0RW5jb2RpbmdOYW1lLmlzRW1wdHkoKSkKQEAg
LTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBj
cmVhdGVYSFJUZXh0RGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeQogICAgICAgICBkZWNvZGVy
ID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2h0bWwiLCAiVVRGLTgiKTsKICAg
ICBlbHNlCiAgICAgICAgIGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRl
eHQvcGxhaW4iLCAiVVRGLTgiKTsKLSAgICByZXR1cm4gZGVjb2RlcjsKKyAgICByZXR1cm4gV1RG
Ojptb3ZlKGRlY29kZXIpOwogfQogCiBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVz
b3VyY2VDb250ZW50KENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKiByZXN1
bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiAg
ICAgZnJhbWUubG9hZGVyKCkuY2hhbmdlTG9jYXRpb24oZnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSwgZnJhbWUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIExvY2tI
aXN0b3J5OjpObywgTG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8pOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29v
a2llKGNvbnN0IENvb2tpZSYgY29va2llKQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2ll
KQogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXROYW1lKGNvb2tpZS5uYW1lKQpAQCAtNDM1LDE0ICs0MzUsMTQgQEAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWls
ZE9iamVjdEZvckNvb2tpZShjb25zdAogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29raWU+PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+
JiBjb29raWVzTGlzdCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlz
dEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGNvb2tp
ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpDb29raWU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvb2tpZXMgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsK
IAotICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llc0xpc3QpCisgICAgZm9yIChjb25zdCBh
dXRvJiBjb29raWUgOiBjb29raWVzTGlzdCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWls
ZE9iamVjdEZvckNvb2tpZShjb29raWUpKTsKIAotICAgIHJldHVybiBjb29raWVzOworICAgIHJl
dHVybiBXVEY6Om1vdmUoY29va2llcyk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3Vy
Y2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUpCkBAIC01OTgsNyArNTk4
LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGMKICAgICByZXN1bHRzID0gQ29udGVudFNlYXJj
aFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSwgaXNSZWdleCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKK3N0
YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9i
amVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
dXJsLCBpbnQgbWF0Y2hlc0NvdW50KQogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwodXJsKQpAQCAt
ODUxLDEzICs4NTEsMTMgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QKIAogICAgIExheW91dFJl
Y3QgYWJzb2x1dGVSZWN0ID0gTGF5b3V0UmVjdChyZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QocmVjdCkpLmJvdW5kaW5nQm94KCkpOwogICAgIEZyYW1lVmlldyogdmlldyA9
IHJlbmRlcmVyLT5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICAKKwogICAgIExheW91dFJlY3Qgcm9v
dFJlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgaWYgKCF2aWV3LT5mcmFtZSgpLmlzTWFpbkZyYW1l
KCkpIHsKICAgICAgICAgSW50UmVjdCByb290Vmlld1JlY3QgPSB2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcoc25hcHBlZEludFJlY3QoYWJzb2x1dGVSZWN0KSk7CiAgICAgICAgIHJvb3RSZWN0ID0g
dmlldy0+ZnJhbWUoKS5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhyb290
Vmlld1JlY3QpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hv
d1BhaW50UmVjdHMoKSkgewogICAgICAgICBtX2NsaWVudC0+c2hvd1BhaW50UmVjdChyb290UmVj
dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTg5OCwxNCArODk4LDE1IEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpzY3JpcHRzRW5hYmxlZChib29sIGlzRW5hYmxlZCkKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+c2NyaXB0c0VuYWJsZWQoaXNFbmFibGVkKTsKIH0KIAotUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWls
ZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1l
KiBmcmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+
IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgp
CisgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
OjpjcmVhdGUoKQogICAgICAgICAuc2V0SWQoZnJhbWVJZChmcmFtZSkpCiAgICAgICAgIC5zZXRM
b2FkZXJJZChsb2FkZXJJZChmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpCiAgICAg
ICAgIC5zZXRVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKQogICAgICAgICAu
c2V0TWltZVR5cGUoZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlTUlN
RVR5cGUoKSkKLSAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0cmluZygpKTsKKyAgICAgICAgLnNldFNlY3VyaXR5T3Jp
Z2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0cmluZygpKQor
ICAgICAgICAucmVsZWFzZSgpOwogICAgIGlmIChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKQogICAg
ICAgICBmcmFtZU9iamVjdC0+c2V0UGFyZW50SWQoZnJhbWVJZChmcmFtZS0+dHJlZSgpLnBhcmVu
dCgpKSk7CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewpAQCAtOTE1LDIyICs5MTYs
MjQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVj
dG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckYKICAgICAgICAgZnJhbWVPYmplY3QtPnNldE5h
bWUobmFtZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1lT2JqZWN0OworICAgIHJldHVybiBX
VEY6Om1vdmUoZnJhbWVPYmplY3QpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZv
ckZyYW1lVHJlZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUp
OwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpGcmFtZVJlc291cmNlPj4gc3VicmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNy
ZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291
cmNlVHJlZT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU6OmNyZWF0ZSgpCi0gICAgICAgICAuc2V0RnJhbWUoZnJhbWVPYmplY3QpCi0gICAgICAg
ICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcyk7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUp
OworICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6
OmNyZWF0ZSgpCisgICAgICAgIC5zZXRGcmFtZShXVEY6Om1vdmUoZnJhbWVPYmplY3QpKQorICAg
ICAgICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcy5jb3B5UmVmKCkpCisgICAgICAgIC5yZWxl
YXNlKCk7CiAKICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2Vz
Rm9yRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlPiByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzb3VyY2VPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQog
ICAgICAgICAgICAgLnNldFVybChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpCiAgICAgICAgICAgICAu
c2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVKc29uKCpjYWNoZWRSZXNvdXJjZSkpCi0gICAgICAg
ICAgICAuc2V0TWltZVR5cGUoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7
CisgICAgICAgICAgICAuc2V0TWltZVR5cGUoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWlt
ZVR5cGUoKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChjYWNoZWRSZXNv
dXJjZS0+d2FzQ2FuY2VsZWQoKSkKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRDYW5j
ZWxlZCh0cnVlKTsKICAgICAgICAgZWxzZSBpZiAoY2FjaGVkUmVzb3VyY2UtPnN0YXR1cygpID09
IENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpCkBAIC05MzgsNyArOTQxLDcgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9y
UGFnZUFnZW50OjpidWkKICAgICAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKGNhY2hlZFJlc291cmNlKTsKICAg
ICAgICAgaWYgKCFzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc291
cmNlT2JqZWN0LT5zZXRTb3VyY2VNYXBVUkwoc291cmNlTWFwcGluZ1VSTCk7Ci0gICAgICAgIHN1
YnJlc291cmNlcy0+YWRkSXRlbShyZXNvdXJjZU9iamVjdCk7CisgICAgICAgIHN1YnJlc291cmNl
cy0+YWRkSXRlbShXVEY6Om1vdmUocmVzb3VyY2VPYmplY3QpKTsKICAgICB9CiAKICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
RnJhbWVSZXNvdXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDUzNDNhZjguLmJmMjY0YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTE2Niw4
ICsxNjYsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIG1haW5SZXNvdXJjZUNvbnRlbnQo
RnJhbWUqLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KTsKICAgICBzdGF0
aWMgYm9vbCBkYXRhQ29udGVudChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBzaXplLCBjb25z
dCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5n
KiByZXN1bHQpOwogCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpG
cmFtZT4gYnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IGJ1aWxkT2JqZWN0Rm9yRnJh
bWVUcmVlKEZyYW1lKik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
PiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFt
ZSopOwogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6Okluc3BlY3RvclBhZ2VGcm9udGVuZERpc3Bh
dGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKaW5kZXggNzc5YmU2Mi4uOGZjNDQxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3Bw
CkBAIC01NCw0MCArNTQsMzYgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
ZXBsYXk6OlJlcGxheVBvc2l0aW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKGNv
bnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlvbikKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JQb3Np
dGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+IHBvc2l0aW9uT2JqZWN0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3JlYXRlKCkKKyAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3Jl
YXRlKCkKICAgICAgICAgLnNldFNlZ21lbnRPZmZzZXQocG9zaXRpb24uc2VnbWVudE9mZnNldCkK
LSAgICAgICAgLnNldElucHV0T2Zmc2V0KHBvc2l0aW9uLmlucHV0T2Zmc2V0KTsKLQotICAgIHJl
dHVybiBwb3NpdGlvbk9iamVjdC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRJbnB1dE9mZnNldChw
b3NpdGlvbi5pbnB1dE9mZnNldCkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBp
bnB1dCwgc2l6ZV90IG9mZnNldCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25zdCBOb25k
ZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90IG9mZnNldCkKIHsKICAgICBFbmNv
ZGVkVmFsdWUgZW5jb2RlZElucHV0ID0gRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lu
cHV0QmFzZT46OmVuY29kZVZhbHVlKGlucHV0KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gaW5wdXRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSZXBsYXk6OlJlcGxheUlucHV0OjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0OjpjcmVhdGUoKQogICAgICAgICAuc2V0VHlw
ZShpbnB1dC50eXBlKCkpCiAgICAgICAgIC5zZXRPZmZzZXQob2Zmc2V0KQotICAgICAgICAuc2V0
RGF0YShlbmNvZGVkSW5wdXQuYXNPYmplY3QoKSk7Ci0KLSAgICByZXR1cm4gaW5wdXRPYmplY3Qu
cmVsZWFzZSgpOworICAgICAgICAuc2V0RGF0YShlbmNvZGVkSW5wdXQuYXNPYmplY3QoKSkKKyAg
ICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Np
b24oUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBwcnBTZXNzaW9uKQorc3RhdGljIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+IGJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9yU2Vzc2lvbihSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewotICAgIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gcHJwU2Vzc2lvbjsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U2VnbWVudElkZW50aWZpZXI+PiBzZWdtZW50cyA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFNlZ21lbnRJZGVudGlmaWVyPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBzZWdtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFNlZ21lbnRJZGVu
dGlmaWVyPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1dG8gaXQgPSBzZXNzaW9uLT5iZWdpbigp
OyBpdCAhPSBzZXNzaW9uLT5lbmQoKTsgKytpdCkKICAgICAgICAgc2VnbWVudHMtPmFkZEl0ZW0o
KCppdCktPmlkZW50aWZpZXIoKSk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBzZXNzaW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uOjpjcmVhdGUoKQorICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJ
ZChzZXNzaW9uLT5pZGVudGlmaWVyKCkpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAoc2Vzc2lvbi0+
dGltZXN0YW1wKCkpCi0gICAgICAgIC5zZXRTZWdtZW50cyhzZWdtZW50cy5yZWxlYXNlKCkpOwot
Ci0gICAgcmV0dXJuIHNlc3Npb25PYmplY3QucmVsZWFzZSgpOworICAgICAgICAuc2V0U2VnbWVu
dHMoV1RGOjptb3ZlKHNlZ21lbnRzKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAogc3RhdGlj
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblN0YXRlIGJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdlYkNvcmU6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUp
CkBAIC0xMTEsNyArMTA3LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6
U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFMKIAogY2xhc3MgU2Vy
aWFsaXplSW5wdXRUb0pTT05GdW5jdG9yIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5
OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5cGU7CisgICAgdHlwZWRlZiBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1
dD4+IFJldHVyblR5cGU7CiAKICAgICBTZXJpYWxpemVJbnB1dFRvSlNPTkZ1bmN0b3IoKQogICAg
ICAgICA6IG1faW5wdXRzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXQ+OjpjcmVhdGUoKSkgeyB9CkBAIC0xMzAsMzAgKzEy
NiwyOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gbV9pbnB1dHM7CiB9Owog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25T
ZWdtZW50PiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnQoUGFzc1JlZlB0cjxSZXBsYXlT
ZXNzaW9uU2VnbWVudD4gcHJwU2VnbWVudCkKK3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50
KFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewotICAgIFJlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IHBycFNlZ21lbnQ7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVw
bGF5SW5wdXRRdWV1ZT4+IHF1ZXVlc09iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXRRdWV1ZT46OmNyZWF0ZSgp
OworICAgIGF1dG8gcXVldWVzT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlPjo6Y3JlYXRlKCk7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oSW5wdXRRdWV1
ZTo6Q291bnQpOyBpKyspIHsKICAgICAgICAgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yIGNv
bGxlY3RvcjsKICAgICAgICAgSW5wdXRRdWV1ZSBxdWV1ZSA9IHN0YXRpY19jYXN0PElucHV0UXVl
dWU+KGkpOwotICAgICAgICBSZWZQdHI8RnVuY3RvcklucHV0Q3Vyc29yPiBmdW5jdG9yQ3Vyc29y
ID0gRnVuY3RvcklucHV0Q3Vyc29yOjpjcmVhdGUoc2VnbWVudCk7CisgICAgICAgIFJlZlB0cjxG
dW5jdG9ySW5wdXRDdXJzb3I+IGZ1bmN0b3JDdXJzb3IgPSBGdW5jdG9ySW5wdXRDdXJzb3I6OmNy
ZWF0ZShzZWdtZW50LmNvcHlSZWYoKSk7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gcXVl
dWVJbnB1dHMgPSBmdW5jdG9yQ3Vyc29yLT5mb3JFYWNoSW5wdXRJblF1ZXVlKHF1ZXVlLCBjb2xs
ZWN0b3IpOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJl
cGxheUlucHV0UXVldWU+IHF1ZXVlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5
OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHF1ZXVlT2JqZWN0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVhdGUoKQog
ICAgICAgICAgICAgLnNldFR5cGUoRW5jb2RpbmdUcmFpdHM8SW5wdXRRdWV1ZT46OmVuY29kZVZh
bHVlKHF1ZXVlKS5jb252ZXJ0VG88U3RyaW5nPigpKQotICAgICAgICAgICAgLnNldElucHV0cyhx
dWV1ZUlucHV0cyk7Ci0KLSAgICAgICAgcXVldWVzT2JqZWN0LT5hZGRJdGVtKHF1ZXVlT2JqZWN0
LnJlbGVhc2UoKSk7CisgICAgICAgICAgICAuc2V0SW5wdXRzKHF1ZXVlSW5wdXRzKQorICAgICAg
ICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgcXVldWVzT2JqZWN0LT5hZGRJdGVtKFdURjo6bW92
ZShxdWV1ZU9iamVjdCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiBzZWdtZW50T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCkKICAgICAgICAg
LnNldElkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSkKICAgICAgICAgLnNldFRpbWVzdGFtcChzZWdt
ZW50LT50aW1lc3RhbXAoKSkKLSAgICAgICAgLnNldFF1ZXVlcyhxdWV1ZXNPYmplY3QucmVsZWFz
ZSgpKTsKLQotICAgIHJldHVybiBzZWdtZW50T2JqZWN0LnJlbGVhc2UoKTsKKyAgICAgICAgLnNl
dFF1ZXVlcyhXVEY6Om1vdmUocXVldWVzT2JqZWN0KSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0K
IAogSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Okluc3BlY3RvclJlcGxheUFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFn
ZW50KQpAQCAtMzM3LDcgKzMzMSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BD
YXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBsYXlDb250
cm9sbGVyKCkuc3RvcENhcHR1cmluZygpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50
OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIHBvc2l0aW9uT2JqZWN0LCBib29sIGZhc3RSZXBsYXkpCit2b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwb3NpdGlvbk9iamVjdCwg
Ym9vbCBmYXN0UmVwbGF5KQogewogICAgIFJlcGxheVBvc2l0aW9uIHBvc2l0aW9uOwogICAgIGlm
ICghcG9zaXRpb25PYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJzZWdtZW50T2Zmc2V0
IiksIHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKSB7CkBAIC01MDcsNyArNTAxLDcgQEAgdm9pZCBJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBJbnNwZWN0b3I6OlAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNlcmlhbGl6
ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24oc2Vzc2lvbik7CisgICAg
c2VyaWFsaXplZE9iamVjdCA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihXVEY6Om1v
dmUoc2Vzc2lvbikpOwogfQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50
RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxh
eTo6U2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+JiBzZXJpYWxpemVkT2JqZWN0KQpAQCAtNTE4LDcg
KzUxMiw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlZ21lbnREYXRhKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50
KHNlZ21lbnQpOworICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rvck9iamVjdEZv
clNlZ21lbnQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaApp
bmRleCAxNzNhZWE3Li45NDI5NTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVwbGF5QWdlbnQuaApAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgdm9pZCByZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYsIGJvb2wgc2hvdWxkRmFzdEZvcndhcmQpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmLCBib29sIHNob3VsZEZhc3RG
b3J3YXJkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5VG9Db21wbGV0aW9uKEVy
cm9yU3RyaW5nJiwgYm9vbCBzaG91bGRGYXN0Rm9yd2FyZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHBhdXNlUGxheWJhY2soRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsUGxheWJhY2soRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAppbmRleCBm
MzZlODIzLi5iMDAyMjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xOTAsMTYgKzE5MCwxNiBAQCB2b2lkIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
ckRpc2Nvbm5lY3RSZQogICAgIGRpc2FibGUodW51c2VkKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRl
ck1hcCYgaGVhZGVycykKK3N0YXRpYyBSZWY8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
ckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMp
CiAgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFs
dWUpOwotICAgIHJldHVybiBoZWFkZXJzT2JqZWN0OworICAgIHJldHVybiBXVEY6Om1vdmUoaGVh
ZGVyc09iamVjdCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBSZXNv
dXJjZUxvYWRUaW1pbmcmIHRpbWluZywgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3N0YXRpYyBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2Jq
ZWN0Rm9yVGltaW5nKGNvbnN0IFJlc291cmNlTG9hZFRpbWluZyYgdGltaW5nLCBEb2N1bWVudExv
YWRlciogbG9hZGVyKQogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5hdmlnYXRpb25TdGFydChs
b2FkZXItPnRpbWluZygpLT5uYXZpZ2F0aW9uU3RhcnQoKSkKQEAgLTIxMyw1NCArMjEzLDU2IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNl
VGltaW5nPiBidWlsZE9iamVjdEZvclRpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxk
T2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3N0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdD4gYnVpbGRP
YmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiByZXF1
ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdDo6Y3JlYXRl
KCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5n
KCkpCiAgICAgICAgIC5zZXRNZXRob2QocmVxdWVzdC5odHRwTWV0aG9kKCkpCi0gICAgICAgIC5z
ZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KSkpOworICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5o
dHRwSGVhZGVyRmllbGRzKCkpKQorICAgICAgICAucmVsZWFzZSgpOwogICAgIGlmIChyZXF1ZXN0
Lmh0dHBCb2R5KCkgJiYgIXJlcXVlc3QuaHR0cEJvZHkoKS0+aXNFbXB0eSgpKQogICAgICAgICBy
ZXF1ZXN0T2JqZWN0LT5zZXRQb3N0RGF0YShyZXF1ZXN0Lmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0
cmluZygpKTsKLSAgICByZXR1cm4gcmVxdWVzdE9iamVjdDsKKyAgICByZXR1cm4gV1RGOjptb3Zl
KHJlcXVlc3RPYmplY3QpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQor
c3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIGlmIChyZXNwb25zZS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBkb3VibGUgc3RhdHVzID0gcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJz
ID0gYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSk7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhy
ZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldFVybChyZXNwb25zZS51cmwoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldFN0YXR1
cyhzdGF0dXMpCiAgICAgICAgIC5zZXRTdGF0dXNUZXh0KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0
KCkpCi0gICAgICAgIC5zZXRIZWFkZXJzKGhlYWRlcnMpCi0gICAgICAgIC5zZXRNaW1lVHlwZShy
ZXNwb25zZS5taW1lVHlwZSgpKTsKKyAgICAgICAgLnNldEhlYWRlcnMoV1RGOjptb3ZlKGhlYWRl
cnMpKQorICAgICAgICAuc2V0TWltZVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkKKyAgICAgICAg
LnJlbGVhc2UoKTsKIAogICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRGcm9tRGlza0NhY2hlKHJlc3Bv
bnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlIHx8IHJl
c3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlQWZ0
ZXJWYWxpZGF0aW9uKTsKICAgICByZXNwb25zZU9iamVjdC0+c2V0VGltaW5nKGJ1aWxkT2JqZWN0
Rm9yVGltaW5nKHJlc3BvbnNlLnJlc291cmNlTG9hZFRpbWluZygpLCBsb2FkZXIpKTsKIAotICAg
IHJldHVybiByZXNwb25zZU9iamVjdDsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3BvbnNlT2Jq
ZWN0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6Q2FjaGVkUmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZFJlc291cmNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQorc3RhdGljIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4gYnVpbGRPYmpl
Y3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkNhY2hlZFJlc291cmNlPiByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzb3VyY2VP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3Jl
YXRlKCkKICAgICAgICAgLnNldFVybChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpCiAgICAgICAgIC5z
ZXRUeXBlKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbigqY2FjaGVk
UmVzb3VyY2UpKQotICAgICAgICAuc2V0Qm9keVNpemUoY2FjaGVkUmVzb3VyY2UtPmVuY29kZWRT
aXplKCkpOworICAgICAgICAuc2V0Qm9keVNpemUoY2FjaGVkUmVzb3VyY2UtPmVuY29kZWRTaXpl
KCkpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJl
c291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGxvYWRlcik7Ci0gICAg
aWYgKHJlc291cmNlUmVzcG9uc2UpCi0gICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRSZXNwb25z
ZShyZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9i
amVjdEZvclJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGxvYWRl
cik7CisgICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKFdURjo6bW92ZShyZXNvdXJjZVJl
c3BvbnNlKSk7CiAKICAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9IEluc3BlY3RvclBhZ2VB
Z2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICgh
c291cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRT
b3VyY2VNYXBVUkwoc291cmNlTWFwcGluZ1VSTCk7CiAKLSAgICByZXR1cm4gcmVzb3VyY2VPYmpl
Y3Q7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXNvdXJjZU9iamVjdCk7CiB9CiAKIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6On5JbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkKQEAgLTQ4Miw5ICs0ODQs
OSBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
clN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVucwogICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0WEhS
UmVwbGF5RGF0YShyZXF1ZXN0SWQsIHhoclJlcGxheURhdGEpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OndpbGxMb2FkWEhSKFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBQYXNz
UmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywg
Ym9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Ondp
bGxMb2FkWEhSKFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9y
bURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRp
YWxzKQogewotICAgIFJlZlB0cjxYSFJSZXBsYXlEYXRhPiB4aHJSZXBsYXlEYXRhID0gWEhSUmVw
bGF5RGF0YTo6Y3JlYXRlKG1ldGhvZCwgdXJsLCBhc3luYywgZm9ybURhdGEsIGhlYWRlcnMsIGlu
Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgUmVmUHRyPFhIUlJlcGxheURhdGE+IHhoclJlcGxheURh
dGEgPSBYSFJSZXBsYXlEYXRhOjpjcmVhdGUobWV0aG9kLCB1cmwsIGFzeW5jLCBXVEY6Om1vdmUo
Zm9ybURhdGEpLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpOwogCiAgICAgbV9wZW5kaW5n
WEhSUmVwbGF5RGF0YS5zZXQoY2xpZW50LCBXVEY6Om1vdmUoeGhyUmVwbGF5RGF0YSkpOwogfQpA
QCAtNTUwLDIyICs1NTIsMjQgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRTY2hl
ZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5
bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yID0gYnVpbGRJbml0aWF0b3JPYmplY3QoJmRvY3VtZW50
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50
KiBkb2N1bWVudCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50
KiBkb2N1bWVudCkKIHsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0g
Y3JlYXRlU2NyaXB0Q2FsbFN0YWNrKEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRl
KCksIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgaWYg
KHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZS0+c2l6ZSgpID4gMCkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAg
ICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6
OlR5cGU6OlNjcmlwdCk7CisgICAgICAgIGF1dG8gaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpTY3Jp
cHQpCisgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNl
dFN0YWNrVHJhY2Uoc3RhY2tUcmFjZS0+YnVpbGRJbnNwZWN0b3JBcnJheSgpKTsKLSAgICAgICAg
cmV0dXJuIGluaXRpYXRvck9iamVjdDsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShpbml0aWF0
b3JPYmplY3QpOwogICAgIH0KIAogICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+c2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyKCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUo
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpQYXJzZXIpOwor
ICAgICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6UGFyc2VyKQorICAgICAgICAgICAg
LnJlbGVhc2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRVcmwoZG9jdW1lbnQtPnVy
bCgpLnN0cmluZygpKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRMaW5lTnVtYmVyKGRv
Y3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKS0+dGV4dFBvc2l0aW9uKCkubV9saW5l
Lm9uZUJhc2VkSW50KCkpOwotICAgICAgICByZXR1cm4gaW5pdGlhdG9yT2JqZWN0OworICAgICAg
ICByZXR1cm4gV1RGOjptb3ZlKGluaXRpYXRvck9iamVjdCk7CiAgICAgfQogCiAgICAgaWYgKG1f
aXNSZWNhbGN1bGF0aW5nU3R5bGUgJiYgbV9zdHlsZVJlY2FsY3VsYXRpb25Jbml0aWF0b3IpCkBA
IC01ODUsMTggKzU4OSwyMCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZENyZWF0
ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0
PiByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0
UmVxdWVzdDo6Y3JlYXRlKCkKLSAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFk
ZXJzKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChJZGVudGlmaWVyc0ZhY3Rvcnk6
OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIHJlcXVlc3RPYmplY3QpOworICAg
IGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNv
Y2tldFJlcXVlc3Q6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAgIC5yZWxlYXNlKCk7
CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVx
dWVzdChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1w
KCksIFdURjo6bW92ZShyZXF1ZXN0T2JqZWN0KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlPiBy
ZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJl
c3BvbnNlOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFN0YXR1cyhyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKQogICAgICAgICAuc2V0U3RhdHVzVGV4
dChyZXNwb25zZS5odHRwU3RhdHVzVGV4dCgpKQotICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9i
amVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpKSk7Ci0gICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPndlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoSWRlbnRp
ZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCByZXNwb25z
ZU9iamVjdCk7CisgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQorICAgICAgICAucmVsZWFzZSgpOworICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKElkZW50
aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgV1RGOjpt
b3ZlKHJlc3BvbnNlT2JqZWN0KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQpAQCAtNjA2LDIwICs2
MTIsMjIgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRDbG9zZVdlYlNvY2tldCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
V2ViU29ja2V0RnJhbWUmIGZyYW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGZyYW1lT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhm
cmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShTdHJpbmcoZnJhbWUucGF5bG9h
ZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJT
b2NrZXRGcmFtZVJlY2VpdmVkKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZp
ZXIpLCB0aW1lc3RhbXAoKSwgZnJhbWVPYmplY3QpOworICAgICAgICAuc2V0UGF5bG9hZERhdGEo
U3RyaW5nKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICAucmVs
ZWFzZSgpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRGcmFtZVJlY2VpdmVk
KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwg
V1RGOjptb3ZlKGZyYW1lT2JqZWN0KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
V2ViU29ja2V0RnJhbWUmIGZyYW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGZyYW1lT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhm
cmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2FkRGF0YShTdHJpbmcoZnJhbWUucGF5bG9h
ZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJT
b2NrZXRGcmFtZVNlbnQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciks
IHRpbWVzdGFtcCgpLCBmcmFtZU9iamVjdCk7CisgICAgICAgIC5zZXRQYXlsb2FkRGF0YShTdHJp
bmcoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCisgICAgICAgIC5yZWxlYXNl
KCk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1lU2VudChJZGVudGlm
aWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92
ZShmcmFtZU9iamVjdCkpOwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJl
Y2VpdmVXZWJTb2NrZXRGcmFtZUVycm9yKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCkBAIC02NTAsOSArNjU4LDkgQEAgdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBtX2V4dHJhUmVxdWVzdEhl
YWRlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRFeHRy
YUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IGhlYWRlcnMpCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldEV4dHJhSFRUUEhlYWRl
cnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGhlYWRlcnMp
CiB7Ci0gICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzID0gaGVhZGVyczsKKyAgICBtX2V4dHJhUmVx
dWVzdEhlYWRlcnMgPSBoZWFkZXJzLmNvcHlSZWYoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVk
KQpAQCAtNzM5LDcgKzc0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0Q2Fj
aGVEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgY2FjaGVEaXNhYmxlZCkKICAgICAgICAgbWVt
b3J5Q2FjaGUoKS5ldmljdFJlc291cmNlcygpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNl
QWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFBhc3NSZWZQdHI8TG9hZFJlc291
cmNlQ2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojps
b2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYg
Y2FsbGJhY2spCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmFzc2VydEZyYW1l
KGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNzUxLDggKzc1OSw2
IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBSZWZQdHI8TG9hZFJlc291cmNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2FsbGJhY2s7Ci0K
ICAgICBVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CiAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoQVND
SUlMaXRlcmFsKCJHRVQiKSk7CkBAIC03NjQsNyArNzcwLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50Ojpsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcKICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IEFsbG93Q3Jvc3NP
cmlnaW5SZXF1ZXN0czsKIAogICAgIC8vIEluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQg
ZGVsZXRlcyBpdHNlbGYgd2hlbiB0aGUgbG9hZCBjb21wbGV0ZXMuCi0gICAgSW5zcGVjdG9yVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogaW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCA9IG5l
dyBJbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KGNhbGxiYWNrKTsKKyAgICBJbnNwZWN0
b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBpbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
ID0gbmV3IEluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQoV1RGOjptb3ZlKGNhbGxiYWNr
KSk7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSgqZG9jdW1lbnQsICppbnNwZWN0b3JUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50LCByZXF1ZXN0LCBvcHRpb25zKTsKICAgICBpZiAoIWxvYWRlcikgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgK
aW5kZXggOWMzMTMzYi4uNzAwY2YzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRM
b2FkZXImLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgdm9pZCBkaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXImLCBDYWNoZWRSZXNvdXJjZSYpOwogICAgIHZv
aWQgZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kik7Ci0gICAgdm9pZCB3
aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IGNvbnN0IFVSTCYsIGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGJvZHksIGNvbnN0
IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZW5kZW50aWFscyk7CisgICAg
dm9pZCB3aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIGNvbnN0IFVSTCYsIGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiBib2R5LCBj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVuZGVudGlhbHMpOwog
ICAgIHZvaWQgZGlkRmFpbFhIUkxvYWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwogICAg
IHZvaWQgZGlkRmluaXNoWEhSTG9hZGluZyhUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7CiAgICAgdm9p
ZCBkaWRSZWNlaXZlWEhSUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTEx
OCwxMiArMTE4LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkU2NoZWR1bGVTdHlsZVJlY2Fs
Y3VsYXRpb24oRG9jdW1lbnQmKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCopOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGJ1aWxk
SW5pdGlhdG9yT2JqZWN0KERvY3VtZW50Kik7CiAKICAgICAvLyBDYWxsZWQgZnJvbSBmcm9udGVu
ZC4KICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFJlc3BvbnNl
Qm9keShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRl
bnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZXBs
YXlYSFIoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGNhbkNsZWFyQnJvd3NlckNhY2hlKEVycm9yU3RyaW5nJiwgYm9vbCop
IG92ZXJyaWRlOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
Y2FuQ2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyYsIGJvb2wqKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWNoZURpc2FibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBj
YWNoZURpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUGFz
c1JlZlB0cjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgogICAgIHZvaWQgZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggNzBmMDhkMi4uYTQzYTMwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAt
NzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgUnVsZVNvdXJjZURhdGFMaXN0KiBzb3VyY2VEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9CiAgICAgdm9pZCBzZXRTb3Vy
Y2VEYXRhKHN0ZDo6dW5pcXVlX3B0cjxSdWxlU291cmNlRGF0YUxpc3Q+KTsKICAgICBib29sIGhh
c1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEgIT0gbnVsbHB0cjsgfQot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRh
QXQodW5zaWduZWQpIGNvbnN0OworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0
YT4gcnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEy
NSw3ICsxMjUsNyBAQCB2b2lkIFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNvdXJjZURhdGEoc3RkOjp1
bmlxdWVfcHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gc291cmNlRAogICAgIGZsYXR0ZW5Tb3VyY2VE
YXRhKHNvdXJjZURhdGEuZ2V0KCksIG1fc291cmNlRGF0YS5nZXQoKSk7CiB9CiAKLVBhc3NSZWZQ
dHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3Vy
Y2VEYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CitSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNv
dXJjZURhdGE+IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNTb3VyY2VEYXRhKCkgfHwgaW5kZXggPj0gbV9zb3Vy
Y2VEYXRhLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQ0LDcgKzE0NCw3
IEBAIGVudW0gTWVkaWFMaXN0U291cmNlIHsKICAgICBNZWRpYUxpc3RTb3VyY2VJbXBvcnRSdWxl
CiB9OwogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJj
ZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSwg
VmVjdG9yPHNpemVfdD4qIGxpbmVFbmRpbmdzKQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNv
dXJjZVJhbmdlJiByYW5nZSwgVmVjdG9yPHNpemVfdD4qIGxpbmVFbmRpbmdzKQogewogICAgIGlm
ICghbGluZUVuZGluZ3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTU5LDcgKzE1OSw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFu
Z2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE+IGJ1aWxk
TWVkaWFPYmplY3QoY29uc3QgTWVkaWFMaXN0KiBtZWRpYSwgTWVkaWFMaXN0U291cmNlIG1lZGlh
TGlzdFNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCitzdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE+IGJ1aWxkTWVkaWFPYmplY3QoY29uc3QgTWVkaWFM
aXN0KiBtZWRpYSwgTWVkaWFMaXN0U291cmNlIG1lZGlhTGlzdFNvdXJjZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpCiB7CiAgICAgLy8gTWFrZSBjZXJ0YWluIGNvbXBpbGVycyBoYXBweSBieSBp
bml0aWFsaXppbmcgfHNvdXJjZXwgdXAtZnJvbnQuCiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NNZWRpYTo6U291cmNlIHNvdXJjZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTTWVkaWE6OlNvdXJjZTo6SW5saW5lU2hlZXQ7CkBAIC0xNzgsMTggKzE3OCwxOSBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhPiBidWlsZE1l
ZGlhT2JqZWN0KGNvbnN0IE1lZAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4gbWVkaWFPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhOjpjcmVhdGUoKQorICAgIGF1dG8gbWVkaWFPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0VGV4dChtZWRpYS0+bWVkaWFUZXh0KCkpCi0gICAgICAgIC5zZXRTb3VyY2Uoc291cmNl
KTsKKyAgICAgICAgLnNldFNvdXJjZShzb3VyY2UpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAg
ICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpIHsKICAgICAgICAgbWVkaWFPYmplY3QtPnNldFNv
dXJjZVVSTChzb3VyY2VVUkwpOwogICAgICAgICBtZWRpYU9iamVjdC0+c2V0U291cmNlTGluZSht
ZWRpYS0+cXVlcmllcygpLT5sYXN0TGluZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1lZGlhT2Jq
ZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKG1lZGlhT2JqZWN0KTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCkKK3N0YXRpYyBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3Qo
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIHsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMjAyLDEwICsyMDMsMTAgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBsaXN0UnVsZXMuYXBwZW5kKGl0ZW0pOwog
ICAgIH0KLSAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShs
aXN0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3Qo
Q1NTUnVsZSogcnVsZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3Qo
Q1NTUnVsZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMjIyLDcgKzIyMyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NT
U1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRp
YyB2b2lkIGZpbGxNZWRpYUxpc3RDaGFpbihDU1NSdWxlKiBydWxlLCBBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU01lZGlhPiogbWVkaWFBcnJheSkKK3N0YXRpYyB2b2lkIGZpbGxN
ZWRpYUxpc3RDaGFpbihDU1NSdWxlKiBydWxlLCBBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU01lZGlhPiYgbWVkaWFBcnJheSkKIHsKICAgICBNZWRpYUxpc3QqIG1lZGlhTGlzdDsK
ICAgICBDU1NSdWxlKiBwYXJlbnRSdWxlID0gcnVsZTsKQEAgLTI1MCw3ICsyNTEsNyBAQCBzdGF0
aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDUwogICAgICAgICAgICAgc291cmNlVVJMID0gIiI7CiAKICAgICAg
ICAgaWYgKG1lZGlhTGlzdCAmJiBtZWRpYUxpc3QtPmxlbmd0aCgpKQotICAgICAgICAgICAgbWVk
aWFBcnJheS0+YWRkSXRlbShidWlsZE1lZGlhT2JqZWN0KG1lZGlhTGlzdCwgaXNNZWRpYVJ1bGUg
PyBNZWRpYUxpc3RTb3VyY2VNZWRpYVJ1bGUgOiBNZWRpYUxpc3RTb3VyY2VJbXBvcnRSdWxlLCBz
b3VyY2VVUkwpKTsKKyAgICAgICAgICAgIG1lZGlhQXJyYXkuYWRkSXRlbShidWlsZE1lZGlhT2Jq
ZWN0KG1lZGlhTGlzdCwgaXNNZWRpYVJ1bGUgPyBNZWRpYUxpc3RTb3VyY2VNZWRpYVJ1bGUgOiBN
ZWRpYUxpc3RTb3VyY2VJbXBvcnRSdWxlLCBzb3VyY2VVUkwpKTsKIAogICAgICAgICBpZiAocGFy
ZW50UnVsZS0+cGFyZW50UnVsZSgpKQogICAgICAgICAgICAgcGFyZW50UnVsZSA9IHBhcmVudFJ1
bGUtPnBhcmVudFJ1bGUoKTsKQEAgLTI2Niw3ICsyNjcsNyBAQCBzdGF0aWMgdm9pZCBmaWxsTWVk
aWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDUwogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0gc3R5bGVTaGVldC0+Y29u
dGVudHMoKS5iYXNlVVJMKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwotICAgICAgICAgICAgICAgICAgICBtZWRpYUFy
cmF5LT5hZGRJdGVtKGJ1aWxkTWVkaWFPYmplY3QobWVkaWFMaXN0LCBzdHlsZVNoZWV0LT5vd25l
ck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxpbmtlZFNoZWV0IDogTWVkaWFMaXN0U291cmNlSW5s
aW5lU2hlZXQsIHNvdXJjZVVSTCkpOworICAgICAgICAgICAgICAgICAgICBtZWRpYUFycmF5LmFk
ZEl0ZW0oYnVpbGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIHN0eWxlU2hlZXQtPm93bmVyTm9kZSgp
ID8gTWVkaWFMaXN0U291cmNlTGlua2VkU2hlZXQgOiBNZWRpYUxpc3RTb3VyY2VJbmxpbmVTaGVl
dCwgc291cmNlVVJMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHBhcmVu
dFJ1bGUgPSBzdHlsZVNoZWV0LT5vd25lclJ1bGUoKTsKICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50UnVsZSkKQEAgLTI4MiwxMiArMjgzLDEyIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyPiBjcmVhdGVDU1NQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlcj4oZG9jdW1lbnQgPyBDU1NQYXJzZXJDb250ZXh0KCpk
b2N1bWVudCkgOiBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwogfQogCi1QYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lk
JiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KQorUmVmPEluc3BlY3RvclN0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6Y3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBSZWZQdHI8
Q1NTU3R5bGVEZWNsYXJhdGlvbj4mJiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50
U3R5bGVTaGVldCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlKHN0
eWxlSWQsIHN0eWxlLCBwYXJlbnRTdHlsZVNoZWV0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSW5zcGVjdG9yU3R5bGUoc3R5bGVJZCwgV1RGOjptb3ZlKHN0eWxlKSwgcGFyZW50U3R5bGVT
aGVldCkpOwogfQogCi1JbnNwZWN0b3JTdHlsZTo6SW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmIHN0eWxlSWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUs
IEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCitJbnNwZWN0b3JTdHlsZTo6
SW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFJlZlB0cjxDU1NT
dHlsZURlY2xhcmF0aW9uPiYmIHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHls
ZVNoZWV0KQogICAgIDogbV9zdHlsZUlkKHN0eWxlSWQpCiAgICAgLCBtX3N0eWxlKHN0eWxlKQog
ICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpCkBAIC0zMDAsOSArMzAx
LDkgQEAgSW5zcGVjdG9yU3R5bGU6On5JbnNwZWN0b3JTdHlsZSgpCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3QK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0
ID0gc3R5bGVXaXRoUHJvcGVydGllcygpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7CiAgICAgaWYgKCFt
X3N0eWxlSWQuaXNFbXB0eSgpKQogICAgICAgICByZXN1bHQtPnNldFN0eWxlSWQobV9zdHlsZUlk
LmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQ+KCkp
OwogCkBAIC0zMTMsMjQgKzMxNCwyNSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eQogICAgIGlm
IChzb3VyY2VEYXRhKQogICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VP
YmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHlsZVNoZWV0LT5saW5l
RW5kaW5ncygpLmdldCgpKSk7CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25z
dAorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlG
b3JDb21wdXRlZFN0eWxlKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIGF1dG8g
cmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKICAgICBWZWN0b3I8SW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eT4gcHJvcGVydGllczsKICAgICBwb3B1bGF0ZUFsbFByb3BlcnRp
ZXMoJnByb3BlcnRpZXMpOwogCiAgICAgZm9yIChWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eT46Oml0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpLCBpdEVuZCA9IHByb3BlcnRpZXMu
ZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291
cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9IGl0LT5zb3VyY2VEYXRhOwotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IGVudHJ5
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNy
ZWF0ZSgpCisgICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKHBy
b3BlcnR5RW50cnkubmFtZSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZh
bHVlKTsKLSAgICAgICAgcmVzdWx0LT5hZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7CisgICAgICAg
ICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSkKKyAgICAgICAgICAgIC5yZWxlYXNl
KCk7CisgICAgICAgIHJlc3VsdC0+YWRkSXRlbShXVEY6Om1vdmUoZW50cnkpKTsKICAgICB9CiAK
LSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3Vs
dCk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIGRvZXMgdGhlIGZvbGxvd2luZyBwcmVwcm9jZXNzaW5n
IG9mIHxwcm9wZXJ0eVRleHR8IHdpdGggfG92ZXJ3cml0ZXwgPT0gZmFsc2UgYW5kIHxpbmRleHwg
cGFzdCB0aGUgbGFzdCBhY3RpdmUgcHJvcGVydHk6CkBAIC01MDMsMTMgKzUwNSwxMyBAQCBib29s
IEluc3BlY3RvclN0eWxlOjpwb3B1bGF0ZUFsbFByb3BlcnRpZXMoVmVjdG9yPEluc3BlY3RvclN0
eWxlUHJvcGVydHk+KiByZXN1bAogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdp
dGhQcm9wZXJ0aWVzKCkgY29uc3QKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0
eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAg
VmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IHByb3BlcnRpZXM7CiAgICAgcG9wdWxhdGVB
bGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKIAotICAgIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj4gcHJvcGVydGllc09iamVjdCA9IEFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+OjpjcmVhdGUoKTsKLSAgICBSZWZQ
dHI8QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT4+IHNob3J0
aGFuZEVudHJpZXMgPSBBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVu
dHJ5Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBwcm9wZXJ0aWVzT2JqZWN0ID0gQXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIGF1dG8gc2hv
cnRoYW5kRW50cmllcyA9IEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5k
RW50cnk+OjpjcmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZl
UHJvcGVydHk7CiAgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRoYW5kczsKICAgICBTdHJp
bmcgcHJldmlvdXNQcmlvcml0eTsKQEAgLTUzMiw5ICs1MzQsMTAgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRo
UHJvcGVydGkKIAogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eT4gcHJvcGVydHkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
OjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUobmFtZS5sb3dlcigpKQotICAgICAgICAg
ICAgLnNldFZhbHVlKHByb3BlcnR5RW50cnkudmFsdWUpOworICAgICAgICAgICAgLnNldFZhbHVl
KHByb3BlcnR5RW50cnkudmFsdWUpCisgICAgICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgICAg
IHByb3BlcnRpZXNPYmplY3QtPmFkZEl0ZW0ocHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0aWVz
T2JqZWN0LT5hZGRJdGVtKHByb3BlcnR5LmNvcHlSZWYoKSk7CiAKICAgICAgICAgLy8gRGVmYXVs
dCAicGFyc2VkT2siID09IHRydWUuCiAgICAgICAgIGlmICghcHJvcGVydHlFbnRyeS5wYXJzZWRP
aykKQEAgLTYwMCwxMCArNjAzLDExIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpCiAgICAgICAg
ICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVu
dHJ5PiBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk6OmNy
ZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuc2V0TmFtZShzaG9ydGhhbmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLnNldFZhbHVlKHNob3J0aGFuZFZhbHVlKHNob3J0aGFuZCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc2hvcnRoYW5kRW50cmllcy0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9ydGhhbmRWYWx1ZShzaG9ydGhh
bmQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzaG9ydGhhbmRFbnRyaWVzLT5hZGRJdGVtKFdURjo6bW92ZShlbnRyeSkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpAQCAtNjE1LDEyICs2MTksMTIgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGkKICAgICB9CiAK
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkK
LSAgICAgICAgLnNldENzc1Byb3BlcnRpZXMocHJvcGVydGllc09iamVjdC5yZWxlYXNlKCkpCi0g
ICAgICAgIC5zZXRTaG9ydGhhbmRFbnRyaWVzKHNob3J0aGFuZEVudHJpZXMucmVsZWFzZSgpKQor
ICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhXVEY6Om1vdmUocHJvcGVydGllc09iamVjdCkpCisg
ICAgICAgIC5zZXRTaG9ydGhhbmRFbnRyaWVzKFdURjo6bW92ZShzaG9ydGhhbmRFbnRyaWVzKSkK
ICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
SW5zcGVjdG9yU3R5bGU6OmV4dHJhY3RTb3VyY2VEYXRhKCkgY29uc3QKK1JlZlB0cjxDU1NSdWxl
U291cmNlRGF0YT4gSW5zcGVjdG9yU3R5bGU6OmV4dHJhY3RTb3VyY2VEYXRhKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcGFyZW50U3R5bGVTaGVldCB8fCAhbV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1
cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NDksOSAr
NzUzLDkgQEAgTmV3TGluZUFuZFdoaXRlc3BhY2UmIEluc3BlY3RvclN0eWxlOjpuZXdMaW5lQW5k
V2hpdGVzcGFjZURlbGltaXRlcnMoKSBjb25zdAogICAgIHJldHVybiBtX2Zvcm1hdDsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVh
dGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkws
IExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0
cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcm
IGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIHBhZ2VTdHlsZVNoZWV0LCBv
cmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgV1RGOjptb3ZlKHBhZ2VTdHlsZVNo
ZWV0KSwgb3JpZ2luLCBkb2N1bWVudFVSTCwgbGlzdGVuZXIpKTsKIH0KIAogLy8gc3RhdGljCkBA
IC03NjIsMTAgKzc2NiwxMCBAQCBTdHJpbmcgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVl
dFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCkKICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldChJbnNw
ZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVu
ZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldChJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3Rl
bmVyKiBsaXN0ZW5lcikKICAgICA6IG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faWQo
aWQpCi0gICAgLCBtX3BhZ2VTdHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQorICAgICwgbV9wYWdl
U3R5bGVTaGVldChXVEY6Om1vdmUocGFnZVN0eWxlU2hlZXQpKQogICAgICwgbV9vcmlnaW4ob3Jp
Z2luKQogICAgICwgbV9kb2N1bWVudFVSTChkb2N1bWVudFVSTCkKICAgICAsIG1faXNSZXZhbGlk
YXRpbmcoZmFsc2UpCkBAIC05NTMsNyArOTU3LDcgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpydWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdAogCiB9
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKK1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQogewogICAgIENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkK
QEAgLTk2MSwxOSArOTY1LDIwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpCiAKICAgICBSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gYXNDU1NSdWxlTGlzdChzdHlsZVNoZWV0KTsK
IAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5
PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5Ojpj
cmVhdGUoKQorICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hlZXRJZChpZCgpKQot
ICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgp
KSk7CisgICAgICAgIC5zZXRSdWxlcyhidWlsZEFycmF5Rm9yUnVsZUxpc3QoY3NzUnVsZUxpc3Qu
Z2V0KCkpKQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgU3RyaW5nIHN0eWxlU2hlZXRUZXh0
OwogICAgIGJvb2wgc3VjY2VzcyA9IGdldFRleHQoJnN0eWxlU2hlZXRUZXh0KTsKICAgICBpZiAo
c3VjY2VzcykKICAgICAgICAgcmVzdWx0LT5zZXRUZXh0KHN0eWxlU2hlZXRUZXh0KTsKIAotICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRI
ZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8o
KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAg
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYg
KCFzdHlsZVNoZWV0KQpAQCAtOTkxLDMwICs5OTYsMzEgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmIKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBl
cihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9y
KQorc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWls
ZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBjb25z
dCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGluc3BlY3RvclNlbGVjdG9yID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcjo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFRleHQoc2VsZWN0
b3JUZXh0KTsKKyAgICBhdXRvIGluc3BlY3RvclNlbGVjdG9yID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTZWxlY3Rvcjo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFRleHQoc2VsZWN0b3JU
ZXh0KQorICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBz
cGVjaWZpY2l0eSA9IHNlbGVjdG9yLnN0YXRpY1NwZWNpZmljaXR5KG9rKTsKIAogICAgIGlmIChv
aykgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4gdHVw
bGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byB0dXBsZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOwog
ICAgICAgICB0dXBsZS0+YWRkSXRlbShzdGF0aWNfY2FzdDxpbnQ+KChzcGVjaWZpY2l0eSAmIENT
U1NlbGVjdG9yOjppZE1hc2spID4+IDE2KSk7CiAgICAgICAgIHR1cGxlLT5hZGRJdGVtKHN0YXRp
Y19jYXN0PGludD4oKHNwZWNpZmljaXR5ICYgQ1NTU2VsZWN0b3I6OmNsYXNzTWFzaykgPj4gOCkp
OwogICAgICAgICB0dXBsZS0+YWRkSXRlbShzdGF0aWNfY2FzdDxpbnQ+KHNwZWNpZmljaXR5ICYg
Q1NTU2VsZWN0b3I6OmVsZW1lbnRNYXNrKSk7Ci0gICAgICAgIGluc3BlY3RvclNlbGVjdG9yLT5z
ZXRTcGVjaWZpY2l0eSh0dXBsZS5yZWxlYXNlKCkpOworICAgICAgICBpbnNwZWN0b3JTZWxlY3Rv
ci0+c2V0U3BlY2lmaWNpdHkoV1RGOjptb3ZlKHR1cGxlKSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IGluc3BlY3RvclNlbGVjdG9yLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGluc3Bl
Y3RvclNlbGVjdG9yKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9y
c0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEsIGNvbnN0IFN0
cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKK3N0
YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJj
ZURhdGEqIHNvdXJjZURhdGEsIGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiwgY29tbWVudCwgKCIvXFwqW15dKj9c
XCovIiwgVGV4dENhc2VTZW5zaXRpdmUsIEpTQzo6WWFycjo6TXVsdGlsaW5lRW5hYmxlZCkpOwog
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CisgICAg
YXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CiAgICAgY29uc3QgU2VsZWN0b3JSYW5n
ZUxpc3QmIHJhbmdlcyA9IHNvdXJjZURhdGEtPnNlbGVjdG9yUmFuZ2VzOwogICAgIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gcmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewpAQCAtMTAy
NywxNSArMTAzMywxNSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdAogCiAgICAgICAgIHNlbGVj
dG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKTsKICAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yKQogewogICAgIHJldHVybiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKHNl
bGVjdG9yLT5zZWxlY3RvclRleHQoKSwgKnNlbGVjdG9yKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6
YnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlKQorUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpi
dWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWRE
YXRhUmVhZHkoKSkKQEAgLTEwNTMsMjYgKzEwNTksMjcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmoKICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxp
c3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNl
bGVjdG9yKSkKICAgICAgICAgICAgIHNlbGVjdG9ycy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNl
bGVjdG9yKHNlbGVjdG9yKSk7CiAgICAgfQotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlNlbGVjdG9yTGlzdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
ZWxlY3Rvckxpc3Q6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlNlbGVjdG9yTGlzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlbGVjdG9ycyhz
ZWxlY3RvcnMucmVsZWFzZSgpKQogICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQpCiAgICAg
ICAgIC5yZWxlYXNlKCk7CiAgICAgaWYgKHNvdXJjZURhdGEpCiAgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Us
IGxpbmVFbmRpbmdzKCkuZ2V0KCkpKTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZv
clJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0
eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcmVzdWx0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIGF1dG8g
cmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0U2VsZWN0b3JMaXN0KGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JMaXN0KHJ1bGUpKQog
ICAgICAgICAuc2V0U291cmNlTGluZShydWxlLT5zdHlsZVJ1bGUoKS5zb3VyY2VMaW5lKCkpCiAg
ICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCi0gICAgICAgIC5zZXRTdHlsZShidWlsZE9iamVj
dEZvclN0eWxlKCZydWxlLT5zdHlsZSgpKSk7CisgICAgICAgIC5zZXRTdHlsZShidWlsZE9iamVj
dEZvclN0eWxlKCZydWxlLT5zdHlsZSgpKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIC8v
ICJzb3VyY2VVUkwiIGlzIHByZXNlbnQgb25seSBmb3IgcmVndWxhciBydWxlcywgb3RoZXJ3aXNl
ICJvcmlnaW4iIHNob3VsZCBiZSB1c2VkIGluIHRoZSBmcm9udGVuZC4KICAgICBpZiAobV9vcmln
aW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpSZWd1bGFy
KQpAQCAtMTA4NCwxNiArMTA5MSwxNiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGbwogICAgICAg
ICAgICAgcmVzdWx0LT5zZXRSdWxlSWQoaWQuYXNQcm90b2NvbFZhbHVlPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4+IG1lZGlhQXJyYXkgPSBBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhPjo6Y3JlYXRlKCk7CisgICAgYXV0byBtZWRp
YUFycmF5ID0gQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT46OmNyZWF0
ZSgpOwogCiAgICAgZmlsbE1lZGlhTGlzdENoYWluKHJ1bGUsIG1lZGlhQXJyYXkuZ2V0KCkpOwog
ICAgIGlmIChtZWRpYUFycmF5LT5sZW5ndGgoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRNZWRpYSht
ZWRpYUFycmF5LnJlbGVhc2UoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0TWVkaWEoV1RGOjptb3Zl
KG1lZGlhQXJyYXkpKTsKIAotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVy
biBXVEY6Om1vdmUocmVzdWx0KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBzb3VyY2VEYXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKQEAgLTEx
MTksNyArMTEyNiw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJl
c3VsdCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0U3R5bGVUZXh0KGNvbnN0
IEluc3BlY3RvckNTU0lkJiBpZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBTdHJpbmcqIG9sZFRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTE2NCw3ICsxMTcxLDcgQEAgYm9vbCBJbnNwZWN0b3JT
dHlsZVNoZWV0Ojp0b2dnbGVQcm9wZXJ0eShjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIHVuc2ln
bmVkIHByb3AKICAgICBib29sIHN1Y2Nlc3MgPSBpbnNwZWN0b3JTdHlsZS0+dG9nZ2xlUHJvcGVy
dHkocHJvcGVydHlJbmRleCwgZGlzYWJsZSwgZWMpOwogICAgIGlmIChzdWNjZXNzKSB7CiAgICAg
ICAgIGlmIChkaXNhYmxlKQotICAgICAgICAgICAgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShpbnNw
ZWN0b3JTdHlsZSk7CisgICAgICAgICAgICByZW1lbWJlckluc3BlY3RvclN0eWxlKGluc3BlY3Rv
clN0eWxlLmNvcHlSZWYoKSk7CiAgICAgICAgIGVsc2UgaWYgKCFpbnNwZWN0b3JTdHlsZS0+aGFz
RGlzYWJsZWRQcm9wZXJ0aWVzKCkpCiAgICAgICAgICAgICBmb3JnZXRJbnNwZWN0b3JTdHlsZShp
bnNwZWN0b3JTdHlsZS0+Y3NzU3R5bGUoKSk7CiAgICAgICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdl
ZCgpOwpAQCAtMTE5NSw3ICsxMjAyLDcgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaXJl
U3R5bGVTaGVldENoYW5nZWQoKQogICAgICAgICBtX2xpc3RlbmVyLT5zdHlsZVNoZWV0Q2hhbmdl
ZCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpCitSZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9y
SWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQogewogICAgIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlID0gc3R5bGVGb3JJZChpZCk7CiAgICAgaWYgKCFzdHlsZSkKQEAgLTEyMDcsNyArMTIx
NCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omlu
c3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjCiAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0
cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpCit2b2lkIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiYmIGluc3Bl
Y3RvclN0eWxlKQogewogICAgIG1faW5zcGVjdG9yU3R5bGVzLnNldChpbnNwZWN0b3JTdHlsZS0+
Y3NzU3R5bGUoKSwgaW5zcGVjdG9yU3R5bGUpOwogfQpAQCAtMTQxNywyMyArMTQyNCwyMyBAQCBi
b29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmlubGluZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVz
dWx0KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxp
c3QpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0
KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxl
Pjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAo
IXJ1bGVMaXN0KQotICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bW92ZShyZXN1bHQpOwogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiByZWZSdWxl
TGlzdCA9IHJ1bGVMaXN0OwogICAgIENTU1N0eWxlUnVsZVZlY3RvciBydWxlczsKLSAgICBjb2xs
ZWN0RmxhdFJ1bGVzKHJlZlJ1bGVMaXN0LCAmcnVsZXMpOworICAgIGNvbGxlY3RGbGF0UnVsZXMo
V1RGOjptb3ZlKHJlZlJ1bGVMaXN0KSwgJnJ1bGVzKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDAsIHNpemUgPSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHJlc3VsdC0+
YWRkSXRlbShidWlsZE9iamVjdEZvclJ1bGUocnVsZXMuYXQoaSkuZ2V0KCkpKTsKIAotICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8
Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBDU1NTdHlsZVJ1bGVWZWN0b3IqIHJlc3VsdCkKK3ZvaWQg
SW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+
JiYgcnVsZUxpc3QsIENTU1N0eWxlUnVsZVZlY3RvciogcmVzdWx0KQogewogICAgIGlmICghcnVs
ZUxpc3QpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NDYsMTkgKzE0NTMsMTkgQEAgdm9pZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHJ1bGVMaXN0LCBDU1MKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IGNoaWxkUnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0KHJ1bGUpOwogICAgICAgICAgICAg
aWYgKGNoaWxkUnVsZUxpc3QpCi0gICAgICAgICAgICAgICAgY29sbGVjdEZsYXRSdWxlcyhjaGls
ZFJ1bGVMaXN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoV1RG
Ojptb3ZlKGNoaWxkUnVsZUxpc3QpLCByZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdl
bnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxp
c3RlbmVyKQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYmIGVsZW1lbnQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBs
aXN0ZW5lcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZShwYWdlQWdlbnQsIGlkLCBlbGVtZW50LCBvcmlnaW4sIGxpc3RlbmVyKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlKHBhZ2VBZ2VudCwgaWQsIFdURjo6bW92ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikp
OwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3Qg
U3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVmUHRyPEVsZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVj
dG9yU3R5bGVTaGVldChwYWdlQWdlbnQsIGlkLCBudWxscHRyLCBvcmlnaW4sICIiLCBsaXN0ZW5l
cikKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9lbGVtZW50KFdURjo6bW92ZShl
bGVtZW50KSkKICAgICAsIG1fcnVsZVNvdXJjZURhdGEobnVsbHB0cikKICAgICAsIG1faXNTdHls
ZVRleHRWYWxpZChmYWxzZSkKIHsKQEAgLTE1MzEsMTAgKzE1MzgsMTAgQEAgYm9vbCBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0
b3JDU1NJZCYgaWQpCitSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZTo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYg
aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChpZCwgIWlkLm9yZGluYWwoKSk7Ci0gICAgcmV0dXJu
IG1faW5zcGVjdG9yU3R5bGU7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yU3R5bGUuY29weVJlZigp
OwogfQogCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OmlubGluZVN0eWxlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IGZkYmY3OGQuLmRlY2QzMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjQsMTMgKzYzLDEzIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICBleHBsaWNpdCBJbnNw
ZWN0b3JDU1NJZChjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIs
IG1fc3R5bGVTaGVldElkKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3JkaW5hbFZhbHVlID0gdmFsdWUtPmdldCgib3Jk
aW5hbCIpOwotICAgICAgICBpZiAoIW9yZGluYWxWYWx1ZSB8fCAhb3JkaW5hbFZhbHVlLT5hc0lu
dGVnZXIobV9vcmRpbmFsKSkKKyAgICAgICAgaW50IG9yZGluYWxWYWx1ZTsKKyAgICAgICAgaWYg
KCF2YWx1ZS0+Z2V0SW50ZWdlcigib3JkaW5hbCIsIG9yZGluYWxWYWx1ZSkpCiAgICAgICAgICAg
ICBtX3N0eWxlU2hlZXRJZCA9ICIiOwogICAgIH0KIApAQCAtODcsMTUgKzg2LDE1IEBAIHB1Ymxp
YzoKIAogICAgIC8vIElEIHR5cGUgaXMgZWl0aGVyIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVJZCBvciBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZC4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRD4KLSAgICBQYXNzUmVmUHRyPElEPiBhc1Byb3RvY29sVmFsdWUo
KSBjb25zdAorICAgIFJlZlB0cjxJRD4gYXNQcm90b2NvbFZhbHVlKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICBSZWZQdHI8SUQ+IHJlc3VsdCA9IElEOjpjcmVhdGUoKQorICAgICAgICByZXR1cm4gSUQ6
OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0U3R5bGVTaGVldElkKG1fc3R5bGVTaGVldElkKQot
ICAgICAgICAgICAgLnNldE9yZGluYWwobV9vcmRpbmFsKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CisgICAgICAgICAgICAuc2V0T3JkaW5hbChtX29yZGluYWwpCisgICAgICAg
ICAgICAucmVsZWFzZSgpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTEzNiwxMiArMTM1LDEyIEBA
IHN0cnVjdCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5IHsKIAogY2xhc3MgSW5zcGVjdG9yU3R5bGUg
ZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdHlsZT4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBjcmVhdGUoY29uc3QgSW5zcGVjdG9y
Q1NTSWQmIHN0eWxlSWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUsIElu
c3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpOworICAgIHN0YXRpYyBSZWY8SW5z
cGVjdG9yU3R5bGU+IGNyZWF0ZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUmVmUHRy
PENTU1N0eWxlRGVjbGFyYXRpb24+JiYsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxl
U2hlZXQpOwogICAgIH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlv
biogY3NzU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0
eWxlKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+IGJ1aWxk
QXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3Q7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdDsKKyAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiBidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNv
bnN0OwogICAgIGJvb2wgaGFzRGlzYWJsZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gIW1f
ZGlzYWJsZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0
KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJp
bmcqIG9sZFRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHRvZ2dsZVByb3BlcnR5KHVu
c2lnbmVkIGluZGV4LCBib29sIGRpc2FibGUsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTE1MCwxNSAr
MTQ5LDE1IEBAIHB1YmxpYzoKICAgICBib29sIHNldFRleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0
aW9uQ29kZSYpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3Rv
ckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJ
bnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKKyAgICBJbnNwZWN0b3JTdHls
ZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRp
b24+JiYsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpOwogCiAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGVzZSBhbGlhc2VzIGFuZCB1cGRhdGUgYWxsIHRoZSBjdXJyZW50IGNh
bGwgc2l0ZXMgdG8gdXNlIHRoZSBuZXcgcHVibGljIG1ldGhvZHMuCiAgICAgYm9vbCBzdHlsZVRl
eHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0IHsgcmV0dXJuIGdldFRleHQocmVzdWx0KTsgfQogICAg
IGJvb2wgYXBwbHlTdHlsZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KSB7IEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOyByZXR1cm4gc2V0VGV4dCh0ZXh0LCBlYyk7IH0KIAogICAgIGJvb2wgcG9wdWxhdGVB
bGxQcm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KSBjb25z
dDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBleHRyYWN0U291cmNlRGF0YSgpIGNvbnN0OworICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3Q7CisgICAgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBleHRyYWN0U291cmNlRGF0YSgpIGNvbnN0OwogICAgIFN0
cmluZyBzaG9ydGhhbmRWYWx1ZShjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBjb25z
dDsKICAgICBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHkoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0eSkgY29uc3Q7CiAgICAgVmVjdG9yPFN0cmluZz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKGNv
bnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0OwpAQCAtMTgyLDcgKzE4MSw3IEBA
IHB1YmxpYzoKICAgICB9OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRp
b24qLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+PiBJbnNwZWN0b3JTdHlsZU1hcDsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5
bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBSZWY8SW5zcGVj
dG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYg
aWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkws
IExpc3RlbmVyKik7CiAgICAgc3RhdGljIFN0cmluZyBzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hl
ZXQqIHBhZ2VTdHlsZVNoZWV0KTsKIAogICAgIHZpcnR1YWwgfkluc3BlY3RvclN0eWxlU2hlZXQo
KTsKQEAgLTE5NywxMCArMTk2LDEwIEBAIHB1YmxpYzoKICAgICBDU1NTdHlsZVJ1bGUqIGFkZFJ1
bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgZGVs
ZXRlUnVsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBDU1NT
dHlsZVJ1bGUqIHJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVp
bGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldElu
Zm8oKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4g
YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGVTaGVldEJvZHk+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IGJ1aWxkT2JqZWN0
Rm9yU3R5bGVTaGVldEluZm8oKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIGJvb2wgc2V0U3R5bGVUZXh0KGNvbnN0IEluc3Bl
Y3RvckNTU0lkJiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBTdHJpbmcqIG9sZFRleHQsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBib29sIHNldFByb3BlcnR5VGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYs
IHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3Jp
dGUsIFN0cmluZyogb2xkUHJvcGVydHlUZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCB0
b2dnbGVQcm9wZXJ0eShjb25zdCBJbnNwZWN0b3JDU1NJZCYsIHVuc2lnbmVkIHByb3BlcnR5SW5k
ZXgsIGJvb2wgZGlzYWJsZSwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMjEzLDE3ICsyMTIsMTcgQEAg
cHVibGljOgogICAgIEluc3BlY3RvckNTU0lkIHN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpIGNvbnN0IHsgcmV0dXJuIHJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0
cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1
bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBh
Z2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VT
dHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CiAKICAgICBib29sIGNhbkJpbmQo
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46OlVzZXJBZ2VudCAmJiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7IH0KLSAgICBJbnNwZWN0b3JDU1NJZCBy
dWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKKyAgICBJbnNw
ZWN0b3JDU1NJZCBydWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKICAg
ICB2aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwogICAgIHZp
cnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJ
bnNwZWN0b3JDU1NJZCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1lbWJlckluc3BlY3RvclN0eWxl
KFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBmb3JnZXRJbnNwZWN0b3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSk7CisgICAg
dmlydHVhbCBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHls
ZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+JiYpOworICAgIHZpcnR1YWwgdm9pZCBmb3JnZXRJbnNw
ZWN0b3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAKICAgICAvLyBBbHNvIGFjY2Vzc2Vk
IGJ5IGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JTdHlsZS4KICAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5
bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7CkBAIC0yMzMsNyArMjMyLDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVSdWxlPj4gQ1NTU3R5bGVSdWxlVmVjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBJ
bnNwZWN0b3JTdHlsZTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RGbGF0UnVsZXMoUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4sIENTU1N0eWxlUnVsZVZlY3RvciogcmVzdWx0KTsKKyAgICBzdGF0
aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlzdD4mJiwgQ1NTU3R5bGVS
dWxlVmVjdG9yKiByZXN1bHQpOwogICAgIGJvb2wgY2hlY2tQYWdlU3R5bGVTaGVldChFeGNlcHRp
b25Db2RlJikgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBl
bnN1cmVTb3VyY2VEYXRhKCk7CkBAIC0yNDMsOSArMjQyLDkgQEAgcHJpdmF0ZToKICAgICBib29s
IG9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wg
cmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBp
bmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1J1bGU+PiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqKTsKLSAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9y
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChD
U1NTdHlsZVJ1bGUqKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gYnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1
bGVMaXN0Kik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+
IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKKyAgICBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0
b3JMaXN0KENTU1N0eWxlUnVsZSopOwogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VB
Z2VudDsKICAgICBTdHJpbmcgbV9pZDsKQEAgLTI2MSwyMSArMjYwLDIxIEBAIHByaXZhdGU6CiAK
IGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3JTdHlsZVNoZWV0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQq
LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExpc3RlbmVyKik7CisgICAgc3RhdGljIFJlZjxJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdl
bnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVudD4mJiwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwogCiAgICAgdm9pZCBkaWRN
b2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBib29sIGdldFRleHQoU3RyaW5n
KiByZXN1bHQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0IG92ZXJyaWRlIHsg
QVNTRVJUX1VOVVNFRChpZCwgIWlkLm9yZGluYWwoKSk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9
CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5z
cGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50Piwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwor
ICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQq
LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVudD4mJiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwogCiAgICAgdmlydHVhbCBEb2N1
bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBp
bmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KICAgICB2aXJ0dWFsIHVu
c2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNw
ZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPikg
b3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3Rv
clN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+JiYpIG92
ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBmb3JnZXRJbnNwZWN0b3JTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKikgb3ZlcnJpZGUgeyB9CiAKICAgICAvLyBBbHNvIGFjY2Vzc2VkIGJ5IGZy
aWVuZCBjbGFzcyBJbnNwZWN0b3JTdHlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAppbmRleCBiZDMyNzhlLi45YWI4ZjI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwCkBAIC0xOTcsOSArMTk3LDkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpz
dGFydEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcKIAogICAg
IC8vIFVzZSBhbiBpbmRlcGVuZGVudCBzdG9wd2F0Y2ggZm9yIGNvbnNvbGUtaW5pdGlhdGVkIHBy
b2ZpbGluZywgc2luY2UgdGhlIHVzZXIgd2lsbCBleHBlY3QgaXQKICAgICAvLyB0byBiZSByZWxh
dGl2ZSB0byB3aGVuIHRoZWlyIGNvbW1hbmQgd2FzIGlzc3VlZC4KLSAgICBSZWZQdHI8U3RvcHdh
dGNoPiBwcm9maWxlclN0b3B3YXRjaCA9IFN0b3B3YXRjaDo6Y3JlYXRlKCk7CisgICAgUmVmPFN0
b3B3YXRjaD4gcHJvZmlsZXJTdG9wd2F0Y2ggPSBTdG9wd2F0Y2g6OmNyZWF0ZSgpOwogICAgIHBy
b2ZpbGVyU3RvcHdhdGNoLT5zdGFydCgpOwotICAgIHN0YXJ0UHJvZmlsaW5nKGV4ZWMsIHRpdGxl
LCBwcm9maWxlclN0b3B3YXRjaC5yZWxlYXNlKCkpOworICAgIHN0YXJ0UHJvZmlsaW5nKGV4ZWMs
IHRpdGxlLCBXVEY6Om1vdmUocHJvZmlsZXJTdG9wd2F0Y2gpKTsKIAogICAgIG1fcGVuZGluZ0Nv
bnNvbGVQcm9maWxlUmVjb3Jkcy5hcHBlbmQoY3JlYXRlUmVjb3JkRW50cnkoVGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVDb25zb2xlUHJvZmlsZURhdGEodGl0bGUpLCBUaW1lbGluZVJlY29y
ZFR5cGU6OkNvbnNvbGVQcm9maWxlLCB0cnVlLCBmcmFtZUZyb21FeGVjU3RhdGUoZXhlYykpKTsK
IH0KQEAgLTIxNyw3ICsyMTcsNyBAQCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKgogICAgICAgICBp
ZiAodGl0bGUuaXNFbXB0eSgpIHx8IHJlY29yZFRpdGxlID09IHRpdGxlKSB7CiAgICAgICAgICAg
ICBSZWZQdHI8SlNDOjpQcm9maWxlPiBwcm9maWxlID0gc3RvcFByb2ZpbGluZyhleGVjLCB0aXRs
ZSk7CiAgICAgICAgICAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgICAgICAgICBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUocmVjb3JkLmRhdGEuZ2V0KCksIHByb2ZpbGUpOwor
ICAgICAgICAgICAgICAgIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kUHJvZmlsZShyZWNv
cmQuZGF0YS5nZXQoKSwgcHJvZmlsZS5jb3B5UmVmKCkpOwogCiAgICAgICAgICAgICBkaWRDb21w
bGV0ZVJlY29yZEVudHJ5KHJlY29yZCk7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCBQYXNzUmVmUHRy
PEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKEpT
Qzo6RXhlY1N0YXRlKgogICAgICAgICAgICAgaWYgKCFtX2VuYWJsZWRGcm9tRnJvbnRlbmQgJiYg
bV9wZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBpbnRlcm5hbFN0b3AoKTsKIAotICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGUucmVsZWFzZSgp
OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwcm9maWxlKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtNjQ3LDE3ICs2NDcsMTcgQEAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHkKICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZVN0YW1w
OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBycFJlY29yZCwgVGltZWxpbmVSZWNvcmRUeXBl
IHR5cGUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUo
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBl
KQogewotICAgIHBycFJlY29yZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Z2V0RW51bUNvbnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkpOworICAgIHJlY29yZC0+
c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFs
dWUodG9Qcm90b2NvbCh0eXBlKSkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QocHJwUmVj
b3JkKTsKKyAgICBhdXRvIHJlY29yZE9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUo
cmVjb3JkKSk7CiAKICAgICBpZiAobV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHNl
bmRFdmVudChyZWNvcmQucmVsZWFzZSgpKTsKKyAgICAgICAgc2VuZEV2ZW50KFdURjo6bW92ZShy
ZWNvcmRPYmplY3QpKTsKICAgICBlbHNlIHsKICAgICAgICAgY29uc3QgVGltZWxpbmVSZWNvcmRF
bnRyeSYgcGFyZW50ID0gbV9yZWNvcmRTdGFjay5sYXN0KCk7Ci0gICAgICAgIHBhcmVudC5jaGls
ZHJlbi0+cHVzaE9iamVjdChyZWNvcmQucmVsZWFzZSgpKTsKKyAgICAgICAgcGFyZW50LmNoaWxk
cmVuLT5wdXNoT2JqZWN0KFdURjo6bW92ZShyZWNvcmQpKTsKICAgICB9CiB9CiAKQEAgLTY3Niw3
ICs2NzYsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlUmVjb3Jk
RW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgZQogICAgIGVudHJ5LnJlY29yZC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBlbnRyeS5kYXRhKTsKICAgICBlbnRyeS5yZWNv
cmQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY2hpbGRyZW4iKSwgZW50cnkuY2hpbGRyZW4pOwog
ICAgIGVudHJ5LnJlY29yZC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgiZW5kVGltZSIpLCB0aW1l
c3RhbXAoKSk7Ci0gICAgYWRkUmVjb3JkVG9UaW1lbGluZShlbnRyeS5yZWNvcmQsIGVudHJ5LnR5
cGUpOworICAgIGFkZFJlY29yZFRvVGltZWxpbmUoZW50cnkucmVjb3JkLmNvcHlSZWYoKSwgZW50
cnkudHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVD
dXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQpAQCAtNzA1LDM0ICs3MDUsMzQg
QEAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW4KIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjphcHBlbmRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRp
bWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFt
ZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVy
ZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0aW1l
c3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsKLSAg
ICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIGRhdGEpOwotICAgIHNldEZyYW1lSWRlbnRpZmll
cihyZWNvcmQuZ2V0KCksIGZyYW1lKTsKLSAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKHJlY29yZC5y
ZWxlYXNlKCksIHR5cGUpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVy
ZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsKKyAgICByZWNvcmQtPnNldE9i
amVjdCgiZGF0YSIsIFdURjo6bW92ZShkYXRhKSk7CisgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZy
ZWNvcmQuZ2V0KCksIGZyYW1lKTsKKyAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKFdURjo6bW92ZShy
ZWNvcmQpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZl
bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50KQordm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpzZW5kRXZlbnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBldmVudCkKIHsK
ICAgICBpZiAoIW1fZnJvbnRlbmREaXNwYXRjaGVyKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0
IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkgbm93LgotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4gcmVjb3JkQ2hlY2tlZCA9IEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ojpy
dW50aW1lQ2FzdChldmVudCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3Jk
ZWQocmVjb3JkQ2hlY2tlZC5yZWxlYXNlKCkpOworICAgIGF1dG8gcmVjb3JkQ2hlY2tlZCA9IEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+
OjpydW50aW1lQ2FzdChXVEY6Om1vdmUoZXZlbnQpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZXZlbnRSZWNvcmRlZChXVEY6Om1vdmUocmVjb3JkQ2hlY2tlZCkpOwogfQogCi1JbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmNyZWF0ZVJlY29yZEVudHJ5KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJh
bWUpCitJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVudHJ5KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywg
RnJhbWUqIGZyYW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0aW1lc3RhbXAoKSwgY2Fw
dHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsKLSAgICBzZXRGcmFtZUlk
ZW50aWZpZXIocmVjb3JkLmdldCgpLCBmcmFtZSk7Ci0gICAgcmV0dXJuIFRpbWVsaW5lUmVjb3Jk
RW50cnkocmVjb3JkLnJlbGVhc2UoKSwgZGF0YSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpLCB0
eXBlKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sg
PyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7CisgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNv
cmQuZ2V0KCksIGZyYW1lKTsKKyAgICByZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShXVEY6Om1v
dmUocmVjb3JkKSwgV1RGOjptb3ZlKGRhdGEpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCksIHR5
cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3Jk
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
ZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJh
bWUqIGZyYW1lKQogewotICAgIHB1c2hDdXJyZW50UmVjb3JkKGNyZWF0ZVJlY29yZEVudHJ5KGRh
dGEsIHR5cGUsIGNhcHR1cmVDYWxsU3RhY2ssIGZyYW1lKSk7CisgICAgcHVzaEN1cnJlbnRSZWNv
cmQoY3JlYXRlUmVjb3JkRW50cnkoV1RGOjptb3ZlKGRhdGEpLCB0eXBlLCBjYXB0dXJlQ2FsbFN0
YWNrLCBmcmFtZSkpOwogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNsZWFyUmVj
b3JkU3RhY2soKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgKaW5kZXggMzUyYTFmNS4uM2U4ZTExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC0yMjQsMTkgKzIyNCwx
OSBAQCBwcml2YXRlOgogICAgIHZvaWQgaW50ZXJuYWxTdG9wKCk7CiAgICAgZG91YmxlIHRpbWVz
dGFtcCgpOwogCi0gICAgdm9pZCBzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4pOwotICAgIHZvaWQgYXBwZW5kUmVjb3JkKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJl
Q2FsbFN0YWNrLCBGcmFtZSopOwotICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4sIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBj
YXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgc2VuZEV2ZW50KFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJik7CisgICAgdm9pZCBhcHBlbmRSZWNvcmQoUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwg
Ym9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNv
cmQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKICAgICB2b2lkIHB1c2hDdXJyZW50
UmVjb3JkKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCkgeyBtX3JlY29yZFN0YWNr
LmFwcGVuZChyZWNvcmQpOyB9CiAKLSAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJlY29y
ZEVudHJ5KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVs
aW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIFRpbWVs
aW5lUmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50cnkoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0
YWNrLCBGcmFtZSopOwogCiAgICAgdm9pZCBzZXRGcmFtZUlkZW50aWZpZXIoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QqIHJlY29yZCwgRnJhbWUqKTsKIAogICAgIHZvaWQgZGlkQ29tcGxldGVS
ZWNvcmRFbnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5Jik7CiAgICAgdm9pZCBkaWRDb21w
bGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlKTsKIAotICAgIHZvaWQgYWRkUmVj
b3JkVG9UaW1lbGluZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiwgVGlt
ZWxpbmVSZWNvcmRUeXBlKTsKKyAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5cGUpOwogICAgIHZv
aWQgY2xlYXJSZWNvcmRTdGFjaygpOwogCiAgICAgdm9pZCBsb2NhbFRvUGFnZVF1YWQoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgTGF5b3V0UmVjdCYsIEZsb2F0UXVhZCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggNTJh
OGMwNy4uY2E2OWViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyQWdlbnQuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6ZGlzY29ubmVjdEZyb21Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29y
a2VySWQKICAgICAgICAgZXJyb3IgPSBBU0NJSUxpdGVyYWwoIldvcmtlciBpcyBnb25lIik7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJyb3JT
dHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtl
cihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFdvcmtlckZyb250ZW5kQ2hhbm5lbCogY2hhbm5l
bCA9IG1faWRUb0NoYW5uZWwuZ2V0KHdvcmtlcklkKTsKICAgICBpZiAoY2hhbm5lbCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKaW5kZXggMzli
ZTZkMC4uNjg2OWQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
cldvcmtlckFnZW50LmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjYW5JbnNwZWN0V29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wqKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgY29ubmVjdFRvV29ya2VyKEVycm9yU3RyaW5nJiwgaW50IHdvcmtlcklkKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21Xb3JrZXIoRXJyb3JTdHJp
bmcmLCBpbnQgd29ya2VySWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2Fn
ZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgaW50IHdvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYsIGludCB3b3JrZXJJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvY29ubmVjdFRvV29ya2VycyhFcnJvclN0cmluZyYsIGJv
b2wgdmFsdWUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKaW5kZXggZGVkNjU0Yi4uZTRhMjY2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEu
Y3BwCkBAIC01MSwxNyArNTEsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogCi1QYXNzUmVmUHRyPFhIUlJlcGxheURhdGE+IFhIUlJlcGxheURh
dGE6OmNyZWF0ZShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5
bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKK1JlZjxYSFJSZXBsYXlEYXRhPiBYSFJS
ZXBsYXlEYXRhOjpjcmVhdGUoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBi
b29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJN
YXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgWEhSUmVwbGF5RGF0YShtZXRob2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFk
ZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBYSFJS
ZXBsYXlEYXRhKG1ldGhvZCwgdXJsLCBhc3luYywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVy
cywgaW5jbHVkZUNyZWRlbnRpYWxzKSk7CiB9CiAKIAotWEhSUmVwbGF5RGF0YTo6WEhSUmVwbGF5
RGF0YShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJz
LCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKK1hIUlJlcGxheURhdGE6OlhIUlJlcGxheURhdGEo
Y29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBSZWZQdHI8
Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wg
aW5jbHVkZUNyZWRlbnRpYWxzKQogICAgIDogbV9tZXRob2QobWV0aG9kKQogICAgICwgbV91cmwo
dXJsKQogICAgICwgbV9hc3luYyhhc3luYykKLSAgICAsIG1fZm9ybURhdGEoZm9ybURhdGEpCisg
ICAgLCBtX2Zvcm1EYXRhKFdURjo6bW92ZShmb3JtRGF0YSkpCiAgICAgLCBtX2hlYWRlcnMoaGVh
ZGVycykKICAgICAsIG1faW5jbHVkZUNyZWRlbnRpYWxzKGluY2x1ZGVDcmVkZW50aWFscykKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKaW5k
ZXggYzIzNjk1ZC4uNTM5Mzg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05l
dHdvcmtSZXNvdXJjZXNEYXRhLmgKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgVGV4dFJlc291cmNl
RGVjb2RlcjsKIAogY2xhc3MgWEhSUmVwbGF5RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFhIUlJl
cGxheURhdGE+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYSFJSZXBsYXlEYXRh
PiBjcmVhdGUoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYsIGJvb2wgYXN5bmMsIFBh
c3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGlu
Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgc3RhdGljIFJlZjxYSFJSZXBsYXlEYXRhPiBjcmVhdGUo
Y29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYsIGJvb2wgYXN5bmMsIFJlZlB0cjxGb3Jt
RGF0YT4mJiwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVu
dGlhbHMpOwogCiAgICAgY29uc3QgU3RyaW5nJiBtZXRob2QoKSBjb25zdCB7IHJldHVybiBtX21l
dGhvZDsgfQogICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMo
KSBjb25zdCB7IHJldHVybiBtX2hlYWRlcnM7IH0KICAgICBib29sIGluY2x1ZGVDcmVkZW50aWFs
cygpIGNvbnN0IHsgcmV0dXJuIG1faW5jbHVkZUNyZWRlbnRpYWxzOyB9CiBwcml2YXRlOgotICAg
IFhIUlJlcGxheURhdGEoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYsIGJvb2wgYXN5
bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBi
b29sIGluY2x1ZGVDcmVkZW50aWFscyk7CisgICAgWEhSUmVwbGF5RGF0YShjb25zdCBTdHJpbmcg
Jm1ldGhvZCwgY29uc3QgVVJMJiwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1EYXRhPiYmLCBjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscyk7CiAKICAg
ICBTdHJpbmcgbV9tZXRob2Q7CiAgICAgVVJMIG1fdXJsOwpAQCAtMTA3LDExICsxMDcsMTEgQEAg
cHVibGljOgogICAgICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dEVuY29kaW5nTmFtZTsgfQogICAgICAgICB2b2lkIHNldFRleHRFbmNvZGluZ05hbWUo
Y29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lKSB7IG1fdGV4dEVuY29kaW5nTmFtZSA9IHRl
eHRFbmNvZGluZ05hbWU7IH0KIAotICAgICAgICBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29k
ZXI+IGRlY29kZXIoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXI7IH0KLSAgICAgICAgdm9pZCBz
ZXREZWNvZGVyKFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlcikgeyBtX2Rl
Y29kZXIgPSBkZWNvZGVyOyB9CisgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBk
ZWNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyLmNvcHlSZWYoKTsgfQorICAgICAgICB2
b2lkIHNldERlY29kZXIoUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+JiYgZGVjb2RlcikgeyBt
X2RlY29kZXIgPSBXVEY6Om1vdmUoZGVjb2Rlcik7IH0KIAotICAgICAgICBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KLSAgICAgICAg
dm9pZCBzZXRCdWZmZXIoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikgeyBtX2J1ZmZl
ciA9IGJ1ZmZlcjsgfQorICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci5jb3B5UmVmKCk7IH0KKyAgICAgICAgdm9pZCBzZXRCdWZmZXIo
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpIHsgbV9idWZmZXIgPSBXVEY6Om1vdmUoYnVm
ZmVyKTsgfQogCiAgICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FjaGVkUmVzb3VyY2U7IH0KICAgICAgICAgdm9pZCBzZXRDYWNoZWRSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpIHsgbV9jYWNoZWRSZXNvdXJjZSA9
IGNhY2hlZFJlc291cmNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
VGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1l
bGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDgxOWJmZGIuLjdlMjQwNGNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcApAQCAt
NTIsOSArNTIsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwgaW50IG1heENhbGxTdGFj
a0RlcHRoKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVHZW5lcmljUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgcmVjb3JkLT5zZXREb3VibGUoInN0YXJ0VGltZSIsIHN0YXJ0
VGltZSk7CiAKICAgICBpZiAobWF4Q2FsbFN0YWNrRGVwdGgpIHsKQEAgLTYyLDE4NSArNjIsMTg1
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0CiAgICAgICAgIGlmIChzdGFja1RyYWNlICYmIHN0
YWNrVHJhY2UtPnNpemUoKSkKICAgICAgICAgICAgIHJlY29yZC0+c2V0VmFsdWUoInN0YWNrVHJh
Y2UiLCBzdGFja1RyYWNlLT5idWlsZEluc3BlY3RvckFycmF5KCkpOwogICAgIH0KLSAgICByZXR1
cm4gcmVjb3JkLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlY29yZCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZUJhY2tncm91bmRSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwgY29uc3QgU3RyaW5nJiB0aHJlYWRO
YW1lKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVC
YWNrZ3JvdW5kUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkTmFt
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVjb3JkLT5zZXREb3VibGUoInN0YXJ0VGltZSIsIHN0
YXJ0VGltZSk7CiAgICAgcmVjb3JkLT5zZXRTdHJpbmcoInRocmVhZCIsIHRocmVhZE5hbWUpOwot
ICAgIHJldHVybiByZWNvcmQucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUocmVjb3Jk
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90IHVzZWRIZWFwU2l6ZURlbHRhKQorUmVm
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHQ0V2ZW50RGF0
YShjb25zdCBzaXplX3QgdXNlZEhlYXBTaXplRGVsdGEpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+
c2V0SW50ZWdlcigidXNlZEhlYXBTaXplRGVsdGEiLCB1c2VkSGVhcFNpemVEZWx0YSk7Ci0gICAg
cmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGlu
ZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVu
Y3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygic2NyaXB0TmFtZSIsIHNjcmlwdE5hbWUp
OwogICAgIGRhdGEtPnNldEludGVnZXIoInNjcmlwdExpbmUiLCBzY3JpcHRMaW5lKTsKLSAgICBy
ZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
Q29uc29sZVByb2ZpbGVEYXRhKGNvbnN0IFN0cmluZyYgdGl0bGUpCitSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShjb25z
dCBTdHJpbmcmIHRpdGxlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygidGl0bGUi
LCB0aXRsZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1v
dmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0YShjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0
aW9uJiBhY3Rpb24sIHVuc2lnbmVkIHNhbXBsZUlkKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9iZVNhbXBsZURhdGEoY29uc3QgU2NyaXB0QnJl
YWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25lZCBzYW1wbGVJZCkKIHsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBkYXRhLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicHJvYmVJZCIpLCBhY3Rpb24uaWRlbnRp
Zmllcik7CiAgICAgZGF0YS0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoInNhbXBsZUlkIiksIHNh
bXBsZUlkKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92
ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlRXZlbnREaXNwYXRjaERhdGEoY29uc3QgRXZlbnQmIGV2ZW50KQorUmVm
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmVudERpc3Bh
dGNoRGF0YShjb25zdCBFdmVudCYgZXZlbnQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3Ry
aW5nKCJ0eXBlIiwgZXZlbnQudHlwZSgpLnN0cmluZygpKTsKLSAgICByZXR1cm4gZGF0YS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0
YShpbnQgdGltZXJJZCkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGltZXJJZCkKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBk
YXRhLT5zZXRJbnRlZ2VyKCJ0aW1lcklkIiwgdGltZXJJZCk7Ci0gICAgcmV0dXJuIGRhdGEucmVs
ZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVySW5zdGFsbERh
dGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCitSZWY8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVySW5zdGFsbERhdGEo
aW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgZGF0YS0+c2V0SW50ZWdlcigidGltZXJJZCIsIHRpbWVySWQpOwogICAgIGRhdGEtPnNldElu
dGVnZXIoInRpbWVvdXQiLCB0aW1lb3V0KTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJzaW5nbGVT
aG90Iiwgc2luZ2xlU2hvdCk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVy
biBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0ZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEoY29uc3QgU3RyaW5n
JiB1cmwsIGludCByZWFkeVN0YXRlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygi
dXJsIiwgdXJsKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJyZWFkeVN0YXRlIiwgcmVhZHlTdGF0
ZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0
YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZVhIUkxvYWREYXRhKGNvbnN0IFN0cmluZyYgdXJsKQorUmVmPEluc3BlY3Rvck9i
amVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJp
bmcmIHVybCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0g
ICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CiB9
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcmIHVybCwgZG91YmxlIGxpbmVOdW1i
ZXIpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2
YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcmIHVybCwgZG91YmxlIGxpbmVOdW1iZXIpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgIGRhdGEtPnNl
dEludGVnZXIoImxpbmVOdW1iZXIiLCBsaW5lTnVtYmVyKTsKLSAgICByZXR1cm4gZGF0YS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZVN0YW1wRGF0YShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygibWVzc2FnZSIsIG1lc3NhZ2UpOwotICAgIHJl
dHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVT
Y2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiB1cmwpCitSZWY8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VS
ZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRT
dHJpbmcoInVybCIsIHVybCk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVy
biBXVEY6Om1vdmUoZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlU2VuZFJlcXVlc3REYXRhKGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitSZWY8SW5z
cGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlU2VuZFJl
cXVlc3REYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCBy
ZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldFN0cmluZygidXJsIiwgcmVxdWVzdC51cmwoKS5zdHJp
bmcoKSk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0TWV0aG9kIiwgcmVxdWVzdC5odHRw
TWV0aG9kKCkpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGOjpt
b3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorUmVmPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVS
ZXNwb25zZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygicmVxdWVzdElk
IiwgcmVxdWVzdElkKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJzdGF0dXNDb2RlIiwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHJl
c3BvbnNlLm1pbWVUeXBlKCkpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZUZpbmlzaERhdGEoY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGJvb2wgZGlkRmFpbCwgZG91YmxlIGZpbmlzaFRpbWUpCitSZWY8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0
YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRGYWlsLCBkb3VibGUgZmluaXNoVGlt
ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJ
ZCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigiZGlkRmFpbCIsIGRpZEZhaWwpOwogICAgIGlmIChm
aW5pc2hUaW1lKQogICAgICAgICBkYXRhLT5zZXREb3VibGUoIm5ldHdvcmtUaW1lIiwgZmluaXNo
VGltZSk7Ci0gICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBXVEY6Om1vdmUo
ZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZVJlY2VpdmVSZXNvdXJjZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGludCBsZW5ndGgpCitSZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6
OmNyZWF0ZVJlY2VpdmVSZXNvdXJjZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGludCBs
ZW5ndGgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1
ZXN0SWQpOwogICAgIGRhdGEtPnNldEludGVnZXIoImVuY29kZWREYXRhTGVuZ3RoIiwgbGVuZ3Ro
KTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRh
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFs
T2JqZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVMYXlvdXREYXRhKHVuc2lnbmVkIGRpcnR5T2JqZWN0cywg
dW5zaWduZWQgdG90YWxPYmplY3RzLCBib29sIHBhcnRpYWxMYXlvdXQpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgZGF0YS0+c2V0SW50ZWdlcigiZGlydHlPYmplY3RzIiwgZGlydHlPYmplY3RzKTsKICAgICBk
YXRhLT5zZXRJbnRlZ2VyKCJ0b3RhbE9iamVjdHMiLCB0b3RhbE9iamVjdHMpOwogICAgIGRhdGEt
PnNldEJvb2xlYW4oInBhcnRpYWxMYXlvdXQiLCBwYXJ0aWFsTGF5b3V0KTsKLSAgICByZXR1cm4g
ZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KLSAgICAKLVBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZURl
Y29kZUltYWdlRGF0YShjb25zdCBTdHJpbmcmIGltYWdlVHlwZSkKKworUmVmPEluc3BlY3Rvck9i
amVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3Qg
U3RyaW5nJiBpbWFnZVR5cGUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJpbWFn
ZVR5cGUiLCBpbWFnZVR5cGUpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNpemVJbWFnZURhdGEoYm9vbCBzaG91bGRDYWNo
ZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVz
aXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0
Qm9vbGVhbigiY2FjaGVkIiwgc2hvdWxkQ2FjaGUpOwotICAgIHJldHVybiBkYXRhLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVNYXJrRGF0YShib29sIGlzTWFp
bkZyYW1lKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEJv
b2xlYW4oImlzTWFpbkZyYW1lIiwgaXNNYWluRnJhbWUpOwotICAgIHJldHVybiBkYXRhLnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYXJzZUhUTUxEYXRhKHVu
c2lnbmVkIHN0YXJ0TGluZSkKK1JlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YSh1bnNpZ25lZCBzdGFydExpbmUpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgZGF0YS0+c2V0SW50ZWdlcigic3RhcnRMaW5lIiwgc3RhcnRMaW5lKTsKLSAgICByZXR1
cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQW5p
bWF0aW9uRnJhbWVEYXRhKGludCBjYWxsYmFja0lkKQorUmVmPEluc3BlY3Rvck9iamVjdD4gVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVBbmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNr
SWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigiaWQiLCBjYWxsYmFja0lkKTsK
LSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsK
IH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZVF1YWQoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQpAQCAtMjU0LDE0ICsyNTQsMTQgQEAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogICAgIGFy
cmF5LT5wdXNoRG91YmxlKHF1YWQucDMoKS55KCkpOwogICAgIGFycmF5LT5wdXNoRG91YmxlKHF1
YWQucDQoKS54KCkpOwogICAgIGFycmF5LT5wdXNoRG91YmxlKHF1YWQucDQoKS55KCkpOwotICAg
IHJldHVybiBhcnJheS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShhcnJheSk7CiB9
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmIHF1YWQpCitSZWY8SW5zcGVjdG9yT2JqZWN0
PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQm
IHF1YWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0QXJyYXkoImNsaXAiLCBjcmVhdGVRdWFk
KHF1YWQpKTsKLSAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURjo6bW92
ZShkYXRhKTsKIH0KIAogdm9pZCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJv
b3QoSW5zcGVjdG9yT2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCkBAIC0yNjks
MjMgKzI2OSwyNCBAQCB2b2lkIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9v
dChJbnNwZWN0b3JPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0UQogICAgIGRhdGEtPnNldEFycmF5
KCJyb290IiwgY3JlYXRlUXVhZChxdWFkKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFByb3Rv
Y29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPiBidWlsZEluc3BlY3Rvck9iamVjdChj
b25zdCBKU0M6OlByb2ZpbGVOb2RlOjpDYWxsJiBjYWxsKQorc3RhdGljIFJlZjxQcm90b2NvbDo6
VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3Qg
SlNDOjpQcm9maWxlTm9kZTo6Q2FsbCYgY2FsbCkKIHsKLSAgICBSZWZQdHI8UHJvdG9jb2w6OlRp
bWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6
Q1BVUHJvZmlsZU5vZGVDYWxsOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxp
bmU6OkNQVVByb2ZpbGVOb2RlQ2FsbDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXJ0VGltZShj
YWxsLnN0YXJ0VGltZSgpKQotICAgICAgICAuc2V0VG90YWxUaW1lKGNhbGwuZWxhcHNlZFRpbWUo
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRUb3RhbFRpbWUo
Y2FsbC5lbGFwc2VkVGltZSgpKQorICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFz
c1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBidWlsZEluc3BlY3Rv
ck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGVOb2RlKiBub2RlKQorc3RhdGljIFJlZjxQcm90b2Nv
bDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBidWlsZEluc3BlY3Rvck9iamVjdChjb25zdCBK
U0M6OlByb2ZpbGVOb2RlKiBub2RlKQogewotICAgIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJv
dG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+PiBjYWxscyA9IFByb3RvY29sOjpB
cnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gY2FsbHMgPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQ
cm9maWxlTm9kZUNhbGw+OjpjcmVhdGUoKTsKICAgICBmb3IgKGNvbnN0IEpTQzo6UHJvZmlsZU5v
ZGU6OkNhbGwmIGNhbGwgOiBub2RlLT5jYWxscygpKQogICAgICAgICBjYWxscy0+YWRkSXRlbShi
dWlsZEluc3BlY3Rvck9iamVjdChjYWxsKSk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OlRpbWVs
aW5lOjpDUFVQcm9maWxlTm9kZT4gcmVzdWx0ID0gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9m
aWxlTm9kZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6
Q1BVUHJvZmlsZU5vZGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChub2RlLT5pZCgpKQotICAg
ICAgICAuc2V0Q2FsbHMoY2FsbHMucmVsZWFzZSgpKTsKKyAgICAgICAgLnNldENhbGxzKFdURjo6
bW92ZShjYWxscykpCisgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoIW5vZGUtPmZ1bmN0
aW9uTmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0LT5zZXRGdW5jdGlvbk5hbWUobm9k
ZS0+ZnVuY3Rpb25OYW1lKCkpOwpAQCAtMjk3LDI4ICsyOTgsMjcgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4gYnVpbGRJbnNwZWN0b3JPYmpl
Y3QoY29uc3QKICAgICB9CiAKICAgICBpZiAoIW5vZGUtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQ
cm9maWxlTm9kZT4+IGNoaWxkcmVuID0gUHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGlu
ZTo6Q1BVUHJvZmlsZU5vZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBjaGlsZHJlbiA9IFBy
b3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPjo6Y3JlYXRl
KCk7CiAgICAgICAgIGZvciAoUmVmUHRyPEpTQzo6UHJvZmlsZU5vZGU+IHByb2ZpbGVOb2RlIDog
bm9kZS0+Y2hpbGRyZW4oKSkKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkSW5z
cGVjdG9yT2JqZWN0KHByb2ZpbGVOb2RlLmdldCgpKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0Q2hp
bGRyZW4oY2hpbGRyZW4pOworICAgICAgICByZXN1bHQtPnNldENoaWxkcmVuKFdURjo6bW92ZShj
aGlsZHJlbikpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIHJl
dHVybiBXVEY6Om1vdmUocmVzdWx0KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6
OlRpbWVsaW5lOjpDUFVQcm9maWxlPiBidWlsZFByb2ZpbGVJbnNwZWN0b3JPYmplY3QoY29uc3Qg
SlNDOjpQcm9maWxlKiBwcm9maWxlKQorc3RhdGljIFJlZjxQcm90b2NvbDo6VGltZWxpbmU6OkNQ
VVByb2ZpbGU+IGJ1aWxkUHJvZmlsZUluc3BlY3Rvck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGUq
IHByb2ZpbGUpCiB7Ci0gICAgUmVmUHRyPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxp
bmU6OkNQVVByb2ZpbGVOb2RlPj4gcm9vdE5vZGVzID0gUHJvdG9jb2w6OkFycmF5PFByb3RvY29s
OjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJvb3ROb2Rl
cyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPjo6
Y3JlYXRlKCk7CiAgICAgZm9yIChSZWZQdHI8SlNDOjpQcm9maWxlTm9kZT4gcHJvZmlsZU5vZGUg
OiBwcm9maWxlLT5yb290Tm9kZSgpLT5jaGlsZHJlbigpKQogICAgICAgICByb290Tm9kZXMtPmFk
ZEl0ZW0oYnVpbGRJbnNwZWN0b3JPYmplY3QocHJvZmlsZU5vZGUuZ2V0KCkpKTsKIAotICAgIFJl
ZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU+IHJlc3VsdCA9IFByb3RvY29sOjpU
aW1lbGluZTo6Q1BVUHJvZmlsZTo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFJvb3ROb2Rlcyhyb290
Tm9kZXMpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFByb3Rv
Y29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZTo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFJvb3ROb2Rl
cyhXVEY6Om1vdmUocm9vdE5vZGVzKSkKKyAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUoSW5zcGVjdG9yT2JqZWN0KiBkYXRh
LCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gcHJvZmlsZSkKK3ZvaWQgVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjphcHBlbmRQcm9maWxlKEluc3BlY3Rvck9iamVjdCogZGF0YSwgUmVmUHRyPEpTQzo6
UHJvZmlsZT4mJiBwcm9maWxlKQogewogICAgIGRhdGEtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
cHJvZmlsZSIpLCBidWlsZFByb2ZpbGVJbnNwZWN0b3JPYmplY3QocHJvZmlsZS5nZXQoKSkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
CmluZGV4IGJiNWI5ZTguLjBlZjU2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAgLTU1LDc0ICs1NSw3NCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBUaW1lbGluZVJlY29yZEZhY3RvcnkgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IGNyZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwgaW50IG1heENhbGxTdGFja0Rl
cHRoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwgY29uc3QgU3RyaW5n
JiB0aHJlYWQpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVHZW5lcmljUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tE
ZXB0aCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwgY29uc3QgU3RyaW5nJiB0aHJl
YWQpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhlYXBTaXplRGVsdGEpOwor
ICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHQ0V2
ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhlYXBTaXplRGVsdGEpOwogCi0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVGdW5jdGlvbkNh
bGxEYXRhKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpOwotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlQ29u
c29sZVByb2ZpbGVEYXRhKGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgICAgICBzdGF0aWMgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNvbnN0
IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpOworICAgICAgICBzdGF0aWMgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVDb25zb2xlUHJvZmlsZURhdGEoY29u
c3QgU3RyaW5nJiB0aXRsZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2JlU2FtcGxlRGF0YShjb25zdCBJbnNwZWN0b3I6
OlNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mLCB1bnNpZ25lZCBzYW1wbGVJZCk7CisgICAgICAgIHN0
YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2JlU2FtcGxlRGF0
YShjb25zdCBJbnNwZWN0b3I6OlNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mLCB1bnNpZ25lZCBzYW1w
bGVJZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50Jik7CisgICAgICAgIHN0
YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2ZW50RGlzcGF0Y2hE
YXRhKGNvbnN0IEV2ZW50Jik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUdlbmVyaWNUaW1lckRhdGEoaW50IHRpbWVySWQpOwor
ICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5l
cmljVGltZXJEYXRhKGludCB0aW1lcklkKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlVGltZXJJbnN0YWxsRGF0YShpbnQgdGlt
ZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgICAgIHN0YXRpYyBSZWY8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRp
bWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwogCi0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVYSFJSZWFkeVN0YXRl
Q2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwgaW50IHJlYWR5U3RhdGUpOworICAgICAgICBz
dGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVYSFJSZWFkeVN0YXRl
Q2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwgaW50IHJlYWR5U3RhdGUpOwogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVYSFJM
b2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVhIUkxvYWREYXRhKGNvbnN0IFN0cmluZyYgdXJsKTsK
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
Y3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBsaW5lTnVtYmVy
KTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRl
RXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBsaW5lTnVtYmVyKTsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcm
KTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gY3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YShjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVNjaGVkdWxlUmVz
b3VyY2VSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRh
KGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgc3Rh
dGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzb3VyY2VSZWNlaXZl
UmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZVJlY2VpdmVSZXNvdXJjZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGludCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBjcmVhdGVSZWNlaXZlUmVzb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBp
bnQgbGVuZ3RoKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gY3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCBib29sIGRpZEZhaWwsIGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICAgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBib29sIGRpZEZhaWwsIGRvdWJsZSBmaW5pc2hUaW1lKTsK
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
Y3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2Jq
ZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KTsKKyAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMs
IHVuc2lnbmVkIHRvdGFsT2JqZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KTsKIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRGVjb2Rl
SW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKTsKKyAgICAgICAgc3RhdGljIFJlZjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0
cmluZyYgaW1hZ2VUeXBlKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUp
OworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVS
ZXNpemVJbWFnZURhdGEoYm9vbCBzaG91bGRDYWNoZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZU1hcmtEYXRhKGJvb2wgaXNN
YWluRnJhbWUpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKTsKIAotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUGFyc2VIVE1MRGF0YSh1
bnNpZ25lZCBzdGFydExpbmUpOworICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVQYXJzZUhUTUxEYXRhKHVuc2lnbmVkIHN0YXJ0TGluZSk7CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0
ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQgY2FsbGJhY2tJZCk7CisgICAgICAgIHN0YXRpYyBSZWY8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQg
Y2FsbGJhY2tJZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKKyAgICAgICAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUGFpbnREYXRhKGNv
bnN0IEZsb2F0UXVhZCYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGFwcGVuZExheW91dFJvb3Qo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOwogCi0g
ICAgICAgIHN0YXRpYyB2b2lkIGFwcGVuZFByb2ZpbGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QqLCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4pOworICAgICAgICBzdGF0aWMgdm9pZCBhcHBl
bmRQcm9maWxlKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiwgUmVmUHRyPEpTQzo6UHJvZmls
ZT4mJik7CiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0gICAgICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlV2ViU29ja2V0Q3Jl
YXRlRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sKQorICAgICAgICBzdGF0aWMgaW5saW5lIFJlZjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gY3JlYXRlV2ViU29ja2V0Q3JlYXRlRGF0YSh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEg
PSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWY8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJpZGVudGlmaWVy
IiwgaWRlbnRpZmllcik7CiAgICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybC5z
dHJpbmcoKSk7CiAgICAgICAgICAgICBpZiAoIXByb3RvY29sLmlzTnVsbCgpKQogICAgICAgICAg
ICAgICAgIGRhdGEtPnNldFN0cmluZygid2ViU29ja2V0UHJvdG9jb2wiLCBwcm90b2NvbCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gV1RG
Ojptb3ZlKGRhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljV2ViU29ja2V0RGF0
YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCisgICAgICAgIHN0YXRpYyBpbmxpbmUgUmVmPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljV2ViU29ja2V0RGF0YSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAg
IGRhdGEtPnNldEludGVnZXIoImlkZW50aWZpZXIiLCBpZGVudGlmaWVyKTsKLSAgICAgICAgICAg
IHJldHVybiBkYXRhLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoZGF0
YSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggYWJh
OThkMi4uMGQ1YjEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
ckluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9X
b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTcyLDkgKzE3Miw5IEBAIHZvaWQgV29y
a2VySW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlND
OjpFeGVjU3RhdGUqIHNjCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVu
Y3Rpb24oY29va2llLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxT
dG9wd2F0Y2g+IFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCgp
CitSZWY8U3RvcHdhdGNoPiBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9w
d2F0Y2goKQogewotICAgIHJldHVybiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKKyAgICByZXR1cm4g
bV9leGVjdXRpb25TdG9wd2F0Y2guY29weVJlZigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNv
bnRyb2xsZXIuaAppbmRleCBkNDk5YTE5Li5lOTQ4MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTc0LDcgKzc0
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbEluamVjdGVkU2NyaXB0RnVu
Y3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3Jp
cHRMaW5lKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FsbEluamVjdGVkU2NyaXB0
RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZnJv
bnRlbmRJbml0aWFsaXplZCgpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
VEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNoKCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBSZWY8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb247CkBAIC04
NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgV29ya2VyUnVudGltZUFnZW50KiBtX3J1bnRpbWVB
Z2VudDsKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbD4gbV9mcm9udGVuZENo
YW5uZWw7Ci0gICAgUmVmUHRyPFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsK
KyAgICBSZWY8V1RGOjpTdG9wd2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwogICAgIFZlY3RvcjxJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUsIDI+IG1faW5q
ZWN0ZWRTY3JpcHRJbnN0cnVtZW50YXRpb25Db29raWVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggY2VjYWYxZi4uZjA3Mjc0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKQEAgLTEwNiwxOCArMTA2LDE4IEBA
IHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uCiAgICAgYWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBt
ZXNzYWdlLCB1cmwsIGxpbmUsIGNvbHVtbiwgMCwgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJy
ZW50U3RhdGUoKSwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xp
ZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxT
dGFjaykKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBz
b3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaykKIHsKLSAgICBhZGRNZXNzYWdlKHNvdXJjZSwg
bGV2ZWwsIG1lc3NhZ2UsIFN0cmluZygpLCAwLCAwLCBjYWxsU3RhY2ssIDApOworICAgIGFkZE1l
c3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgU3RyaW5nKCksIDAsIDAsIFdURjo6bW92ZShj
YWxsU3RhY2spLCAwKTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6YWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQg
UGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVybCwg
dW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBs
b25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmIChtdXRlQ291bnQgJiYgc291cmNlICE9
IE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChj
YWxsU3RhY2spCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRv
Q29uc29sZShtX3BhZ2UsIHNvdXJjZSwgTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2Us
IGNhbGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUobV9wYWdlLCBzb3VyY2UsIE1lc3NhZ2VUeXBl
OjpMb2csIGxldmVsLCBtZXNzYWdlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVzdElkZW50
aWZpZXIpOwogICAgIGVsc2UKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRN
ZXNzYWdlVG9Db25zb2xlKG1fcGFnZSwgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwg
bWVzc2FnZSwgdXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRl
bnRpZmllcik7CiAKQEAgLTEzNiwxMyArMTM2LDExIEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6
OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29u
CiB9CiAKIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwo
TWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gcHJwQXJndW1lbnRzKQor
dm9pZCBQYWdlQ29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5
cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMgPSBwcnBBcmd1bWVudHM7Ci0KICAgICBTdHJpbmcg
bWVzc2FnZTsKICAgICBib29sIGdvdE1lc3NhZ2UgPSBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1l
bnRBc1N0cmluZyhtZXNzYWdlKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1l
c3NhZ2VUb0NvbnNvbGUobV9wYWdlLCBNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBs
ZXZlbCwgbWVzc2FnZSwgZXhlYywgYXJndW1lbnRzKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUobV9wYWdlLCBNZXNzYWdlU291cmNlOjpDb25zb2xl
QVBJLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cykpOwog
CiAgICAgaWYgKG1fcGFnZS51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKQogICAgICAgICByZXR1cm47
CkBAIC0xNTUsMTIgKzE1MywxMiBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0
aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbAogICAgIH0KIAog
ICAgIGlmIChtX3BhZ2Uuc2V0dGluZ3MoKS5sb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xl
RW5hYmxlZCgpIHx8IFBhZ2VDb25zb2xlQ2xpZW50OjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkK
LSAgICAgICAgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMo
TWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cy5y
ZWxlYXNlKCkpOworICAgICAgICBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0
aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgZXhlYywg
V1RGOjptb3ZlKGFyZ3VtZW50cykpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpjb3Vu
dChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cykKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmNvdW50KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChtX3BhZ2UsIGV4ZWMsIGFyZ3VtZW50cyk7Cisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQobV9wYWdlLCBleGVjLCBX
VEY6Om1vdmUoYXJndW1lbnRzKSk7CiB9CiAKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnByb2Zp
bGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0xNzEsNyAr
MTY5LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6cHJvZmlsZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnByb2Zp
bGVFbmQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAg
aWYgKFJlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2ZpbGUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnN0b3BQcm9maWxpbmcobV9wYWdlLCBleGVjLCB0aXRsZSkpCi0gICAgICAgIG1fcHJvZmls
ZXMuYXBwZW5kKHByb2ZpbGUucmVsZWFzZSgpKTsKKyAgICAgICAgbV9wcm9maWxlcy5hcHBlbmQo
V1RGOjptb3ZlKHByb2ZpbGUpKTsKIH0KIAogdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6dGltZShK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0xODIsMTIgKzE4MCwxMiBA
QCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJiB0aXRsZSkKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVFbmQoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZXhlYywgMSkp
OwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmcobV9wYWdl
Lm1haW5GcmFtZSgpLCB0aXRsZSwgY2FsbFN0YWNrLnJlbGVhc2UoKSk7CisgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhtX3BhZ2UubWFpbkZyYW1lKCksIHRp
dGxlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSk7CiB9CiAKLXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6
OnRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMpCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAoSlNDOjpFeGVjU3Rh
dGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAobV9wYWdlLm1haW5GcmFtZSgpLCBh
cmd1bWVudHMpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFt
cChtX3BhZ2UubWFpbkZyYW1lKCksIFdURjo6bW92ZShhcmd1bWVudHMpKTsKIH0KIAogdm9pZCBQ
YWdlQ29uc29sZUNsaWVudDo6Y2xlYXJQcm9maWxlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b25zb2xlQ2xpZW50LmgKaW5kZXggYjZmNjE5OS4uYjJkNDdlYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUNvbnNvbGVDbGllbnQuaApAQCAtNTYsMjEgKzU2LDIxIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBtdXRlKCk7CiAgICAgc3RhdGljIHZvaWQgdW5tdXRlKCk7CiAKLSAgICB2b2lk
IGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNp
Z25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+
ID0gbnVsbHB0ciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllciA9IDApOwotICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlNjcmlwdENhbGxTdGFjaz4pOworICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmID0gbnVsbHB0ciwgSlNDOjpFeGVjU3RhdGUqID0g
bnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHZvaWQg
YWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKTsKICAgICB2b2lkIGFk
ZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwLCBEb2N1bWVudCogPSBudWxs
cHRyKTsKIAogICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9maWxlczsgfQogICAgIHZvaWQgY2xlYXJQcm9maWxlcygpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBN
ZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChKU0M6OkV4ZWNT
dGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0
ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxl
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZUVuZChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB0aW1lKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHRpbWVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCB0aW1lU3RhbXAoSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+JiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFBhZ2UmIG1fcGFnZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcAppbmRleCAxMzlmMDVjLi4w
NDU3ZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCkBA
IC0yMDcsNyArMjA3LDcgQEAgdm9pZCBSZXBsYXlDb250cm9sbGVyOjpzd2l0Y2hTZXNzaW9uKFBh
c3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKICAgICBtX2N1cnJlbnRQb3NpdGlvbiA9
IFJlcGxheVBvc2l0aW9uKDAsIDApOwogCiAgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzU3dpdGNo
aW5nIHNlc3Npb25zIGZyb20gJXAgdG8gJXAuXG4iLCAiUmVwbGF5Q29udHJvbGxlciIsIG1fbG9h
ZGVkU2Vzc2lvbi5nZXQoKSwgc2Vzc2lvbi5nZXQoKSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzZXNzaW9uTG9hZGVkKG1fcGFnZSwgbV9sb2FkZWRTZXNzaW9uKTsKKyAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Mb2FkZWQobV9wYWdlLCBtX2xvYWRlZFNlc3Np
b24uY29weVJlZigpKTsKIH0KIAogdm9pZCBSZXBsYXlDb250cm9sbGVyOjpjcmVhdGVTZWdtZW50
KCkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFJlcGxheUNvbnRyb2xsZXI6OmNyZWF0ZVNlZ21l
bnQoKQogICAgIG1fbG9hZGVkU2VnbWVudCA9IFJlcGxheVNlc3Npb25TZWdtZW50OjpjcmVhdGUo
KTsKIAogICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyBDcmVhdGVkIHNlZ21lbnQ6ICVwLlxuIiwg
IlJlcGxheUNvbnRyb2xsZXIiLCBtX2xvYWRlZFNlZ21lbnQuZ2V0KCkpOwotICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWQobV9wYWdlLCBtX2xvYWRlZFNlZ21lbnQp
OworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWQobV9wYWdlLCBt
X2xvYWRlZFNlZ21lbnQuY29weVJlZigpKTsKIAogICAgIG1fYWN0aXZlQ3Vyc29yID0gQ2FwdHVy
aW5nSW5wdXRDdXJzb3I6OmNyZWF0ZShtX2xvYWRlZFNlZ21lbnQpOwogICAgIG1fYWN0aXZlQ3Vy
c29yLT5hcHBlbmRJbnB1dDxCZWdpblNlZ21lbnRTZW50aW5lbD4oKTsKQEAgLTI0NywxMCArMjQ3
LDEwIEBAIHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6Y29tcGxldGVTZWdtZW50KCkKICAgICB1bmxv
YWRTZWdtZW50KHNob3VsZFN1cHByZXNzTm90aWZpY2F0aW9ucyk7CiAKICAgICBMT0coV2ViUmVw
bGF5LCAiJS0yMHMgQ29tcGxldGVkIHNlZ21lbnQ6ICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIi
LCBzZWdtZW50LmdldCgpKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRD
b21wbGV0ZWQobV9wYWdlLCBzZWdtZW50KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlZ21lbnRDb21wbGV0ZWQobV9wYWdlLCBzZWdtZW50LmNvcHlSZWYoKSk7CiAKICAgICBtX2xv
YWRlZFNlc3Npb24tPmFwcGVuZFNlZ21lbnQoc2VnbWVudCk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZXNzaW9uTW9kaWZpZWQobV9wYWdlLCBtX2xvYWRlZFNlc3Npb24pOworICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKG1fcGFnZSwgbV9sb2Fk
ZWRTZXNzaW9uLmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6bG9hZFNl
Z21lbnRBdEluZGV4KHNpemVfdCBzZWdtZW50SW5kZXgpCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9p
ZCBSZXBsYXlDb250cm9sbGVyOjpsb2FkU2VnbWVudEF0SW5kZXgoc2l6ZV90IHNlZ21lbnRJbmRl
eCkKICAgICBtX2FjdGl2ZUN1cnNvciA9IFJlcGxheWluZ0lucHV0Q3Vyc29yOjpjcmVhdGUobV9s
b2FkZWRTZWdtZW50LCBtX3BhZ2UsIHRoaXMpOwogCiAgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBz
TG9hZGluZyBzZWdtZW50OiAlcC5cbiIsICJSZXBsYXlDb250cm9sbGVyIiwgc2VnbWVudC5nZXQo
KSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkKG1fcGFnZSwg
c2VnbWVudCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkKG1f
cGFnZSwgc2VnbWVudC5jb3B5UmVmKCkpOwogfQogCiB2b2lkIFJlcGxheUNvbnRyb2xsZXI6OnVu
bG9hZFNlZ21lbnQoYm9vbCBzdXBwcmVzc05vdGlmaWNhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcAppbmRleCAwZWQz
ZTIzLi5iNGQxYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5w
dXRDcmVhdGlvbk1ldGhvZHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJ
bnB1dENyZWF0aW9uTWV0aG9kcy5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEluaXRpYWxOYXZpZ2F0aW9uPiBJbml0aWFsTmF2aWdhdGlvbjo6Y3JlYXRlRnJvbVBhZ2UoY29u
c3QgUGFnZSYKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbkNvcHkgPSBtYWluRnJh
bWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNvbGF0ZWRDb3B5KCk7CiAgICAgVVJM
IHVybCA9IG1haW5GcmFtZS5kb2N1bWVudCgpLT51cmwoKTsKICAgICBTdHJpbmcgcmVmZXJyZXIg
PSBtYWluRnJhbWUubG9hZGVyKCkucmVmZXJyZXIoKTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxJbml0aWFsTmF2aWdhdGlvbj4ob3JpZ2luQ29weSwgdXJsLCByZWZlcnJlcik7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5pdGlhbE5hdmlnYXRpb24+KFdURjo6bW92ZShvcmln
aW5Db3B5KSwgdXJsLCByZWZlcnJlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAK
aW5kZXggNjc0NjAzOS4uNTNjYjcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTc5LDEwICs3OSwxMCBAQCBTaGFyZWRX
b3JrZXJUaHJlYWQmIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjp0aHJlYWQoKQogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTaGFyZWRXb3JrZXJUaHJlYWQmPihCYXNlOjp0aHJlYWQoKSk7CiB9CiAK
LXZvaWQgU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5l
TnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjpsb2dFeGNl
cHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaykKIHsKLSAgICBXb3JrZXJHbG9iYWxT
Y29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjayk7Ci0gICAgYWRkTWVzc2FnZVRvV29ya2Vy
Q29uc29sZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgZXJyb3JNZXNz
YWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY2FsbFN0YWNrKTsKKyAg
ICBXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGVycm9yTWVzc2FnZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjay5jb3B5UmVmKCkp
OworICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIGNhbGxTdGFjay5jb3B5UmVmKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3Bl
LmgKaW5kZXggYzMzNWIyZi4uMTgxYTI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBTaGFyZWRXb3JrZXJHbG9iYWxTY29w
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50
LCBTaGFyZWRXb3JrZXJUaHJlYWQmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlv
blRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPikgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBs
b2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKSBvdmVycmlkZTsKIAogICAgICAgICBTdHJp
bmcgbV9uYW1lOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwCmluZGV4IDQ1MmNlYjUuLmEwYjQ3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBAIC0yMTQsNyArMjE0LDcgQEAgRXZlbnRUYXJn
ZXQqIFdvcmtlckdsb2JhbFNjb3BlOjplcnJvckV2ZW50VGFyZ2V0KCkKICAgICByZXR1cm4gdGhp
czsKIH0KIAotdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxp
bmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPikK
K3ZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmKQogewogICAgIHRo
cmVhZCgpLndvcmtlclJlcG9ydGluZ1Byb3h5KCkucG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0
KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwpOwogfQpA
QCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmFkZENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2CiAgICAgYWRkTWVzc2Fn
ZVRvV29ya2VyQ29uc29sZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBTdHJpbmcoKSwgMCwgMCwg
MCwgMCwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCi12b2lkIFdvcmtlckdsb2JhbFNjb3BlOjph
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
IGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJ
ZGVudGlmaWVyKQordm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIsIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYg
KCFpc0NvbnRleHRUaHJlYWQoKSkgewogICAgICAgICBwb3N0VGFzayhBZGRDb25zb2xlTWVzc2Fn
ZVRhc2soc291cmNlLCBsZXZlbCwgU3RyaW5nQ2FwdHVyZShtZXNzYWdlKSkpOwpAQCAtMjM4LDE0
ICsyMzgsMTQgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb24KICAgICB9CiAKICAgICB0aHJlYWQo
KS53b3JrZXJSZXBvcnRpbmdQcm94eSgpLnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0
KHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNl
VVJMKTsKLSAgICBhZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKHNvdXJjZSwgbGV2ZWwsIG1lc3Nh
Z2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2ssIHN0YXRl
LCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShzb3Vy
Y2UsIGxldmVsLCBtZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
V1RGOjptb3ZlKGNhbGxTdGFjayksIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CiB9CiAKLXZv
aWQgV29ya2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNv
dXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCBKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCit2b2lkIFdv
cmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQo
aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIGlmIChjYWxsU3RhY2spCi0gICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZSh0aGlzLCBzb3VyY2UsIE1lc3Nh
Z2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBjYWxsU3RhY2ssIHJlcXVlc3RJZGVudGlmaWVy
KTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xl
KHRoaXMsIHNvdXJjZSwgTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2UsIFdURjo6bW92
ZShjYWxsU3RhY2spLCByZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgZWxzZQogICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUodGhpcywgc291cmNlLCBN
ZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggNmY3NDZlYi4uNDg2YWFlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtMTQyLDggKzE0
Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUoY29u
c3QgVVJMJiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVhZCYsIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHRvcE9yaWdpbik7CiAgICAgICAgIHZvaWQgYXBwbHlDb250ZW50
U2VjdXJpdHlQb2xpY3lGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9s
aWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUpOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJl
ciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pIG92ZXJyaWRlOwotICAg
ICAgICB2b2lkIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBs
b25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNl
cHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhZGRNZXNz
YWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJl
ciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s+JiYsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIgPSAwKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQpAQCAtMTUyLDcgKzE1Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0
KCkgb3ZlcnJpZGUgZmluYWwgeyByZWYoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJl
ciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRp
ZmllciA9IDApIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNz
YWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSog
PSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgb3ZlcnJpZGU7CiAKICAg
ICAgICAgdmlydHVhbCBFdmVudFRhcmdldCogZXJyb3JFdmVudFRhcmdldCgpIG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IDAzM2E1NmQuLjM0NTYzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTUtMDEtMDYgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHB1cmdlIFBhc3NSZWZQdHIgZnJvbSBJbnNwZWN0b3IgY29k
ZSBhbmQgdXNlIFJlZiBmb3IgdHlwZWQgYW5kIHVudHlwZWQgcHJvdG9jb2wgb2JqZWN0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMDUzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KKworICAgICAgICAqIFdlYktpdC52Y3hw
cm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRFeHBvcnRzLmRlZi5pbjogdXBkYXRlIHN5
bWJvbC4KKwogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktp
dEV4cG9ydHMuZGVmLmluIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBv
cnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KaW5kZXggMGZmZjc5My4uNDJmNThlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5l
cmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4
cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KQEAgLTIwNCw3
ICsyMDQsNyBAQCBFWFBPUlRTCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9pdGVtQFN0YXRp
Y05vZGVMaXN0QFdlYkNvcmVAQFVCRVBBVk5vZGVAMkBJQFosID9pdGVtQFN0YXRpY05vZGVMaXN0
QFdlYkNvcmVAQFVFQkFQRUFWTm9kZUAyQElAWikKICAgICAgICAgP3NlbGVjdFRhZ0BIVE1MTmFt
ZXNAV2ViQ29yZUBAM1ZIVE1MUXVhbGlmaWVkTmFtZUAyQEIKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5v
ZGVASW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3JlQEBRQkU/QVY/JFBhc3NSZWZQdHJAVkluc3Bl
Y3Rvck9iamVjdEBJbnNwZWN0b3JAQEBXVEZAQFhaLCA/YnVpbGRPYmplY3RGb3JIaWdobGlnaHRl
ZE5vZGVASW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3JlQEBRRUJBP0FWPyRQYXNzUmVmUHRyQFZJ
bnNwZWN0b3JPYmplY3RASW5zcGVjdG9yQEBAV1RGQEBYWikKKyAgICAgICAgc3ltYm9sV2l0aFBv
aW50ZXIoP2J1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlQEluc3BlY3RvckNvbnRyb2xsZXJA
V2ViQ29yZUBAUUJFP0FWPyRSZWZQdHJAVkluc3BlY3Rvck9iamVjdEBJbnNwZWN0b3JAQEBXVEZA
QFhaLCA/YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGVASW5zcGVjdG9yQ29udHJvbGxlckBX
ZWJDb3JlQEBRRUJBP0FWPyRSZWZQdHJAVkluc3BlY3Rvck9iamVjdEBJbnNwZWN0b3JAQEBXVEZA
QFhaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/Z2V0SGlnaGxpZ2h0QEluc3BlY3RvckNv
bnRyb2xsZXJAV2ViQ29yZUBAUUJFWFBBVUhpZ2hsaWdodEAyQFc0Q29vcmRpbmF0ZVN5c3RlbUBJ
bnNwZWN0b3JPdmVybGF5QDJAQFosID9nZXRIaWdobGlnaHRASW5zcGVjdG9yQ29udHJvbGxlckBX
ZWJDb3JlQEBRRUJBWFBFQVVIaWdobGlnaHRAMkBXNENvb3JkaW5hdGVTeXN0ZW1ASW5zcGVjdG9y
T3ZlcmxheUAyQEBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/aW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvclBhZ2VASW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQFdlYkNvcmVAQFNBUEFWSW5zdHJ1
bWVudGluZ0FnZW50c0AyQFBBVlBhZ2VAMkBAWiwgP2luc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdl
QEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkBXZWJDb3JlQEBTQVBFQVZJbnN0cnVtZW50aW5nQWdl
bnRzQDJAUEVBVlBhZ2VAMkBAWikKICAgICAgICAgP3NfZnJvbnRlbmRDb3VudGVyQEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkBXZWJDb3JlQEAwSEEK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244205</attachid>
            <date>2015-01-07 14:34:54 -0800</date>
            <delta_ts>2015-01-07 14:35:05 -0800</delta_ts>
            <desc>[PATCH] ObjC side fixes</desc>
            <filename>ObjC-portion-fixes.patch</filename>
            <type>text/plain</type>
            <size>6207</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYXVnbWVudGFibGUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYXVnbWVudGFibGUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaAppbmRleCA4Zjdi
NDcwLi45MjIxZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2F1Z21lbnRhYmxlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVy
LCBudWxscHRyKTsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihtX2FsdGVybmF0ZURpc3BhdGNoZXIuZ2V0KCkpOwotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPnNldEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKTsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5zZXRCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlci5jb3B5UmVmKCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKSBvdmVycmlk
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRl
eCA0ZjNjMGMyLi40NWM1NDE3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weQpAQCAtNzYsMTAgKzc2LDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRp
c3BhdGNoZXIpOyB9Ci0gICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92
ZShkaXNwYXRjaGVyKTsgfQorICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
IHByaXZhdGU6Ci0gICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKIH07CiAiIiIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKaW5kZXggMDkxZmE2NC4uZDhlNjEyNCAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTMyLDcgKzMyLDcgQEAgZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCiAKIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiBm
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3
b3JrcworZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIEVudW1UeXBlLCBBbGlhc2Vk
VHlwZSwgRnJhbWV3b3JrcwogZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ1R5cGVDYXRl
Z29yeSwgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCiBmcm9tIG9iamNfZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxh
dGVzCiAKQEAgLTEzMyw3ICsxMzMsNyBAQCBjbGFzcyBPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGlmICglcyknICUgdmFyX25hbWUp
CiAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT4lcyhBU0NJSUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsnKQorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShj
YWxsSWQsIFdURjo6bW92ZShyZXN1bHRPYmplY3QpLCBTdHJpbmcoKSk7JykKICAgICAgICAgZWxz
ZToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBTdHJpbmco
KSk7JykKIApAQCAtMTQ1LDEyICsxNDUsMjIgQEAgY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25JbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBpZiBjb21tYW5kLmNhbGxf
cGFyYW1ldGVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAorICAgICAgICBkZWYg
aW5fcGFyYW1fZXhwcmVzc2lvbihwYXJhbV9uYW1lLCBwYXJhbWV0ZXIpOgorICAgICAgICAgICAg
X3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBl
ICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2ZS4KKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBl
LnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJyolcycgJSBwYXJhbV9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHBh
cmFtX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnJXMuY29weVJlZigpJyAlIHBhcmFtX25hbWUK
KwogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgogICAg
ICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKICAgICAgICAgICAgIG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVzJyAlIGluX3BhcmFtX25h
bWUKICAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9w
YXJhbShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIsIEZhbHNlKQotICAg
ICAgICAgICAgaW5fcGFyYW1fb3B0aW9uYWxfc2FmZV9uYW1lID0gJyolcycgJSBpbl9wYXJhbV9u
YW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIGluX3BhcmFtX25hbWUKLSAgICAgICAg
ICAgIGltcG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9y
dF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0ZXIoaW5fcGFyYW1fb3B0aW9uYWxfc2FmZV9uYW1lLCBk
b21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAgICAgICAgICBwYXJh
bV9leHByZXNzaW9uID0gaW5fcGFyYW1fZXhwcmVzc2lvbihpbl9wYXJhbV9uYW1lLCBwYXJhbWV0
ZXIpCisgICAgICAgICAgICBpbXBvcnRfZXhwcmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19w
cm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVyKHBhcmFtX2V4cHJlc3Npb24s
IGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKICAgICAgICAgICAgIGlm
IG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgJXMgPSAlczsnICUgKGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5f
cGFyYW1fbmFtZSksIGltcG9ydF9leHByZXNzaW9uKSkKICAgICAgICAgICAgIGVsc2U6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYTNjNGUxYi4uNzMx
MzYwNiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAt
MTQ3LDUgKzE0Nyw1IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBwYXJhbXNPYmplY3QtPiVz
KEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFy
YW1zT2JqZWN0KTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdC5jb3B5UmVmKCkpOycp
CiAgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUK
</data>

          </attachment>
      

    </bug>

</bugzilla>