<?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>43382</bug_id>
          
          <creation_ts>2010-08-02 14:43:14 -0700</creation_ts>
          <short_desc>Auto-generate {DOMWindow,WorkerContext}::openDatabase{Sync}</short_desc>
          <delta_ts>2010-08-09 14:38:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>259127</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-02 14:43:14 -0700</bug_when>
    <thetext>Kinuko recently added support for callback arguments to code generator, which means that DOMWindow::openDatabase, and WorkerContext::openDatabase{Sync} can be auto-generated. We should do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259958</commentid>
    <comment_count>1</comment_count>
      <attachid>63438</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-04 03:44:58 -0700</bug_when>
    <thetext>Created attachment 63438
patch

Even though the patch is huge, most of it is mechanical changes. The only interesting changes are in CodeGenerator{JS|V8}.pm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259959</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-04 03:47:28 -0700</bug_when>
    <thetext>Attachment 63438 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:47:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/ChangeLog:86:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 20 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>260957</commentid>
    <comment_count>3</comment_count>
      <attachid>63438</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-05 16:59:47 -0700</bug_when>
    <thetext>Comment on attachment 63438
patch

WebCore/ChangeLog:26
 +  
extra blank line.

Wow, this patch is awesome.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260965</commentid>
    <comment_count>4</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-05 17:07:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 63438 [details])
&gt; WebCore/ChangeLog:26
&gt;  +  
&gt; extra blank line.

Following Darin Adler&apos;s style of ChangeLog entries, where all changed files are split into groups, according to the changes made to them. :)

Also, I&apos;ve addressed the issues reported by the style bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260974</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-05 17:19:42 -0700</bug_when>
    <thetext>Ah, ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261196</commentid>
    <comment_count>6</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-06 04:47:53 -0700</bug_when>
    <thetext>landed: r64835.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261200</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-06 04:52:42 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/64835 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261207</commentid>
    <comment_count>8</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-06 05:41:08 -0700</bug_when>
    <thetext>The patch broke the &quot;Qt Linux minimal&quot; and &quot;Gtk Linux 64-bit Debug&quot; builds. Both builds are fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261210</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-06 06:01:10 -0700</bug_when>
    <thetext>Rolling it out for breaking 800 chromium tests. Will roll in in case it was not the real cause.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/fast/workers/storage/open-database-inputs-sync-expected.txt
	M	LayoutTests/fast/workers/storage/resources/open-database-inputs-sync.js
	M	LayoutTests/storage/null-callbacks.html
	M	WebCore/Android.jscbindings.mk
	M	WebCore/Android.v8bindings.mk
	M	WebCore/CMakeLists.txt
	M	WebCore/ChangeLog
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.pro
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/bindings/js/JSBindingsAllInOne.cpp
	M	WebCore/bindings/js/JSDOMWindowCustom.cpp
	A	WebCore/bindings/js/JSDatabaseCustom.cpp
	A	WebCore/bindings/js/JSDatabaseSyncCustom.cpp
	M	WebCore/bindings/js/JSWorkerContextCustom.cpp
	M	WebCore/bindings/scripts/CodeGeneratorGObject.pm
	M	WebCore/bindings/scripts/CodeGeneratorJS.pm
	M	WebCore/bindings/scripts/CodeGeneratorV8.pm
	M	WebCore/bindings/scripts/test/JS/JSTestCallback.cpp
	M	WebCore/bindings/scripts/test/JS/JSTestObj.cpp
	M	WebCore/bindings/scripts/test/TestObj.idl
	M	WebCore/bindings/scripts/test/V8/V8TestObj.cpp
	M	WebCore/bindings/v8/V8Binding.h
	M	WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
	A	WebCore/bindings/v8/custom/V8DatabaseCustom.cpp
	A	WebCore/bindings/v8/custom/V8DatabaseSyncCustom.cpp
	M	WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
	M	WebCore/page/DOMWindow.idl
	M	WebCore/storage/Database.cpp
	M	WebCore/storage/Database.h
	M	WebCore/storage/Database.idl
	M	WebCore/storage/DatabaseSync.cpp
	M	WebCore/storage/DatabaseSync.h
	M	WebCore/storage/DatabaseSync.idl
	M	WebCore/workers/WorkerContext.idl
Committed r64840</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261217</commentid>
    <comment_count>10</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-06 06:26:35 -0700</bug_when>
    <thetext>Reverting the patch fixed the Chromium problem. I&apos;ll patch it in my Chromium client and fix the problem before I resubmit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261550</commentid>
    <comment_count>11</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-06 16:18:21 -0700</bug_when>
    <thetext>it looks like the checks i wanted to add to the code generators are too strict and would probably break a lot of (badly coded) websites. so i&apos;ll work on a patch that only affects the DB bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262104</commentid>
    <comment_count>12</comment_count>
      <attachid>63888</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-09 05:22:22 -0700</bug_when>
    <thetext>Created attachment 63888
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262107</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-09 05:24:38 -0700</bug_when>
    <thetext>Attachment 63888 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:47:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 1 in 21 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>262108</commentid>
    <comment_count>14</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-09 05:25:21 -0700</bug_when>
    <thetext>&gt; WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:47:  Use 0 instead of NULL.  [readability/null] [4]

It&apos;s a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262134</commentid>
    <comment_count>15</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-09 07:23:53 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:47:  Use 0 instead of NULL.  [readability/null] [4]
&gt; 
&gt; It&apos;s a comment.

See https://bugs.webkit.org/show_bug.cgi?id=34605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262222</commentid>
    <comment_count>16</comment_count>
      <attachid>63888</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-09 10:51:03 -0700</bug_when>
    <thetext>Comment on attachment 63888
patch

Nice solution.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262301</commentid>
    <comment_count>17</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-09 13:41:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; &gt; WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:47:  Use 0 instead of NULL.  [readability/null] [4]
&gt; &gt; 
&gt; &gt; It&apos;s a comment.
&gt; 
&gt; See https://bugs.webkit.org/show_bug.cgi?id=34605

I&apos;ll change the comment from NULL to 0, but I haven&apos;t heard anybody saying &quot;if X is zero, then ...&quot; when talking about pointers; it&apos;s always &quot;if X is null, then...&quot;. Therefore, imho, it should be OK to use NULL instead of 0 in comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262303</commentid>
    <comment_count>18</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-09 13:48:50 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I&apos;ll change the comment from NULL to 0, but I haven&apos;t heard anybody saying &quot;if X is zero, then ...&quot; when talking about pointers; it&apos;s always &quot;if X is null, then...&quot;. Therefore, imho, it should be OK to use NULL instead of 0 in comments.

No a big deal.

fwiw, null doesn&apos;t get flagged (only NULL).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262326</commentid>
    <comment_count>19</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-09 14:38:05 -0700</bug_when>
    <thetext>re-landed: r65005.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63438</attachid>
            <date>2010-08-04 03:44:58 -0700</date>
            <delta_ts>2010-08-09 05:22:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>120605</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA0IEBACisyMDEwLTA4LTA0ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQXV0by1nZW5lcmF0ZSBhbGwgSFRNTDUgREIgYmluZGluZ3MuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzM4MgorCisgICAgICAgICogQW5kcm9p
ZC5qc2NiaW5kaW5ncy5tazogUmVtb3ZlIHtKU3xWOH1EYXRhYmFzZXtTeW5jfUN1c3RvbS5jcHAK
KyAgICAgICAgYW5kIHRoZSBjdXN0b20gaW1wbGVtZW50YXRpb25zIG9mIG9wZW5EYXRhYmFze1N5
bmN9KCkuCisgICAgICAgICogQW5kcm9pZC52OGJpbmRpbmdzLm1rOgorICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhEYXRhYmFzZUN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBDaGFuZ2UgdGhlIGNvZGUgZ2VuZXJhdG9y
cworICAgICAgICB0byBjaGVjayB0aGF0IGEgdmFsdWUgd2FzIHBhc3NlZCBmb3IgZWFjaCBub24t
b3B0aW9uYWwgYXJndW1lbnQsCisgICAgICAgIGFuZCB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUgY29u
dmVydGVkIHRvIHRoZSBhcmd1bWVudCB0eXBlLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6fkpT
VGVzdENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9p
ZE1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uSW50TWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNB
bGxBcmdzQW5kVGhyb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uU2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uSWRiS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ3VzdG9tQXJnc0FuZEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRBcmcpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kT3B0
aW9uYWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRU
d29PcHRpb25hbEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0FuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpJbnRlcm5hbDo6dm9pZE1ldGhvZFdpdGhBcmdzQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9iakludGVybmFsOjppbnRNZXRob2RXaXRoQXJnc0NhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kV2l0aEFyZ3NDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6aWRiS2V5Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9iakludGVybmFsOjpjdXN0b21BcmdzQW5kRXhjZXB0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRoRHluYW1pY0ZyYW1lQW5kQXJn
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRoRHluYW1p
Y0ZyYW1lQW5kT3B0aW9uYWxBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
SW50ZXJuYWw6OndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0
dXJlQVNBRENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0
aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iaklu
dGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
akludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDFDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QyQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kM0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDRDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6Q29uZmlndXJl
VjhUZXN0T2JqVGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmlu
Zyk6CisKKwkqIHBhZ2UvRE9NV2luZG93LmlkbDogTWlub3IgY2hhbmdlcyByZXF1aXJlZCBieSB0
aGUgYXV0by1nZW5lcmF0ZWQKKyAgICAgICAgYmluZGluZ3MuCisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAqIHN0b3JhZ2UvRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmlkbDoKKyAgICAgICAgKiBzdG9y
YWdlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6cnVuVHJhbnNhY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRh
YmFzZVN5bmMuaWRsOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisKIDIw
MTAtMDgtMDMgIEJlbiBNdXJkb2NoICA8YmVubUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1r
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawkocmV2aXNpb24g
NjQ2MzgpCisrKyBXZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDcgKzkwLDYgQEAgTE9DQUxfU1JDX0ZJTEVTICs9IFwKIAliaW5kaW5ncy9qcy9KU0Rh
dGFiYXNlQ2FsbGJhY2suY3BwIFwKIAliaW5kaW5ncy9qcy9KU0RhdGFHcmlkQ29sdW1uTGlzdEN1
c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pTRGF0YUdyaWREYXRhU291cmNlLmNwcCBcCi0JYmlu
ZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pTRGVkaWNhdGVk
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pTRGVza3RvcE5vdGlmaWNh
dGlvbnNDdXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRD
dXN0b20uY3BwIFwKSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCShyZXZpc2lvbiA2NDYzOCkKKysr
IFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyAr
MTA2LDYgQEAgTE9DQUxfU1JDX0ZJTEVTICs9IFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxp
c3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUNhbGxiYWNrLmNw
cCBcCi0JYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwIFwKIAliaW5kaW5n
cy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCBcCiAJYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgXAogCWJpbmRp
bmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcCBcCkluZGV4OiBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDY0NjM4KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTg3
LDkgKzU4Nyw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCiAgICAgYmluZGluZ3MvanMvSlNDdXN0b21W
b2lkQ2FsbGJhY2suY3BwCiAgICAgYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwCi0gICAgYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAKLSAgICBiaW5kaW5ncy9q
cy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3Vz
dG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcAog
ICAgIGJpbmRpbmdzL2pzL0pTRGF0YUdyaWREYXRhU291cmNlLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTRGVidWdXcmFwcGVyU2V0LmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2NDYzOCkKKysrIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI3MjgsOCArMjcyOCw2IEBA
IHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAKIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIFwK
LQlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwIFwKLQlXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjQ2MzgpCisrKyBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTQwLDggKzU0MCw2IEBACiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oJywKLSAgICAgICAgICAg
ICdiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9q
cy9KU0RhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L2pzL0pTRGF0YUdyaWREYXRhU291cmNlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMv
SlNEYXRhR3JpZERhdGFTb3VyY2UuaCcsCkBAIC03NDAsOCArNzM4LDYgQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgnLAot
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcCcsCi0g
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YUdyaWRDb2x1bW5MaXN0Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVkV29y
a2VyQ29udGV4dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjQ2Mzgp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEzLDggKzI0MTMs
NiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREFUQUJBU0U9MSkgewogICAgICAgICBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxU
cmFuc2FjdGlvblN5bmMuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBcCi0gICAgICAgIGJpbmRpbmdzL2pzL0pTRGF0YWJhc2VD
dXN0b20uY3BwIFwKLSAgICAgICAgYmluZGluZ3MvanMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3Bw
IFwKICAgICAgICAgYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBc
CiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwIFwKICAgICAg
ICAgYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY0NjM4KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDIwNjAs
MTEwICs0MjA2MCw2IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU0RhdGFiYXNlQ3VzdG9tLmNwcCINCi0JCQkJ
CT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0K
LQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0K
LQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVs
ZWFzZXxXaW4zMiINCi0JCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQk+DQot
CQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkvPg0K
LQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJ
CQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlX0Nh
aXJvfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0J
CQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQot
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJ
CQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
Ig0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQot
CQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRGF0YWJhc2VT
eW5jQ3VzdG9tLmNwcCINCi0JCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJ
CQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJ
CQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KLQkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWdf
Q2Fpcm98V2luMzIiDQotCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJPg0K
LQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJLz4N
Ci0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0J
CQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0KLQkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJp
bmRpbmdzXGpzXEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MzI5LDcgKzQzMjksNiBAQAog
CQlCNTUwQjUyNjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1MEI1MjIxMURDNjhBODAw
OTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLzsgfTsKIAkJQjU1RDVBQTQxMTkxMzFGQzAw
QkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NUQ1QUEyMTE5MTMxRkMwMEJDQzMxNSAv
KiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi87IH07CiAJCUI1NUQ1QUE1MTE5MTMx
RkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NUQ1QUEzMTE5MTMxRkMwMEJD
QzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCAqLzsgfTsKLQkJQjU1RDVB
QTgxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NUQ1QUE2MTE5MTMyNTAwMEJD
QzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgKi87IH07CiAJCUI1NUQ1QUE5MTE5MTMy
NTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBNzExOTEzMjUwMDBCQ0Mz
MTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwICovOyB9OwogCQlCNTZFQkE4NTEx
QzlGRjgxMDBCMDQ0NzcgLyogU1FMRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTZFQkE4MzExQzlGRjgxMDBCMDQ0NzcgLyogU1FMRXhj
ZXB0aW9uLmggKi87IH07CiAJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNl
U3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU4
Q0VCNjcxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggKi87IH07CkBAIC00Nzgz
LDcgKzQ3ODIsNiBAQAogCQlCQ0NCRTdCNTBFMDcxNjY5MDBFQUZBOEUgLyogQ1NTVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0NCRTdCNDBFMDcxNjY5MDBFQUZBOEUgLyogQ1NTVmFyaWFibGVEZXBlbmRlbnRW
YWx1ZS5jcHAgKi87IH07CiAJCUJDQ0Q3NERDMEE0QzhEMzUwMDVGREE2RCAvKiBIVE1MVmlld1Nv
dXJjZURvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0NENzREQjBBNEM4RDM1MDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5o
ICovOyB9OwogCQlCQ0NENzRFNTBBNEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0NENzRFNDBBNEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgKi87
IH07Ci0JCUJDQ0U1OEFDMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQ0U1OEFCMTA2
MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkNDRkJBRTgw
QjUxNTJFRDAwMDFGMUQ3IC8qIERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NGQkFFNzBCNTE1MkVEMDAwMUYxRDcgLyogRG9j
dW1lbnRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQ0QwRTBGQTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEMEUwRjcwRTk3
MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmNwcCAqLzsgfTsKIAkJQkNEMEUwRkIwRTk3
MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QwRTBGODBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJp
dHlPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtOTk4Niw3ICs5OTg0LDYgQEAKIAkJQjU1MEI1MjIxMURDNjhBODAwOTIzODg1IC8qIFNR
TFN0YXRlbWVudFN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMU3Rh
dGVtZW50U3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFBMjExOTEz
MUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBK
U1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCNTVENUFBNjExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFz
ZVN5bmNDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
YXRhYmFzZVN5bmNDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVE
NUFBNzExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvblN5bmND
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFCQjExOTEzMjcy
MDBCQ0MzMTUgLyogRGF0YWJhc2VTeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXRh
YmFzZVN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFCQzExOTEz
MjcyMDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBTUUxUcmFuc2FjdGlvblN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTA0NzUsNyArMTA0NzIsNiBAQAogCQlCQ0NCRTdCNDBFMDcxNjY5MDBFQUZBOEUgLyogQ1NT
VmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNDRDc0REIwQTRDOEQzNTAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9j
dW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxWaWV3U291cmNl
RG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDRDc0RTQwQTRDOERE
RjAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0NFNThBQjEwNjFFOENGMDA4RkIzNUEgLyogSlNEYXRh
YmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rh
dGFiYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDRkJBRTcw
QjUxNTJFRDAwMDFGMUQ3IC8qIERvY3VtZW50UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0QwRTBGNzBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VjdXJpdHlPcmlnaW4uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0QwRTBGODBFOTcyQzM1MDAyNjVERUEgLyogU2Vj
dXJpdHlPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlP
cmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1OTA3LDggKzE1OTAzLDYg
QEAKIAkJCQk5MzkyMjYyRTEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxlTGlzdEN1c3RvbS5j
cHAgKi8sCiAJCQkJQkM1ODI1RjIwQzBCODkzODAwNTNGMUI1IC8qIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NT
VmFsdWVDdXN0b20uY3BwICovLAotCQkJCUJDQ0U1OEFCMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0Rh
dGFiYXNlQ3VzdG9tLmNwcCAqLywKLQkJCQlCNTVENUFBNjExOTEzMjUwMDBCQ0MzMTUgLyogSlNE
YXRhYmFzZVN5bmNDdXN0b20uY3BwICovLAogCQkJCUJDNzdEMTUxMEZGMTlDNzMwMDcwODg3QiAv
KiBKU0RhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgKi8sCiAJCQkJNDE2MkE0NTMxMDExNDVF
MzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi8sCiAJCQkJ
MzM1MDNDQkYxMDE3OUMxQTAwM0I0N0UxIC8qIEpTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20u
Y3BwICovLApAQCAtMjExNTcsOSArMjExNTEsNyBAQAogCQkJCUUxMEI5M0MzMEI3M0MyOTEwMDNF
RDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCNTlERDY5QTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFiYXNl
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1OENFQjZBMTE5MTM2MDcwMDJBNjc5MCAv
KiBKU0RhdGFiYXNlU3luYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTVENUFBODExOTEzMjUw
MDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM3N0QxNjkwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM3N0QxNkIwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5M
aXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTUyMEZGMTlDNzMwMDcwODg3QiAvKiBK
U0RhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDY0NjM4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw4ICs1Nyw2IEBACiAjaW5jbHVkZSAiSlNET01XcmFwcGVyLmNwcCIKICNpbmNs
dWRlICJKU0RhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNEYXRhR3Jp
ZERhdGFTb3VyY2UuY3BwIgotI2luY2x1ZGUgIkpTRGF0YWJhc2VDdXN0b20uY3BwIgotI2luY2x1
ZGUgIkpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RlYnVnV3JhcHBlclNl
dC5jcHAiCiAjaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCIKICNp
bmNsdWRlICJKU0Rlc2t0b3BOb3RpZmljYXRpb25zQ3VzdG9tLmNwcCIKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA2NDYzOCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJD
aHJvbWUuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgpAQCAtMzYs
MTAgKzM1LDYgQEAKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIaXN0b3J5
LmgiCiAjaW5jbHVkZSAiSlNBdWRpb0NvbnN0cnVjdG9yLmgiCi0jaWYgRU5BQkxFKERBVEFCQVNF
KQotI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJKU0RhdGFiYXNlQ2FsbGJhY2su
aCIKLSNlbmRpZgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJKU0V2
ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCkBAIC0xMDA2LDQ5ICsxMDAxLDYg
QEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotSlNWYWx1ZSBKU0RPTVdp
bmRvdzo6b3BlbkRhdGFiYXNlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoIWFsbG93c0Fj
Y2Vzc0Zyb20oZXhlYykgfHwgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQpKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdmVyc2lv
biA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLQotICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgyKS50b1N0cmluZyhleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIC8vIGV4ZWMtPmFyZ3VtZW50KDMp
ID0gZXN0aW1hdGVkIHNpemUKLSAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUgPSBleGVj
LT5hcmd1bWVudCgzKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSA1KSB7Ci0gICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoNCkuaXNPYmplY3QoKSkgewot
ICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY3Jl
YXRpb25DYWxsYmFjayA9IEpTRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMt
PmFyZ3VtZW50KDQpKSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoaW1wbCgpLT5vcGVuRGF0YWJhc2UobmFtZSwgdmVyc2lvbiwgZGlzcGxh
eU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpKTsK
LQotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LSNlbmRpZgotCiBET01XaW5kb3cqIHRvRE9NV2luZG93KEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFi
YXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJh
c2VDdXN0b20uY3BwCShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
YXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCi0KLSNpZiBFTkFCTEUoREFU
QUJBU0UpCi0KLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkpTU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgotI2luY2x1ZGUgIkpTU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCIKLSNp
bmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiU1FMVmFsdWUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1KU1ZhbHVlIEpT
RGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIFN0cmluZyBv
bGRWZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIG5ld1ZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2s7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+IDIgJiYgIWV4ZWMtPmFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgyKS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKCFv
YmplY3QpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNhbGxiYWNrID0gSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0
LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSk7Ci0gICAg
fQotCi0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
azsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMyAmJiAhZXhlYy0+YXJndW1lbnQo
MykuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50
KDMpLmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IEpT
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSk7Ci0gICAgfQotCi0gICAgUmVmUHRy
PFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrOwotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPiA0ICYmICFleGVjLT5hcmd1bWVudCg0KS5pc051bGwoKSkgewotICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoNCkuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlm
ICghb2JqZWN0KSB7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNN
QVRDSF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBKU0N1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRl
KG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSkp
OwotICAgIH0KLQotICAgIG1faW1wbC0+Y2hhbmdlVmVyc2lvbihvbGRWZXJzaW9uLCBuZXdWZXJz
aW9uLCBjYWxsYmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNz
Q2FsbGJhY2sucmVsZWFzZSgpKTsKLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1z
dGF0aWMgSlNWYWx1ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIERhdGFiYXNl
KiBkYXRhYmFzZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCByZWFkT25s
eSkKLXsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0
KCk7Ci0KLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
VFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2soSlNTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBnbG9iYWxPYmplY3QpKTsKLSAgICBSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwotICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPiAxICYmICFleGVjLT5hcmd1bWVudCgxKS5pc051bGwoKSkg
ewotICAgICAgICBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgxKS5nZXRPYmplY3QoKTsKLSAgICAg
ICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBF
X01JU01BVENIX0VSUik7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBKU1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjazo6Y3JlYXRlKG9iamVjdCwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2s7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+IDIgJiYgIWV4ZWMtPmFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7Ci0gICAgICAgIG9iamVj
dCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsK
LSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrID0gSlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGds
b2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNr
LnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxl
YXNlKCksIHJlYWRPbmx5KTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1
ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJu
IGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIG1faW1wbC5nZXQoKSwgc3RhdGljX2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSksIGZhbHNlKTsKLX0KLQotSlNWYWx1ZSBKU0Rh
dGFiYXNlOjpyZWFkVHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBj
cmVhdGVUcmFuc2FjdGlvbihleGVjLCBtX2ltcGwuZ2V0KCksIHN0YXRpY19jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLCB0cnVlKTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlU3lu
Y0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNl
U3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDY0NjM4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RhdGFiYXNlU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNEYXRhYmFzZVN5bmMuaCIKLQotI2lm
IEVOQUJMRShEQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUpTVmFsdWUgSlNEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNp
b24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIFN0cmluZyBvbGRWZXJzaW9uID0gdXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgU3Ry
aW5nIG5ld1ZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+
IGNhbGxiYWNrOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyICYmICFleGVjLT5h
cmd1bWVudCgyKS5pc051bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+
YXJndW1lbnQoMikuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYWxsYmFjayA9
IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKTsKLSAgICB9Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2ltcGwtPmNoYW5nZVZlcnNpb24ob2xkVmVyc2lvbiwg
bmV3VmVyc2lvbiwgY2FsbGJhY2sucmVsZWFzZSgpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgSlNW
YWx1ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIERhdGFiYXNlU3luYyogZGF0
YWJhc2UsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgcmVhZE9ubHkpCi17
Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgpOwot
ICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01J
U01BVENIX0VSUik7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAg
IFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2soSlNTUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZ2xvYmFsT2JqZWN0KSk7Ci0KLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2su
cmVsZWFzZSgpLCByZWFkT25seSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
Ci0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSBKU0RhdGFiYXNlU3lu
Yzo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBjcmVhdGVUcmFu
c2FjdGlvbihleGVjLCBtX2ltcGwuZ2V0KCksIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KCkpLCBmYWxzZSk7Ci19Ci0KLUpTVmFsdWUgSlNEYXRhYmFzZVN5bmM6
OnJlYWRUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVRy
YW5zYWN0aW9uKGV4ZWMsIG1faW1wbC5nZXQoKSwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QoKSksIHRydWUpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
REFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwCShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDYgQEAKIAog
I2luY2x1ZGUgIkpTV29ya2VyQ29udGV4dC5oIgogCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2lu
Y2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAi
SlNEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkpTRGF0YWJhc2VDYWxsYmFjay5oIgotI2luY2x1ZGUg
IkpTRGF0YWJhc2VTeW5jLmgiCi0jZW5kaWYKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIK
QEAgLTE1Myw4OSArMTQ2LDYgQEAgSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om1lc3NhZ2VDaGFu
bmVsKAogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTV29ya2Vy
Q29udGV4dDo6b3BlbkRhdGFiYXNlKEV4ZWNTdGF0ZSogZXhlYykgCi17IAotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCA0KSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBT
WU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAg
U3RyaW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBkaXNwbGF5
TmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLQotICAgIC8vIGV4ZWMtPmFyZ3VtZW50KDMpID0gZXN0aW1hdGVkIHNpemUKLSAgICB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUgPSBleGVjLT5hcmd1bWVudCgzKS50b1VJbnQzMihl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJh
Y2s7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA1KSB7Ci0gICAgICAgIGlmICgh
ZXhlYy0+YXJndW1lbnQoNCkuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0YWJh
c2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDQpKSwgZ2xvYmFsT2Jq
ZWN0KCkpOwotICAgIH0KLSAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsgCi0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsKCkt
Pm9wZW5EYXRhYmFzZShuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwg
Y3JlYXRpb25DYWxsYmFjay5yZWxlYXNlKCksIGVjKSkpOyAKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOyAKLSAgICByZXR1cm4gcmVzdWx0OyAKLX0gCi0gCi1KU1ZhbHVlIEpTV29ya2Vy
Q29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAg
ICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGRpc3Bs
YXlOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCi0gICAgLy8gZXhlYy0+YXJndW1lbnQoMykgPSBlc3RpbWF0ZWQgc2l6ZQotICAg
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvVUludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxs
YmFjazsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDUpIHsKLSAgICAgICAgaWYg
KCFleGVjLT5hcmd1bWVudCg0KS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRh
YmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoNCkpLCBnbG9iYWxP
YmplY3QoKSk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsKCkt
Pm9wZW5EYXRhYmFzZVN5bmMobmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNp
emUsIGNyZWF0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpKTsKLQotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNjQ2Mzgp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTA5LDE1ICsxOTA5LDI2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15
ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBlYXJseSBjYWxsIGlmIHRoZXJl
IGFyZSBlbm91Z2ggcGFyYW1ldGVycy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ISRoYXNPcHRpb25hbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIGludCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVu
dENvdW50KCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhhc09wdGlv
bmFsQXJndW1lbnRzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFs
IGNhbGxiYWNrcyBzaG91bGQgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBiZWNhdXNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgLSB0aGV5IGFsd2F5cyBoYXZlIGEgZGVmYXVsdCB2YWx1
ZTogMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLSBpdCByZWR1Y2VzIHRoZSBudW1i
ZXIgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMgd2l0aCBkaWZmZXJlbnQgbnVtYmVyIG9mIHBhcmFt
ZXRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRwYXJhbWV0ZXItPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgR2VuZXJhdGUgZWFybHkgY2FsbCBpZiB0aGVyZSBhcmUgZW5vdWdoIHBhcmFtZXRl
cnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGhhc09wdGlvbmFsQXJn
dW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGFzT3B0aW9uYWxBcmd1bWVu
dHMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhcmdzQ291bnQg
PD0gJGFyZ3NJbmRleCkge1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdl
bmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoJGZ1bmN0aW9uLCAkZnVuY3Rpb25TdHJp
bmcsICRwYXJhbUluZGV4LCAiICAgICIgeCAyLCAkcG9kVHlwZSwgJGltcGxDbGFzc05hbWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGFyZ3NDb3VudCA8ICIgLiAoJGFy
Z3NJbmRleCArIDEpIC4gIikge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0cmlu
ZywgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRwb2RUeXBlLCAkaW1wbENsYXNzTmFtZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8PSAkYXJnc0luZGV4KSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFU
Q0hfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxu
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IG15ICRuYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKQEAgLTE5MzUsMTEgKzE5NDYsMjMgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAk
Y2FsbGJhY2tDbGFzc05hbWUgPSBHZXRDYWxsYmFja0NsYXNzTmFtZSgkcGFyYW1ldGVyLT50eXBl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIkY2FsbGJhY2tD
bGFzc05hbWUuaCJ9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAkYXJn
c0luZGV4IHx8ICFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc09iamVjdCgpKSB7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFJlZlB0cjwiIC4gJHBhcmFtZXRlci0+dHlwZSAuICI+ICRuYW1lID0g
IiAuICRjYWxsYmFja0NsYXNzTmFtZSAuICI6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVu
dCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiT3B0aW9uYWwifSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBSZWZQdHI8IiAuICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkbmFtZTtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiBleGVjLT5hcmd1
bWVudCgkYXJnc0luZGV4KS5pc09iamVjdCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5nZXRPYmplY3QoKTtcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKCFv
YmplY3QpIHtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
O1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0
ZShvYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KCRhcmdz
SW5kZXgpLmlzT2JqZWN0KCkgfHwgIWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmdldE9iamVj
dCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFJlZlB0cjwiIC4gJHBhcmFtZXRlci0+dHlwZSAuICI+ICRuYW1lID0gIiAuICRjYWxsYmFj
a0NsYXNzTmFtZSAuICI6OmNyZWF0ZShleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5nZXRPYmpl
Y3QoKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZl
VHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05h
dGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICI7XG4iKTsK
IApAQCAtMTk1NSw2ICsxOTc4LDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogCisg
ICAgICAgICAgICAgICAgICAgICAgICAjIENhbGxiYWNrIHBhcmFtZXRlcnMgaGF2ZSB0aGVpciBz
cGVjaWFsIGVycm9yIGNoZWNraW5nIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ISRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAg
ICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJOb2RlRmlsdGVyIikgewpAQCAt
MjM0Myw3ICsyMzcyLDggQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIHJldHVybiAiJHZhbHVl
LnRvQm9vbGVhbihleGVjKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJHZh
bHVlLnRvTnVtYmVyKGV4ZWMpIiBpZiAkdHlwZSBlcSAiZG91YmxlIjsKICAgICByZXR1cm4gIiR2
YWx1ZS50b0Zsb2F0KGV4ZWMpIiBpZiAkdHlwZSBlcSAiZmxvYXQiIG9yICR0eXBlIGVxICJTVkdO
dW1iZXIiOwotICAgIHJldHVybiAiJHZhbHVlLnRvSW50MzIoZXhlYykiIGlmICR0eXBlIGVxICJ1
bnNpZ25lZCBsb25nIiBvciAkdHlwZSBlcSAibG9uZyIgb3IgJHR5cGUgZXEgInVuc2lnbmVkIHNo
b3J0IjsKKyAgICByZXR1cm4gIiR2YWx1ZS50b0ludDMyKGV4ZWMpIiBpZiAkdHlwZSBlcSAibG9u
ZyI7CisgICAgcmV0dXJuICIkdmFsdWUudG9VSW50MzIoZXhlYykiIGlmICR0eXBlIGVxICJ1bnNp
Z25lZCBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOwogICAgIHJldHVybiAic3Rh
dGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS50b0ludGVnZXIoZXhlYykpIiBpZiAkdHlwZSBlcSAibG9u
ZyBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIjsKIAogICAgIHJldHVybiAi
dmFsdWVUb0RhdGUoZXhlYywgJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA2NDYz
OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtp
bmcgY29weSkKQEAgLTExNzYsNDkgKzExNzYsNzEgQEAgRU5ECiAgICAgICAgIG15ICRwYXJhbWV0
ZXJOYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKIAogICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKLSAgICAgICAgICAgICMgR2VuZXJhdGUg
ZWFybHkgY2FsbCBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCBwYXJhbWV0ZXJzLgotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAkcGFy
YW1JbmRleCkge1xuIik7Ci0gICAgICAgICAgICBteSAkZnVuY3Rpb25DYWxsID0gR2VuZXJhdGVG
dW5jdGlvbkNhbGxTdHJpbmcoJGZ1bmN0aW9uLCAkcGFyYW1JbmRleCwgIiAgICAiIHggMiwgJGlt
cGxDbGFzc05hbWUpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgJGZ1bmN0
aW9uQ2FsbCk7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIH1cbiIp
OworICAgICAgICAgICAgIyBPcHRpb25hbCBjYWxsYmFja3Mgc2hvdWxkIGJlIGhhbmRsZWQgZGlm
ZmVyZW50bHkgYmVjYXVzZToKKyAgICAgICAgICAgICMgLSB0aGV5IGFsd2F5cyBoYXZlIGEgZGVm
YXVsdCB2YWx1ZTogMAorICAgICAgICAgICAgIyAtIGl0IHJlZHVjZXMgdGhlIG51bWJlciBvZiBv
dmVybG9hZGVkIGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVudCBudW1iZXIgb2YgcGFyYW1ldGVycwor
ICAgICAgICAgICAgaWYgKCEkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJh
Y2sifSkgeworICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgZWFybHkgY2FsbCBpZiB0aGVyZSBh
cmUgbm90IGVub3VnaCBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gJHBhcmFtSW5kZXgpIHtcbiIpOwor
ICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvbkNhbGwgPSBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0
cmluZygkZnVuY3Rpb24sICRwYXJhbUluZGV4LCAiICAgICIgeCAyLCAkaW1wbENsYXNzTmFtZSk7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgJGZ1bmN0aW9uQ2FsbCk7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB9XG4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9ICRwYXJhbUluZGV4KVxuIik7CisgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
VFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoQmFzaWNU
eXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9T2s7XG4iKTsKICAgICAg
ICAgfQogCisgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1
cmUoJHBhcmFtZXRlciwgJHBhcmFtSW5kZXgpOwogICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKICAgICAgICAgICAgIG15ICRjbGFzc05h
bWUgPSBHZXRDYWxsYmFja0NsYXNzTmFtZSgkcGFyYW1ldGVyLT50eXBlKTsKICAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IiRjbGFzc05hbWUuaCJ9ID0gMTsKICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gJHBhcmFtSW5kZXggfHwgIWFyZ3Nb
JHBhcmFtSW5kZXhdLT5Jc09iamVjdCgpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPCIg
LiAkcGFyYW1ldGVyLT50eXBlIC4gIj4gJHBhcmFtZXRlck5hbWUgPSAke2NsYXNzTmFtZX06OmNy
ZWF0ZShhcmdzWyRwYXJhbUluZGV4XSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiIp
OworICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRp
b25hbCJ9KSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBS
ZWZQdHI8IiAuICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkcGFyYW1ldGVyTmFtZTtcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPiAkcGFyYW1JbmRleCAmJiBhcmdzWyRwYXJhbUluZGV4XS0+SXNPYmplY3QoKSlcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgICRwYXJhbWV0
ZXJOYW1lID0gJHtjbGFzc05hbWV9OjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sIGdldFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIWFyZ3NbJHBhcmFtSW5k
ZXhdLT5Jc09iamVjdCgpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBSZWZQdHI8IiAu
ICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkcGFyYW1ldGVyTmFtZSA9ICR7Y2xhc3NOYW1lfTo6Y3Jl
YXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpO1xuIik7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAkcGFyYW1JbmRleCsrOwogICAgICAgICAgICAg
bmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXItPnR5cGUg
ZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyA9IGZhbHNlO1xu
Iik7Ci0gICAgICAgIH0gZWxzaWYgKEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0
ZXIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wgJHtw
YXJhbWV0ZXJOYW1lfU9rO1xuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVy
LCAkcGFyYW1JbmRleCkgLiAiICRwYXJhbWV0ZXJOYW1lID0gIik7Ci0KLSAgICAgICAgaWYgKCRw
YXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShh
cmdzWyRwYXJhbUluZGV4XSwgJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93KTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkbmF0aXZlVHlwZSAkcGFyYW1ldGVy
TmFtZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCAk
e3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIGlmICgke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiYXJnc1skcGFyYW1JbmRleF0i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJh
c2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gICIke3BhcmFtZXRlck5hbWV9
T2siIDogdW5kZWYpIC4gIjtcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFR5cGVDYW5G
YWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSkgeworICAgICAgICB9IGVsc2lmIChUeXBlQ2FuRmFp
bENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4
Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgJG5hdGl2ZVR5cGUgJHBhcmFtZXRlck5hbWUgPSAiIC4KKyAgICAgICAgICAgICAgICAg
SlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFy
YW1ldGVyKSA/ICIke3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIjtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywKICIgICAgaWYgKFVOTElLRUxZKCEkcGFyYW1l
dGVyTmFtZSIgLiAoQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAiT2si
IDogIiIpIC4gIikpIHtcbiIgLgogIiAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjtcbiIg
LgogIiAgICAgICAgZ290byBmYWlsO1xuIiAuCiAiICAgIH1cbiIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKCRuYXRpdmVUeXBlID1+IC9eVjhQYXJhbWV0ZXIvKSB7CisgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgJHBhcmFt
ZXRlck5hbWUgPSAiIC4KKyAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUb05hdGl2ZSgkcGFy
YW1ldGVyLCAiYXJnc1skcGFyYW1JbmRleF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gInskcGFy
YW1ldGVyTmFtZX1PayIgOiB1bmRlZikgLiAiO1xuIik7CisgICAgICAgICAgICB9IGVsc2lmICgk
bmF0aXZlVHlwZSBlcSAiU3RyaW5nIikgeworICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7
IlY4QmluZGluZ01hY3Jvcy5oIn0gPSAxOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgVE9fV0VCQ09SRV9TVFJJTkdfRVhDRVBUSU9OX0JMT0NLKCRwYXJhbWV0
ZXJOYW1lLCBhcmdzWyRwYXJhbUluZGV4XSk7Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4QmluZGluZ01hY3Jvcy5oIn0gPSAxOworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgRVhDRVBUSU9OX0JMT0NL
KCRuYXRpdmVUeXBlLCAkcGFyYW1ldGVyTmFtZSwgIiAuCisgICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3NbJHBhcmFtSW5kZXhdIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigk
cGFyYW1ldGVyKSA/ICJ7JHBhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIik7XG4iKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSXNJbmRleCJ9KSB7CkBAIC0yODI1LDcgKzI4NDcsOCBAQCBzdWIgSlNW
YWx1ZVRvTmF0aXZlCiAgICAgcmV0dXJuICJzdGF0aWNfY2FzdDwkdHlwZT4oJHZhbHVlLT5OdW1i
ZXJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEgImZsb2F0IiBvciAkdHlwZSBlcSAiZG91YmxlIjsKICAg
ICByZXR1cm4gIiR2YWx1ZS0+TnVtYmVyVmFsdWUoKSIgaWYgJHR5cGUgZXEgIlNWR051bWJlciI7
CiAKLSAgICByZXR1cm4gInRvSW50MzIoJHZhbHVlJHttYXliZU9rUGFyYW19KSIgaWYgJHR5cGUg
ZXEgInVuc2lnbmVkIGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IgJHR5cGUg
ZXEgImxvbmciOworICAgIHJldHVybiAidG9JbnQzMigkdmFsdWUke21heWJlT2tQYXJhbX0pIiBp
ZiAkdHlwZSBlcSAibG9uZyI7CisgICAgcmV0dXJuICJ0b1VJbnQzMigkdmFsdWUke21heWJlT2tQ
YXJhbX0pIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgInVuc2lnbmVk
IHNob3J0IjsKICAgICByZXR1cm4gInRvSW50NjQoJHZhbHVlKSIgaWYgJHR5cGUgZXEgInVuc2ln
bmVkIGxvbmcgbG9uZyIgb3IgJHR5cGUgZXEgImxvbmcgbG9uZyI7CiAgICAgcmV0dXJuICJzdGF0
aWNfY2FzdDxSYW5nZTo6Q29tcGFyZUhvdz4oJHZhbHVlLT5JbnQzMlZhbHVlKCkpIiBpZiAkdHlw
ZSBlcSAiQ29tcGFyZUhvdyI7CiAgICAgcmV0dXJuICJzdGF0aWNfY2FzdDxTVkdQYWludDo6U1ZH
UGFpbnRUeXBlPigkdmFsdWUtPlRvSW50MzIoKS0+SW50MzJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEg
IlNWR1BhaW50VHlwZSI7CkBAIC0yOTU1LDcgKzI5NzgsOCBAQCBzdWIgUmVxdWlyZXNDdXN0b21T
aWduYXR1cmUKICAgICB9CiAKICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSkgewotICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJPcHRpb25hbCJ9IHx8CisgICAgICAgICAgICAkcGFyYW1ldGVyLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbAkocmV2aXNpb24gNjQ2MzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIG1vZHVsZSB0ZXN0
IHsKICAgICAgICAgLy8gJ09wdGlvbmFsJyBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgICAgdm9p
ZCAgICBtZXRob2RXaXRoT3B0aW9uYWxBcmcoaW4gW09wdGlvbmFsXSBsb25nIG9wdCk7CiAgICAg
ICAgIHZvaWQgICAgbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoaW4gbG9u
ZyBub25PcHQsIGluIFtPcHRpb25hbF0gbG9uZyBvcHQpOwotICAgICAgICB2b2lkICAgIG1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhpbiBsb25nIG5vbk9wdCwgaW4g
W09wdGlvbmFsXSBsb25nIG9wdDEsIGluIGxvbmcgb3B0Mik7CisgICAgICAgIHZvaWQgICAgbWV0
aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKGluIGxvbmcgbm9uT3B0LCBp
biBbT3B0aW9uYWxdIGxvbmcgb3B0MSwgaW4gW09wdGlvbmFsXSBsb25nIG9wdDIpOwogCiAjaWYg
ZGVmaW5lZChURVNUSU5HX1Y4KSB8fCBkZWZpbmVkKFRFU1RJTkdfSlMpCiAgICAgICAgIC8vICdD
YWxsYmFjaycgZXh0ZW5kZWQgYXR0cmlidXRlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiA2NDYzOCkK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDEzIEBAIEpTVGVzdENhbGxiYWNrOjpKU1Rlc3RD
YWxsYmFjayhKU09iamVjdCoKIAogSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCiB7
Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAvLyBXaGVuIHRoZSBjb250ZXh0IGlzIGRlc3Ryb3llZCwgYWxsIHRhc2tzIHdp
dGggYSByZWZlcmVuY2UgdG8gYSBjYWxsYmFjaworICAgIC8vIHNob3VsZCBiZSBkZWxldGVkLiBT
byBpZiB0aGUgY29udGV4dCBpcyBOVUxMLCB3ZSBhcmUgb24gdGhlIGNvbnRleHQgdGhyZWFkLgor
ICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKICAgICAgICAg
ZGVsZXRlIG1fZGF0YTsKICAgICBlbHNlCi0gICAgICAgIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFz
azo6Y3JlYXRlKG1fZGF0YSkpOworICAgICAgICBjb250ZXh0LT5wb3N0VGFzayhEZWxldGVDYWxs
YmFja0RhdGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7CiAjaWZuZGVmIE5ERUJVRwogICAgIG1fZGF0
YSA9IDA7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gNjQ2MzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTMsOSArNzkz
LDMwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDApIHsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgaW50IGludEFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAxKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgfQogICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnID0gdXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDIpIHsKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgVGVzdE9iaiog
b2JqQXJnID0gdG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBpbXAtPnZvaWRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJn
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtODIxLDkg
Kzg0MiwzMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAg
IFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAwKSB7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogICAgIGludCBpbnRBcmcgPSBleGVj
LT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMSkgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyA9IHVz
dHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAyKSB7Cisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogICAgIFRlc3RP
YmoqIG9iakFyZyA9IHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgyKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1w
LT5pbnRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSk7CkBAIC04NTAsOSAr
ODkyLDMwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAg
VGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDApIHsKKyAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgaW50IGludEFyZyA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAxKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDIpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgVGVzdE9i
aiogb2JqQXJnID0gdG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm9iak1ldGhvZFdpdGhBcmdzKGlu
dEFyZywgc3RyQXJnLCBvYmpBcmcpKSk7CkBAIC04NjgsOCArOTMxLDIyIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMCkgeworICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KICAgICBjb25zdCBTdHJpbmcm
IHN0ckFyZyA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8PSAxKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VS
Uik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fQogICAgIFRlc3RPYmoqIG9iakFyZyA9IHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgxKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhl
eGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT5tZXRob2RU
aGF0UmVxdWlyZXNBbGxBcmdzKHN0ckFyZywgb2JqQXJnKSkpOwpAQCAtODg2LDggKzk2MywyMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAw
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogICAg
IGNvbnN0IFN0cmluZyYgc3RyQXJnID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDw9IDEpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICB9CiAgICAgVGVzdE9iaiogb2JqQXJnID0gdG9UZXN0T2JqKGV4ZWMtPmFy
Z3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKIAogICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihpbXAtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcs
IGVjKSkpOwpAQCAtOTAyLDcgKzk5MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAw
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTkxNSw3ICsxMDEz
LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDApIHsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0g
Y3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBpbXAtPmlkYktleShrZXkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC05NjIsNyArMTA2NywxNCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgU2NyaXB0Q2FsbFN0YWNrIGNhbGxTdGFjayhleGVjLCAxKTsKKworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMCkgeworICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIH0KICAgICBsb2cqIGludEFyZyA9IHRvbG9nKGV4ZWMtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpbXAtPmN1c3RvbUFyZ3NB
bmRFeGNlcHRpb24oaW50QXJnLCAmY2FsbFN0YWNrLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKQEAgLTEwMjIsNyArMTEzNCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1pY0Zy
YW1lKGV4ZWMpOwogICAgIGlmICghZHluYW1pY0ZyYW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8PSAwKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VS
Uik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fQogICAgIGludCBpbnRBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZEFyZyhkeW5h
bWljRnJhbWUsIGludEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTEwMzgsMTUgKzExNTcsMjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIEZyYW1lKiBkeW5hbWljRnJhbWUgPSB0b0R5bmFtaWNGcmFtZShl
eGVjKTsKICAgICBpZiAoIWR5bmFtaWNGcmFtZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0g
MCkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KICAg
ICBpbnQgaW50QXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgp
OwotICAgIGlmIChhcmdzQ291bnQgPCAyKSB7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAxKSB7CiAg
ICAgICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKGR5bmFtaWNGcmFtZSwg
aW50QXJnKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICB9Ci0KICAgICBpbnQgb3B0aW9uYWxBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+d2l0aER5bmFtaWNGcmFt
ZUFuZE9wdGlvbmFsQXJnKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFyZyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEwNjIsNyArMTE4OSwx
NCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgRnJhbWUq
IGR5bmFtaWNGcmFtZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpOwogICAgIGlmICghZHluYW1pY0Zy
YW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAwKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogICAgIGludCBpbnRBcmcgPSBleGVjLT5hcmd1
bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+
d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC0xMDc4LDE1ICsxMjEyLDIzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWlj
RnJhbWUoZXhlYyk7CiAgICAgaWYgKCFkeW5hbWljRnJhbWUpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDw9IDApIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hf
RVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICB9CiAgICAgaW50IGludEFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDwgMikgeworICAgIGlmIChhcmdzQ291bnQgPD0g
MSkgewogICAgICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQoZHlu
YW1pY0ZyYW1lLCBpbnRBcmcpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIH0KLQogICAgIGludCBvcHRpb25hbEFyZyA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaW1wLT53aXRo
RHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRp
b25hbEFyZywgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGV4ZWMpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTE3NCwxMiArMTMxNiwxMyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgVGVzdE9iaiogaW1wID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAKICAgICBpbnQgYXJnc0Nv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwotICAgIGlmIChhcmdzQ291bnQgPCAxKSB7Cisg
ICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CiAgICAgICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFs
QXJnKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQotCiAgICAgaW50IG9wdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcob3B0
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTE5Miwx
NSArMTMzNSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwog
ICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAwKSB7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogICAgIGludCBub25PcHQgPSBl
eGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGludCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKGFyZ3ND
b3VudCA8IDIpIHsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKICAgICAgICAgaW1wLT5tZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhub25PcHQpOwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KLQogICAgIGludCBvcHQg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0
LCBvcHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0x
MjEzLDE2ICsxMzY0LDMxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVl
KSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDApIHsKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgaW50IG5vbk9w
dCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAo
YXJnc0NvdW50IDwgMikgeworICAgIGlmIChhcmdzQ291bnQgPD0gMSkgewogICAgICAgICBpbXAt
Pm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KLQogICAg
IGludCBvcHQxID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisKKyAgICBpZiAoYXJnc0NvdW50IDw9IDIpIHsKKyAgICAgICAgaW1wLT5tZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAg
aW50IG9wdDIgPSBleGVjLT5hcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTEyMzUsMTEgKzE0MDEsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDw9IDAgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKKworICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPD0gMCkgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Ci0gICAg
UmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFz
T2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwor
ICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSB8fCAhZXhlYy0+YXJndW1lbnQo
MCkuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlT
TUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICB9CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxs
YmFjazo6Y3JlYXRlKGV4ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgpLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSk7CiAKICAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFj
ayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEyNTIs
MTIgKzE0MjMsMjQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsK
ICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMCkgeworICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KICAgICBpbnQgbm9uQ2FsbGJh
Y2sgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPD0gMSB8fCAhZXhlYy0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkgeworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMSkg
eworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkgfHwgIWV4ZWMtPmFyZ3VtZW50KDEpLmdl
dE9iamVjdCgpKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KLSAgICBSZWZQdHI8VGVzdENhbGxi
YWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgUmVmUHRyPFRlc3RD
YWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGV4ZWMtPmFyZ3VtZW50
KDEpLmdldE9iamVjdCgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICBpbXAt
Pm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKG5vbkNhbGxiYWNrLCBjYWxs
YmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEy
NzEsMTggKzE0NTQsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogCi0gICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDwgMSkgewotICAgICAgICBpbXAtPm1l
dGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJh
Y2s7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDAgJiYgZXhlYy0+YXJndW1lbnQo
MCkuaXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1l
bnQoMCkuZ2V0T2JqZWN0KCk7CisgICAgICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQorICAgICAgICBj
YWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSk7CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAw
IHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENh
bGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSk7Ci0KICAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFs
QXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpAQCAtMTI5NCw4ICsxNDc1LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDAp
IHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAg
VGVzdE9iaiogb2JqQXJnID0gdG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDEpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgY29uc3Qg
U3RyaW5nJiBzdHJBcmcgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYykpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+b3ZlcmxvYWRlZE1l
dGhvZChvYmpBcmcsIHN0ckFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTEzMDgsMTUgKzE1MDMsMjMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09i
amVjdCh0aGlzVmFsdWUpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2Jq
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PD0gMCkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0K
ICAgICBUZXN0T2JqKiBvYmpBcmcgPSB0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMCkpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGludCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENv
dW50KCk7Ci0gICAgaWYgKGFyZ3NDb3VudCA8IDIpIHsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDEp
IHsKICAgICAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZyk7CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQotCiAgICAgaW50IGludEFy
ZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgaW50QXJnKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTMyOSw3ICsxNTMyLDE0IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGUKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDApIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcgPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChzdHJBcmcpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMzQyLDcgKzE1NTIsMTQg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMCkgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KICAgICBpbnQgaW50QXJnID0gZXhlYy0+YXJndW1l
bnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpbXAtPm92
ZXJsb2FkZWRNZXRob2QoaW50QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwCShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdNYWNy
b3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCkBAIC01NTYsOSArNTU3LDE1IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdm9pZE1ldGhvZFcKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5UZXN0T2JqLnZvaWRNZXRob2RXaXRoQXJncyIpOwogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW50IGludEFyZyA9IHRv
SW50MzIoYXJnc1swXSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIEVYQ0VQVElPTl9CTE9DSyhp
bnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBdKSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0g
MSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgIFY4
UGFyYW1ldGVyPD4gc3RyQXJnID0gYXJnc1sxXTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBWOFRl
c3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMl0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMl0pKSA6IDA7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMikKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwor
ICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3Rh
bmNlKGFyZ3NbMl0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMl0pKSA6IDApOwogICAgIGltcC0+dm9pZE1ldGhvZFdpdGhBcmdzKGludEFy
Zywgc3RyQXJnLCBvYmpBcmcpOwogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
IH0KQEAgLTU3NCw5ICs1ODEsMTUgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRN
ZXRob2RXaQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW50TWV0aG9kV2l0aEFyZ3Mi
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OwotICAgIGludCBpbnRBcmcgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIGlmIChhcmdzLkxlbmd0
aCgpIDw9IDApCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsK
KyAgICBFWENFUFRJT05fQkxPQ0soaW50LCBpbnRBcmcsIHRvSW50MzIoYXJnc1swXSkpOworICAg
IGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVf
TUlTTUFUQ0hfRVJSKTsKICAgICBWOFBhcmFtZXRlcjw+IHN0ckFyZyA9IGFyZ3NbMV07Ci0gICAg
VGVzdE9iaiogb2JqQXJnID0gVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzJdKSA/IFY4VGVz
dE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzJdKSkgOiAw
OworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDIpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFy
ZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzJdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzJdKSkgOiAwKTsKICAgICByZXR1cm4g
djg6OkludGVnZXI6Ok5ldyhpbXAtPmludE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBv
YmpBcmcpKTsKIH0KIApAQCAtNTkxLDkgKzYwNCwxNSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG9iak1ldGhvZFdpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vYmpNZXRo
b2RXaXRoQXJncyIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7Ci0gICAgaW50IGludEFyZyA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNN
QVRDSF9FUlIpOworICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdz
WzBdKSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgIFY4UGFyYW1ldGVyPD4gc3RyQXJnID0gYXJn
c1sxXTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3Nb
Ml0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
Z3NbMl0pKSA6IDA7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMikKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0
T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMl0pID8gVjhUZXN0T2Jq
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMl0pKSA6IDApOwog
ICAgIHJldHVybiB0b1Y4KGltcC0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIG9i
akFyZykpOwogfQogCkBAIC02MDMsOCArNjIyLDEyIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbWV0aG9kVGhhdFIKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCiAgICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDAp
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICBWOFBh
cmFtZXRlcjw+IHN0ckFyZyA9IGFyZ3NbMF07Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gVjhUZXN0
T2JqOjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSkgOiAwOworICAgIGlmIChhcmdzLkxlbmd0aCgp
IDw9IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAg
ICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5j
ZShhcmdzWzFdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmdzWzFdKSkgOiAwKTsKICAgICByZXR1cm4gdG9WOChpbXAtPm1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3Moc3RyQXJnLCBvYmpBcmcpKTsKIH0KIApAQCAtNjE2LDggKzYzOSwxMiBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSCiAgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICB7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgIFY4UGFyYW1ldGVyPD4gc3Ry
QXJnID0gYXJnc1swXTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBWOFRlc3RPYmo6Okhhc0luc3Rh
bmNlKGFyZ3NbMV0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGFyZ3NbMV0pKSA6IDA7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIEVYQ0VQVElPTl9C
TE9DSyhUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMV0pID8g
VjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0p
KSA6IDApOwogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPm1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVjKTsKICAgICBpZiAoVU5MSUtF
TFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC02MzIsNiArNjU5LDggQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVgogewogICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmouc2VyaWFsaXplZFZhbHVlIik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAwKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAgICAgYm9vbCBzZXJp
YWxpemVkQXJnRGlkVGhyb3cgPSBmYWxzZTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sw
XSwgc2VyaWFsaXplZEFyZ0RpZFRocm93KTsKICAgICBpZiAoc2VyaWFsaXplZEFyZ0RpZFRocm93
KQpAQCAtNjQ0LDcgKzY3Myw5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5
Q2FsbGIKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmlkYktleSIpOwogICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRy
PElEQktleT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGFyZ3NbMF0pOworICAgIGlmIChh
cmdzLkxlbmd0aCgpIDw9IDApCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFU
Q0hfRVJSKTsKKyAgICBFWENFUFRJT05fQkxPQ0soUmVmUHRyPElEQktleT4sIGtleSwgY3JlYXRl
SURCS2V5RnJvbVZhbHVlKGFyZ3NbMF0pKTsKICAgICBpbXAtPmlkYktleShrZXkpOwogICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KQEAgLTY3NCw3ICs3MDUsOSBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1c3RvbUFyZ3NBCiAgICAgT3duUHRyPFNjcmlwdENh
bGxTdGFjaz4gY2FsbFN0YWNrKFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKGFyZ3MsIDEpKTsKICAg
ICBpZiAoIWNhbGxTdGFjaykKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBs
b2cqIGludEFyZyA9IFY4bG9nOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4bG9nOjp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDA7CisgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRD
SF9FUlIpOworICAgIEVYQ0VQVElPTl9CTE9DSyhsb2cqLCBpbnRBcmcsIFY4bG9nOjpIYXNJbnN0
YW5jZShhcmdzWzBdKSA/IFY4bG9nOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGFyZ3NbMF0pKSA6IDApOwogICAgIGltcC0+Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbihpbnRB
cmcsIGNhbGxTdGFjay5nZXQoKSwgZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAg
IGdvdG8gZmFpbDsKQEAgLTcyMiw3ICs3NTUsOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdpdGhEeW5hbWljCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoRHluYW1p
Y0ZyYW1lQW5kQXJnIik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKLSAgICBpbnQgaW50QXJnID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01J
U01BVENIX0VSUik7CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKGFy
Z3NbMF0pKTsKICAgICBGcmFtZSogZW50ZXJlZEZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFt
ZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgaWYgKCFlbnRlcmVkRnJhbWUpCiAgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC03MzQsNyArNzY5LDkgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3aXRoRHluYW1pYwogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmou
d2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnIik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBpbnQgaW50QXJnID0gdG9JbnQz
MihhcmdzWzBdKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwg
aW50QXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAxKSB7
CiAgICAgICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9y
RW50ZXJlZENvbnRleHQoKTsKICAgICAgICAgaWYgKCFlbnRlcmVkRnJhbWUpCkBAIC03NDIsNyAr
Nzc5LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoRHluYW1pYwogICAgICAg
ICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhlbnRlcmVkRnJhbWUsIGludEFy
Zyk7CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9Ci0gICAg
aW50IG9wdGlvbmFsQXJnID0gdG9JbnQzMihhcmdzWzFdKTsKKyAgICBFWENFUFRJT05fQkxPQ0so
aW50LCBvcHRpb25hbEFyZywgdG9JbnQzMihhcmdzWzFdKSk7CiAgICAgRnJhbWUqIGVudGVyZWRG
cmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwogICAgIGlm
ICghZW50ZXJlZEZyYW1lKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtNzU0
LDcgKzc5MSw5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aER5bmFtaWMKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVy
ZSIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7Ci0gICAgaW50IGludEFyZyA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIp
OworICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAg
ICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVk
Q29udGV4dCgpOwogICAgIGlmICghZW50ZXJlZEZyYW1lKQogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwpAQCAtNzY2LDcgKzgwNSw5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd2l0aER5bmFtaWMKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhEeW5hbWlj
RnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIGludCBpbnRBcmcgPSB0b0ludDMyKGFyZ3Nb
MF0pOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApCisgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBFWENFUFRJT05fQkxPQ0soaW50LCBpbnRBcmcs
IHRvSW50MzIoYXJnc1swXSkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKICAgICAg
ICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVk
Q29udGV4dCgpOwogICAgICAgICBpZiAoIWVudGVyZWRGcmFtZSkKQEAgLTc3NCw3ICs4MTUsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhEeW5hbWljCiAgICAgICAgIGltcC0+
d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRChlbnRlcmVkRnJhbWUsIGludEFyZywg
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7CiAgICAgfQotICAgIGludCBvcHRpb25hbEFyZyA9IHRvSW50MzIoYXJnc1sxXSk7
CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgb3B0aW9uYWxBcmcsIHRvSW50MzIoYXJnc1sxXSkp
OwogICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50
ZXJlZENvbnRleHQoKTsKICAgICBpZiAoIWVudGVyZWRGcmFtZSkKICAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKQEAgLTg2MSw3ICs5MDIsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG1ldGhvZFdpdGhPCiAgICAgICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKCk7
CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9Ci0gICAgaW50
IG9wdCA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgb3B0LCB0
b0ludDMyKGFyZ3NbMF0pKTsKICAgICBpbXAtPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwog
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KQEAgLTg3MCwxMiArOTExLDE0
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE4KIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJn
Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKLSAgICBpbnQgbm9uT3B0ID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICBpZiAoYXJncy5MZW5n
dGgoKSA8PSAwKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7
CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgbm9uT3B0LCB0b0ludDMyKGFyZ3NbMF0pKTsKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8PSAxKSB7CiAgICAgICAgIGltcC0+bWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0KTsKICAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOwogICAgIH0KLSAgICBpbnQgb3B0ID0gdG9JbnQzMihhcmdzWzFdKTsK
KyAgICBFWENFUFRJT05fQkxPQ0soaW50LCBvcHQsIHRvSW50MzIoYXJnc1sxXSkpOwogICAgIGlt
cC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwog
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KQEAgLTg4NCwxMyArOTI3LDE5
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE4KIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFs
QXJncyIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7Ci0gICAgaW50IG5vbk9wdCA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9F
UlIpOworICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIG5vbk9wdCwgdG9JbnQzMihhcmdzWzBdKSk7
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkgewogICAgICAgICBpbXAtPm1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQpOwogICAgICAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAgICAgfQotICAgIGludCBvcHQxID0gdG9JbnQzMihh
cmdzWzFdKTsKLSAgICBpbnQgb3B0MiA9IHRvSW50MzIoYXJnc1syXSk7CisgICAgRVhDRVBUSU9O
X0JMT0NLKGludCwgb3B0MSwgdG9JbnQzMihhcmdzWzFdKSk7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMikgeworICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09w
dGlvbmFsQXJncyhub25PcHQsIG9wdDEpOworICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7CisgICAgfQorICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIG9wdDIsIHRvSW50MzIo
YXJnc1syXSkpOwogICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOwogfQpAQCAtODk5LDcgKzk0OCw5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gbWV0aG9kV2l0aEMKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhD
YWxsYmFja0FyZyIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCB8fCAhYXJnc1swXS0+SXNP
YmplY3QoKSkKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CisgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAgICAgUmVm
UHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3Nb
MF0sIGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaW1wLT5tZXRob2RXaXRoQ2Fs
bGJhY2tBcmcoY2FsbGJhY2spOwpAQCAtOTEwLDggKzk2MSwxMiBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5t
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOwogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW50IG5vbkNhbGxi
YWNrID0gdG9JbnQzMihhcmdzWzBdKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAxIHx8ICFh
cmdzWzFdLT5Jc09iamVjdCgpKQorICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBFWENFUFRJT05fQkxP
Q0soaW50LCBub25DYWxsYmFjaywgdG9JbnQzMihhcmdzWzBdKSk7CisgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPD0gMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIp
OworICAgIGlmICghYXJnc1sxXS0+SXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNr
ID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBnZXRTY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOwogICAgIGltcC0+bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmco
bm9uQ2FsbGJhY2ssIGNhbGxiYWNrKTsKQEAgLTkyMiwxMyArOTc3LDkgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQwogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmoubWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIGlmIChhcmdzLkxlbmd0
aCgpIDw9IDApIHsKLSAgICAgICAgaW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFy
ZygpOwotICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci0gICAgfQotICAg
IGlmIChhcmdzLkxlbmd0aCgpIDw9IDAgfHwgIWFyZ3NbMF0tPklzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICBSZWZQdHI8VGVzdENh
bGxiYWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZ2V0U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFj
azsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDAgJiYgYXJnc1swXS0+SXNPYmplY3QoKSkKKyAg
ICAgICAgY2FsbGJhY2sgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIGdldFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRp
b25hbEFyZyhjYWxsYmFjayk7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwog
fQpAQCAtOTM3LDcgKzk4OCwxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJs
b2FkZWRNCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVybG9hZGVkTWV0aG9kMSIp
OwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7
Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/
IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBd
KSkgOiAwOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaios
IG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4VGVzdE9iajo6dG9O
YXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSA8PSAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01J
U01BVENIX0VSUik7CiAgICAgVjhQYXJhbWV0ZXI8PiBzdHJBcmcgPSBhcmdzWzFdOwogICAgIGlt
cC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcsIHN0ckFyZyk7CiAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOwpAQCAtOTQ3LDEyICsxMDAyLDE0IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE0KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm92
ZXJsb2FkZWRNZXRob2QyIik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBWOFRlc3RPYmo6Okhhc0lu
c3RhbmNlKGFyZ3NbMF0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDA7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkKKyAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIEVYQ0VQVElP
Tl9CTE9DSyhUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0p
ID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3Nb
MF0pKSA6IDApOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKICAgICAgICAgaW1wLT5v
dmVybG9hZGVkTWV0aG9kKG9iakFyZyk7CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKTsKICAgICB9Ci0gICAgaW50IGludEFyZyA9IHRvSW50MzIoYXJnc1sxXSk7CisgICAg
RVhDRVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKGFyZ3NbMV0pKTsKICAgICBpbXAt
Pm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBpbnRBcmcpOwogICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKIH0KQEAgLTk2MSw2ICsxMDE4LDggQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvdmVybG9hZGVkTQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoub3Zl
cmxvYWRlZE1ldGhvZDMiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApCisgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICBWOFBhcmFtZXRlcjw+IHN0
ckFyZyA9IGFyZ3NbMF07CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKHN0ckFyZyk7CiAgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwpAQCAtOTcwLDcgKzEwMjksOSBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5vdmVybG9hZGVkTWV0aG9kNCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW50IGludEFyZyA9IHRvSW50MzIo
YXJnc1swXSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGlu
dEFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKGludEFy
Zyk7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQpAQCAtMTA4OCw2ICsx
MTQ5LDggQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbAogICAgIHsi
bWV0aG9kV2l0aE9wdGlvbmFsQXJnIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoT3B0aW9u
YWxBcmdDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25h
bEFyZyIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9u
YWxBcmdDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRp
b25hbEFyZ3MiLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3
b09wdGlvbmFsQXJnc0NhbGxiYWNrfSwKKyAgICB7Im1ldGhvZFdpdGhDYWxsYmFja0FyZyIsIFRl
c3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGJhY2t9LAorICAgIHsibWV0
aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1l
dGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2t9LAogICAgIHsibWV0
aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAogICAgIHsib3ZlcmxvYWRlZE1ldGhv
ZCIsIFRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZENhbGxiYWNrfSwKIH07CkBAIC0x
MTYxLDE4ICsxMjI0LDYgQEAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YQogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGN1c3RvbUFyZ3NBbmRFeGNl
cHRpb25Bcmd2W2N1c3RvbUFyZ3NBbmRFeGNlcHRpb25BcmdjXSA9IHsgVjhsb2c6OkdldFJhd1Rl
bXBsYXRlKCkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGN1c3RvbUFyZ3NBbmRF
eGNlcHRpb25TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgY3VzdG9tQXJnc0Fu
ZEV4Y2VwdGlvbkFyZ2MsIGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25Bcmd2KTsKICAgICBwcm90by0+
U2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbiIpLCB2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkNh
bGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgY3VzdG9tQXJnc0FuZEV4Y2VwdGlvblNp
Z25hdHVyZSkpOwotCi0gICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kV2l0aENhbGxiYWNr
QXJnJwotICAgIGNvbnN0IGludCBtZXRob2RXaXRoQ2FsbGJhY2tBcmdBcmdjID0gMTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdBcmd2
W21ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ2NdID0geyBWOFRlc3RDYWxsYmFjazo6R2V0UmF3VGVt
cGxhdGUoKSB9OwotICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gbWV0aG9kV2l0aENhbGxi
YWNrQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhDYWxs
YmFja0FyZ0FyZ2MsIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ3YpOwotICAgIHByb3RvLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKSwgdjg6OkZ1bmN0aW9uVGVt
cGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxiYWNr
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9kV2l0aENhbGxiYWNrQXJnU2lnbmF0dXJl
KSk7Ci0KLSAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdB
bmRDYWxsYmFja0FyZycKLSAgICBjb25zdCBpbnQgbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmdBcmdjID0gMjsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0FyZ3ZbbWV0aG9kV2l0aE5v
bkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4oKSwgVjhUZXN0Q2FsbGJhY2s6OkdldFJhd1RlbXBsYXRlKCkgfTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQXJnYywgbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmdBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCBtZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZ1NpZ25hdHVyZSkpOwogICAgIGJhdGNoQ29uZmlndXJlQ29uc3Rh
bnRzKGRlc2MsIHByb3RvLCBUZXN0T2JqQ29uc3RzLCBzaXplb2YoVGVzdE9iakNvbnN0cykgLyBz
aXplb2YoKlRlc3RPYmpDb25zdHMpKTsKIAogICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDEx
IEBACiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJCaW5kaW5nU2VjdXJp
dHkuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgi
CisjaW5jbHVkZSAiVjhQcm94eS5oIgogCiAjaW5jbHVkZSA8djguaD4KIApAQCAtMjI1LDEzICsy
MjcsNzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVl
PiBtX3Y4T2JqZWN0OwogICAgIH07CiAgICAgCi0gICAgdGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJh
bWV0ZXI8RGVmYXVsdE1vZGU+OjpvcGVyYXRvciBTdHJpbmcoKSB7IHJldHVybiB0b1dlYkNvcmVT
dHJpbmcobV92OE9iamVjdCk7IH0KLSAgICB0ZW1wbGF0ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxX
aXRoTnVsbENoZWNrPjo6b3BlcmF0b3IgU3RyaW5nKCkgeyByZXR1cm4gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhtX3Y4T2JqZWN0KTsgfQotICAgIHRlbXBsYXRlPD4gaW5saW5lIFY4UGFy
YW1ldGVyPFdpdGhVbmRlZmluZWRPck51bGxDaGVjaz46Om9wZXJhdG9yIFN0cmluZygpIHsgcmV0
dXJuIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhtX3Y4T2JqZWN0KTsg
fQotCi0gICAgdGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8RGVmYXVsdE1vZGU+OjpvcGVy
YXRvciBBdG9taWNTdHJpbmcoKSB7IHJldHVybiB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5n
KG1fdjhPYmplY3QpOyB9Ci0gICAgdGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8V2l0aE51
bGxDaGVjaz46Om9wZXJhdG9yIEF0b21pY1N0cmluZygpIHsgcmV0dXJuIHRvQXRvbWljV2ViQ29y
ZVN0cmluZ1dpdGhOdWxsQ2hlY2sobV92OE9iamVjdCk7IH0KLSAgICB0ZW1wbGF0ZTw+IGlubGlu
ZSBWOFBhcmFtZXRlcjxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2s+OjpvcGVyYXRvciBBdG9taWNT
dHJpbmcoKSB7IHJldHVybiB0b0F0b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKG1fdjhP
YmplY3QpOyB9CisgICAgdGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8RGVmYXVsdE1vZGU+
OjpvcGVyYXRvciBTdHJpbmcoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdDsKKyAgICAg
ICAgdjg6OlRyeUNhdGNoIGJsb2NrOworICAgICAgICByZXN1bHQgPSB0b1dlYkNvcmVTdHJpbmco
bV92OE9iamVjdCk7CisgICAgICAgIGlmIChibG9jay5IYXNDYXVnaHQoKSkgeworICAgICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICB0ZW1wbGF0ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPjo6
b3BlcmF0b3IgU3RyaW5nKCkKKyAgICB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAg
IHY4OjpUcnlDYXRjaCBibG9jazsKKyAgICAgICAgcmVzdWx0ID0gdG9XZWJDb3JlU3RyaW5nV2l0
aE51bGxDaGVjayhtX3Y4T2JqZWN0KTsKKyAgICAgICAgaWYgKGJsb2NrLkhhc0NhdWdodCgpKSB7
CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oVFlQRV9NSVNNQVRDSF9FUlIp
OworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIHRlbXBsYXRlPD4gaW5saW5lIFY4UGFyYW1ldGVyPFdpdGhV
bmRlZmluZWRPck51bGxDaGVjaz46Om9wZXJhdG9yIFN0cmluZygpCisgICAgeworICAgICAgICBT
dHJpbmcgcmVzdWx0OworICAgICAgICB2ODo6VHJ5Q2F0Y2ggYmxvY2s7CisgICAgICAgIHJlc3Vs
dCA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhtX3Y4T2JqZWN0KTsK
KyAgICAgICAgaWYgKGJsb2NrLkhhc0NhdWdodCgpKSB7CisgICAgICAgICAgICBWOFByb3h5Ojpz
ZXRET01FeGNlcHRpb24oVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
dGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8RGVmYXVsdE1vZGU+OjpvcGVyYXRvciBBdG9t
aWNTdHJpbmcoKQorICAgIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIHJlc3VsdDsKKyAgICAgICAg
djg6OlRyeUNhdGNoIGJsb2NrOworICAgICAgICByZXN1bHQgPSB2OFZhbHVlVG9BdG9taWNXZWJD
b3JlU3RyaW5nKG1fdjhPYmplY3QpOworICAgICAgICBpZiAoYmxvY2suSGFzQ2F1Z2h0KCkpIHsK
KyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihUWVBFX01JU01BVENIX0VSUik7
CisgICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgdGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8
V2l0aE51bGxDaGVjaz46Om9wZXJhdG9yIEF0b21pY1N0cmluZygpCisgICAgeworICAgICAgICBB
dG9taWNTdHJpbmcgcmVzdWx0OworICAgICAgICB2ODo6VHJ5Q2F0Y2ggYmxvY2s7CisgICAgICAg
IHJlc3VsdCA9IHRvQXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sobV92OE9iamVjdCk7
CisgICAgICAgIGlmIChibG9jay5IYXNDYXVnaHQoKSkgeworICAgICAgICAgICAgVjhQcm94eTo6
c2V0RE9NRXhjZXB0aW9uKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiBB
dG9taWNTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICB0ZW1wbGF0ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2s+OjpvcGVyYXRvciBBdG9taWNTdHJpbmcoKQorICAgIHsKKyAgICAgICAgQXRvbWljU3RyaW5n
IHJlc3VsdDsKKyAgICAgICAgdjg6OlRyeUNhdGNoIGJsb2NrOworICAgICAgICByZXN1bHQgPSB0
b0F0b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKG1fdjhPYmplY3QpOworICAgICAgICBp
ZiAoYmxvY2suSGFzQ2F1Z2h0KCkpIHsKKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5n
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNjQ2MzgpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDYgQEAKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogCiAjaW5jbHVkZSAiQ2hyb21l
LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTU1LDggKzU0
LDYgQEAKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIlY4
RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJWOERhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJW
OEdDRm9yQ29udGV4dERpc3Bvc2UuaCIKICNpbmNsdWRlICJWOEhpZGRlblByb3BlcnR5TmFtZS5o
IgogI2luY2x1ZGUgIlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmgiCkBAIC03OTAsMzkg
Kzc4Nyw2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6c2V0SW4KICAgICBy
ZXR1cm4gV2luZG93U2V0VGltZW91dEltcGwoYXJncywgZmFsc2UpOwogfQogCi0jaWYgRU5BQkxF
KERBVEFCQVNFKQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpvcGVuRGF0YWJh
c2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygi
RE9NLkRPTVdpbmRvdy5vcGVuRGF0YWJhc2UiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDQp
Ci0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFNZTlRBWF9FUlIpOwotCi0gICAgVE9fV0VCQ09S
RV9TVFJJTkdfRVhDRVBUSU9OX0JMT0NLKG5hbWUsIGFyZ3NbMF0pOwotICAgIFRPX1dFQkNPUkVf
U1RSSU5HX0VYQ0VQVElPTl9CTE9DSyh2ZXJzaW9uLCBhcmdzWzFdKTsKLSAgICBUT19XRUJDT1JF
X1NUUklOR19FWENFUFRJT05fQkxPQ0soZGlzcGxheU5hbWUsIGFyZ3NbMl0pOwotICAgIEVYQ0VQ
VElPTl9CTE9DSyh1bnNpZ25lZCBsb25nLCBlc3RpbWF0ZWRTaXplLCBhcmdzWzNdLT5VaW50MzJW
YWx1ZSgpKTsKLQotICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XaW5kb3c6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwotICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1l
KFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCi0gICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIFJl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwotICAgIGlmIChhcmdzLkxl
bmd0aCgpID49IDUpIHsKLSAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotCi0gICAgICAgIGNy
ZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gdG9WOChpbXAtPm9wZW5EYXRhYmFz
ZShuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxs
YmFjay5yZWxlYXNlKCksIGVjKSk7Ci0KLSAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQotCiBi
b29sIFY4RE9NV2luZG93OjpuYW1lZFNlY3VyaXR5Q2hlY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGhvc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGtleSwgdjg6OkFjY2Vzc1R5cGUgdHlwZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4pCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cg
PSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhET01XaW5kb3c6OkdldFRlbXBsYXRl
KCksIGhvc3QpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRh
YmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDY0NjM4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAi
VjhEYXRhYmFzZS5oIgotCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nTWFj
cm9zLmgiCi0jaW5jbHVkZSAiVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAi
VjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJWOEN1c3RvbVZvaWRD
YWxsYmFjay5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbkNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uRGF0YWJh
c2UuY2hhbmdlVmVyc2lvbigpIik7Ci0KLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCi0gICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFNZTlRBWF9FUlIpOwotCi0gICAgVE9fV0VCQ09SRV9TVFJJ
TkdfRVhDRVBUSU9OX0JMT0NLKG9sZFZlcnNpb24sIGFyZ3NbMF0pOwotICAgIFRPX1dFQkNPUkVf
U1RSSU5HX0VYQ0VQVElPTl9CTE9DSyhuZXdWZXJzaW9uLCBhcmdzWzFdKTsKLQotICAgIERhdGFi
YXNlKiBkYXRhYmFzZSA9IFY4RGF0YWJhc2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0g
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
Ci0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8VjhTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjazsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIgJiYg
IWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbMl0pKSB7Ci0gICAgICAgIGlmICghYXJnc1syXS0+SXNP
YmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJS
KTsKLQotICAgICAgICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRl
KGFyZ3NbMl0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIH0KLQotICAgIFJlZlB0cjxW
OFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKLSAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+IDMgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbM10pKSB7Ci0gICAgICAg
IGlmICghYXJnc1szXS0+SXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzNdLCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjazsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDQgJiYgIWlzVW5kZWZpbmVkT3JOdWxs
KGFyZ3NbNF0pKSB7Ci0gICAgICAgIGlmICghYXJnc1s0XS0+SXNPYmplY3QoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAgICBzdWNj
ZXNzQ2FsbGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIH0KLQotICAgIGRhdGFiYXNlLT5jaGFuZ2VWZXJzaW9u
KG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFj
ay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCkpOwotCi0gICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGVU
cmFuc2FjdGlvbihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sIHJlYWRPbmx5KQotewot
ICAgIGlmICghYXJncy5MZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoU1lOVEFY
X0VSUik7Ci0KLSAgICBpZiAoIWFyZ3NbMF0tPklzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9
IFY4RGF0YWJhc2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4g
Y2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKLQotICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgIWlz
VW5kZWZpbmVkT3JOdWxsKGFyZ3NbMV0pKSB7Ci0gICAgICAgIGlmICghYXJnc1sxXS0+SXNPYmpl
Y3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsK
LQotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6
OmNyZWF0ZShhcmdzWzFdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjazsKLSAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+IDIgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbMl0pKSB7Ci0gICAgICAg
IGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBWOEN1c3Rv
bVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwot
ICAgIH0KLQotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCksIGVy
cm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCByZWFkT25s
eSk7Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4RGF0YWJhc2U6OnRyYW5zYWN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZS50cmFuc2FjdGlvbigpIik7Ci0g
ICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGFyZ3MsIGZhbHNlKTsKLX0KLQotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbkNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2UucmVhZFRy
YW5zYWN0aW9uKCkiKTsKLSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oYXJncywgdHJ1ZSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCShyZXZp
c2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5j
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSNpbmNsdWRlICJWOERhdGFiYXNlU3luYy5o
IgotCi0jaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgot
I2luY2x1ZGUgIlY4UHJveHkuaCIKLSNpbmNsdWRlICJWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZVN5bmMuY2hhbmdlVmVyc2lvbigp
Iik7Ci0KLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKFNZTlRBWF9FUlIpOwotCi0gICAgVE9fV0VCQ09SRV9TVFJJTkdfRVhDRVBUSU9OX0JMT0NL
KG9sZFZlcnNpb24sIGFyZ3NbMF0pOwotICAgIFRPX1dFQkNPUkVfU1RSSU5HX0VYQ0VQVElPTl9C
TE9DSyhuZXdWZXJzaW9uLCBhcmdzWzFdKTsKLQotICAgIERhdGFiYXNlU3luYyogZGF0YWJhc2Ug
PSBWOERhdGFiYXNlU3luYzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBj
YWxsYmFjazsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIgJiYgIWlzVW5kZWZpbmVkT3JOdWxs
KGFyZ3NbMl0pKSB7Ci0gICAgICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAgICBjYWxs
YmFjayA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBkYXRhYmFzZS0+Y2hhbmdlVmVyc2lvbihvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBjYWxs
YmFjay5yZWxlYXNlKCksIGVjKTsKLSAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwot
Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjcmVhdGVUcmFuc2FjdGlvbihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29s
IHJlYWRPbmx5KQotewotICAgIGlmICghYXJncy5MZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoU1lOVEFYX0VSUik7Ci0KLSAgICBpZiAoIWFyZ3NbMF0tPklzT2JqZWN0KCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgIERhdGFi
YXNlU3luYyogZGF0YWJhc2UgPSBWOERhdGFiYXNlU3luYzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s6
OmNyZWF0ZShhcmdzWzBdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLQotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNl
KCksIHJlYWRPbmx5LCBlYyk7Ci0gICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKLQot
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OERhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlU3luYy50cmFuc2FjdGlvbigpIik7
Ci0gICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGFyZ3MsIGZhbHNlKTsKLX0KLQotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2VTeW5jOjpyZWFkVHJhbnNhY3Rpb25DYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNl
U3luYy5yZWFkVHJhbnNhY3Rpb24oKSIpOwotICAgIHJldHVybiBjcmVhdGVUcmFuc2FjdGlvbihh
cmdzLCB0cnVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNjQ2MzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsNiBA
QAogI2lmIEVOQUJMRShXT1JLRVJTKQogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dC5oIgogCi0j
aWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiVjhE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIlY4RGF0YWJhc2VDYWxsYmFjay5oIgotI2luY2x1ZGUgIlY4
RGF0YWJhc2VTeW5jLmgiCi0jZW5kaWYKICNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24uaCIKQEAgLTE0Myw2
NiArMTM3LDYgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV29ya2VyQ29udGV4dAogICAg
IHJldHVybiBnbG9iYWw7CiB9CiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlY4V29ya2VyQ29udGV4dC5v
cGVuRGF0YWJhc2UoKSIpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgNCkKLSAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoU1lOVEFYX0VSUik7Ci0KLSAgICBUT19XRUJDT1JFX1NUUklOR19FWENF
UFRJT05fQkxPQ0sobmFtZSwgYXJnc1swXSk7Ci0gICAgVE9fV0VCQ09SRV9TVFJJTkdfRVhDRVBU
SU9OX0JMT0NLKHZlcnNpb24sIGFyZ3NbMV0pOwotICAgIFRPX1dFQkNPUkVfU1RSSU5HX0VYQ0VQ
VElPTl9CTE9DSyhkaXNwbGF5TmFtZSwgYXJnc1syXSk7Ci0gICAgRVhDRVBUSU9OX0JMT0NLKHVu
c2lnbmVkIGxvbmcsIGVzdGltYXRlZFNpemUsIGFyZ3NbM10tPlVpbnQzMlZhbHVlKCkpOwotCi0g
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIFJlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwotICAgIGlmIChhcmdzLkxlbmd0
aCgpID49IDUpIHsKLSAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotCi0gICAgICAgIGNyZWF0
aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gdG9WOCh3b3JrZXJDb250ZXh0LT5vcGVu
RGF0YWJhc2UobmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0
aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpOwotCi0gICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VTeW5jQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5WOFdvcmtlckNvbnRleHQub3BlbkRh
dGFiYXNlU3luYygpIik7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCA0KQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihTWU5UQVhfRVJSKTsKLQotICAgIFRPX1dFQkNPUkVfU1RSSU5HX0VYQ0VQ
VElPTl9CTE9DSyhuYW1lLCBhcmdzWzBdKTsKLSAgICBUT19XRUJDT1JFX1NUUklOR19FWENFUFRJ
T05fQkxPQ0sodmVyc2lvbiwgYXJnc1sxXSk7Ci0gICAgVE9fV0VCQ09SRV9TVFJJTkdfRVhDRVBU
SU9OX0JMT0NLKGRpc3BsYXlOYW1lLCBhcmdzWzJdKTsKLSAgICBFWENFUFRJT05fQkxPQ0sodW5z
aWduZWQgbG9uZywgZXN0aW1hdGVkU2l6ZSwgYXJnc1szXS0+VWludDMyVmFsdWUoKSk7Ci0KLSAg
ICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7Ci0gICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPj0gNSkgewotICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0KLSAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSB0b1Y4KHdvcmtlckNvbnRleHQtPm9wZW5E
YXRhYmFzZVN5bmMobmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNy
ZWF0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpOwotCi0gICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwJKHJldmlzaW9uIDY0NjM4KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBET01BcHBsaWNhdGlvbkNhY2hlIGFw
cGxpY2F0aW9uQ2FjaGU7CiAjZW5kaWYgICAgCiAjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0Up
ICYmIEVOQUJMRV9EQVRBQkFTRQotICAgICAgICBbRW5hYmxlZEF0UnVudGltZSwgQ3VzdG9tXSBE
YXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJz
aW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSwgaW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQorICAgICAgICBbRW5h
YmxlZEF0UnVudGltZV0gRGF0YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lLCBp
biBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIERhdGFiYXNlQ2Fs
bGJhY2sgY3JlYXRpb25DYWxsYmFjaykKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OwogI2VuZGlmCiAjaWYgZGVmaW5lZChFTkFCTEVfRE9NX1NUT1JBR0UpICYmIEVOQUJMRV9ET01f
U1RPUkFHRQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw4ICsyNzAsMTgg
QEAgdm9pZCBEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbgogICAgICAgICBzY2hl
ZHVsZVRyYW5zYWN0aW9uKCk7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCBy
ZWFkT25seSkKK3ZvaWQgRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrKQoreworICAgIHJ1blRyYW5zYWN0aW9uKGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBz
dWNjZXNzQ2FsbGJhY2ssIGZhbHNlKTsKK30KKwordm9pZCBEYXRhYmFzZTo6cmVhZFRyYW5zYWN0
aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRy
PFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQoreworICAgIHJ1blRyYW5zYWN0aW9uKGNh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHRydWUpOworfQorCit2b2lk
IERhdGFiYXNlOjpydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9p
ZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCiB7CiAgICAgbV90cmFu
c2FjdGlvblF1ZXVlLmFwcGVuZChTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNr
LCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIDAsIHJlYWRPbmx5KSk7CiAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmgJKHJldmlzaW9uIDY0NjM4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3Ry
aW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5n
JiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjayk7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCi0g
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCBib29sIHJlYWRPbmx5KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgdm9p
ZCByZWFkVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKIAogICAgIC8vIEludGVybmFsIGVuZ2luZSBzdXBwb3J0
CiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcygpOwpAQCAtOTAsNiArOTAsOCBAQCBwcml2
YXRlOgogCiAgICAgRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAg
ICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4s
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wg
cmVhZE9ubHkpOwogCiAgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBib29sIHBlcmZv
cm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNv
ZGUmKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkocmV2aXNpb24gNjQ2MzgpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBAIG1v
ZHVsZSBzdG9yYWdlIHsKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIERhdGFiYXNlIHsK
ICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwotICAgICAgICBb
Q3VzdG9tXSB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERP
TVN0cmluZyBuZXdWZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBp
biBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gVm9pZENhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdHJhbnNhY3Rpb24o
aW4gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2sp
OwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlYWRUcmFuc2FjdGlvbihpbiBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JD
YWxsYmFjaywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgIHZvaWQg
Y2hhbmdlVmVyc2lvbihpbiBET01TdHJpbmcgb2xkVmVyc2lvbiwgaW4gRE9NU3RyaW5nIG5ld1Zl
cnNpb24sIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayBlcnJvckNhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBWb2lkQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgdm9pZCB0cmFuc2FjdGlvbihpbiBbQ2FsbGJhY2tdIFNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENh
bGxiYWNrXSBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgdm9pZCByZWFk
VHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNr
LCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJy
b3JDYWxsYmFjaywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gVm9pZENhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjayk7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3lu
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJl
dmlzaW9uIDY0NjM4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyOCw3ICsxMjgsMTcgQEAgdm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZl
cnNpb24oY29uc3QgUwogICAgIHNldEV4cGVjdGVkVmVyc2lvbihuZXdWZXJzaW9uKTsKIH0KIAot
dm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJiBlYykK
K3ZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrPiBjYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcnVuVHJh
bnNhY3Rpb24oY2FsbGJhY2ssIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjpy
ZWFkVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2Fs
bGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJ1blRyYW5zYWN0aW9uKGNhbGxiYWNr
LCB0cnVlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjpydW5UcmFuc2FjdGlvbihQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25s
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCShy
ZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGNoYW5nZVZlcnNp
b24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
PiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdHJhbnNhY3Rpb24o
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0
ZWRBbmRDbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCk7CkBAIC02
NCw2ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VTeW5jKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHksIEV4Y2Vw
dGlvbkNvZGUmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVN5bmMuaWRsCShyZXZpc2lvbiA2NDYzOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIG1vZHVsZSBzdG9y
YWdlIHsKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIERhdGFiYXNlU3luYyB7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCBjaGFuZ2VWZXJzaW9uKGluIERPTVN0cmluZyBvbGRWZXJzaW9uLCBpbiBET01TdHJp
bmcgbmV3VmVyc2lvbiwgaW4gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgY2FsbGJhY2spOwot
ICAgICAgICBbQ3VzdG9tXSB2b2lkIHRyYW5zYWN0aW9uKGluIFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrIGNhbGxiYWNrKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCByZWFkVHJhbnNhY3Rpb24o
aW4gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgY2FsbGJhY2spOworICAgICAgICB2b2lkIGNo
YW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmluZyBuZXdWZXJz
aW9uLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayBj
YWxsYmFjaykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgdHJhbnNhY3Rpb24o
aW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayBjYWxsYmFjaykgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgcmVhZFRyYW5zYWN0aW9uKGluIFtDYWxsYmFj
a10gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgY2FsbGJhY2spIHJhaXNlcyhET01FeGNlcHRp
b24pOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlz
aW9uIDY0NjM4KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw5ICs1MCwxMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIFtDdXN0
b21dIHZvaWQgaW1wb3J0U2NyaXB0cygvKltWYXJpYWRpY10gaW4gRE9NU3RyaW5nIHVybHMgKi8p
OwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBXb3JrZXJOYXZpZ2F0
b3IgbmF2aWdhdG9yOwogI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBFTkFCTEVfREFU
QUJBU0UKLSAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWUsIEN1c3RvbV0gRGF0YWJhc2Ugb3BlbkRh
dGFiYXNlKGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3Ry
aW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGluIERhdGFi
YXNlQ2FsbGJhY2sgY3JlYXRpb25DYWxsYmFjaykKKyAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWVd
IERhdGFiYXNlIG9wZW5EYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZl
cnNpb24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBEYXRhYmFzZUNhbGxiYWNrIGNyZWF0aW9u
Q2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0Vu
YWJsZWRBdFJ1bnRpbWVdIERhdGFiYXNlU3luYyBvcGVuRGF0YWJhc2VTeW5jKGluIERPTVN0cmlu
ZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBp
biB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIERh
dGFiYXNlQ2FsbGJhY2sgY3JlYXRpb25DYWxsYmFjaykKICAgICAgICAgICAgIHJhaXNlcyhET01F
eGNlcHRpb24pOwotICAgICAgICBbRW5hYmxlZEF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZVN5
bmMgb3BlbkRhdGFiYXNlU3luYyhpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNp
b24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBpbiBEYXRhYmFzZUNhbGxiYWNrIGNyZWF0aW9uQ2FsbGJhY2spOwogI2VuZGlmCiAKICAg
ICAgICAgLy8gVGltZXJzCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDYzOCkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA4LTA0ICBE
dW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29zbWV0aWMgY2hhbmdlcyB0byB0d28gdGVz
dHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzM4
MgorCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMt
c3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanM6CisgICAgICAgICogc3RvcmFnZS9udWxs
LWNhbGxiYWNrcy5odG1sOgorCiAyMDEwLTA4LTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQ2Mzgp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0
cy1zeW5jLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMCBAQAogVGhp
cyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZh
bGlkIHBhcmFtZXRlcnMuCi1QQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCi1QQVNT
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiBUWVBFX01JU01BVENIX0VSUjog
RE9NIEV4Y2VwdGlvbiAxNworUEFTUzogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24g
MTcKIFBBU1M6IHVuZGVmaW5lZAogUEFTUzogdW5kZWZpbmVkCiBQQVNTOiB1bmRlZmluZWQKLVBB
U1M6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3CitQQVNTOiBjYWxsaW5nIG9w
ZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgbnVsbCBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQu
CiBQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLgogUEFTUzogb3BlbkRhdGFiYXNl
U3luYygpIHN1Y2NlZWRlZC4KIFBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGgg
YSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Bl
bi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcwkocmV2aXNpb24gNjQ2MzgpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3lu
Yy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCB0cnkgewogCiB0cnkgewogICAg
IGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0
aW9uIiwgMTAyNCwgMCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaWZ0aCBhcmd1bWVu
dCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhbiBvYmplY3QsIGlmIHByZXNlbnQuIik7
CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGgg
YSBudWxsIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKIH0gY2F0Y2ggKGVycikgewot
ICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwogfQogCiB0cnkgewpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9udWxsLWNhbGxiYWNrcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0
b3JhZ2UvbnVsbC1jYWxsYmFja3MuaHRtbAkocmV2aXNpb24gNjQ2MzgpCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL251bGwtY2FsbGJhY2tzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpCiAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoPykiLCBbNV0pOwogICAgICAgICB9LCBudWxsLCBmdW5jdGlv
bigpIHsgZmluaXNoVGVzdCgpOyB9KTsKICAgICB9IGNhdGNoKGVycikgewotICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCA9ICJGQUlMIjsKKyAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgPSAiRkFJTDog
IiArIGVyci5tZXNzYWdlOwogICAgICAgICBmaW5pc2hUZXN0KCk7CiAgICAgfQogfQo=
</data>
<flag name="review"
          id="51785"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="51786"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63888</attachid>
            <date>2010-08-09 05:22:22 -0700</date>
            <delta_ts>2010-08-09 10:51:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>113793</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDk3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA2IEBACisyMDEwLTA4LTA5ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQXV0by1nZW5lcmF0ZSBtb3N0IEhUTUw1IERCIGJpbmRpbmdzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMzODIKKworICAgICAgICAqIEFuZHJv
aWQuanNjYmluZGluZ3MubWs6IFJlbW92ZSB7SlN8Vjh9RGF0YWJhc2V7U3luY31DdXN0b20uY3Bw
CisgICAgICAgIGFuZCB0aGUgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBvZiBvcGVuRGF0YWJhc2V7
U3luY30oKS4KKyAgICAgICAgKiBBbmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RhdGFiYXNlU3luY0N1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERhdGFiYXNlQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbTogQ2hhbmdlIHRoZSBjb2RlIGdl
bmVyYXRvcnMKKyAgICAgICAgdG8gY2hlY2sgdGhhdCBlYWNoIHZhbHVlIGNhbiBiZSBjb252ZXJ0
ZWQgdG8gdGhlIHJlc3BlY3RpdmUKKyAgICAgICAgYXJndW1lbnQgdHlwZS4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJh
Y2s6On5KU1Rlc3RDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblZvaWRNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkludE1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJnc0FuZFRocm93cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbklkYktleSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkN1c3RvbUFyZ3NBbmRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kQXJnKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFt
ZUFuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJl
QVNBRCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kVHdvT3B0aW9uYWxBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6dm9pZE1ldGhvZFdpdGhBcmdzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjppbnRNZXRob2RXaXRo
QXJnc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0
aG9kV2l0aEFyZ3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6
Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmlkYktleUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6Y3VzdG9tQXJnc0FuZEV4Y2VwdGlv
bkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6d2l0aER5bmFt
aWNGcmFtZUFuZEFyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5h
bDo6d2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9iakludGVybmFsOjp3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OndpdGhEeW5hbWljRnJh
bWVBbmRVc2VyR2VzdHVyZUFTQURDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
SW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxB
cmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhv
ZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9iakludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kMUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QzQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kNENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1
cmVWOFRlc3RPYmpUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Qmlu
ZGluZ01hY3Jvcy5oOgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IE1pbm9y
IGNoYW5nZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUKKyAgICAgICAgYXV0by1nZW5lcmF0ZWQg
YmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpWOFBhcmFtZXRlcjo6VjhQYXJhbWV0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWxDYWxsYmFjayk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3Fs
Q2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBzdG9y
YWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjp0cmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpydW5UcmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaWRsOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3lu
Yzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpyZWFkVHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpydW5UcmFuc2FjdGlv
bik6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlU3luYy5pZGw6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoK
KwogMjAxMC0wOC0wOSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIGZpeGluZyB0aGUgYnVpbGRzIGFmdGVyIHI2NDk2Ny4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Fu
ZHJvaWQuanNjYmluZGluZ3MubWsJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9BbmRyb2lk
LmpzY2JpbmRpbmdzLm1rCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw2IEBAIExPQ0FMX1NS
Q19GSUxFUyArPSBcCiAJYmluZGluZ3MvanMvSlNEYXRhYmFzZUNhbGxiYWNrLmNwcCBcCiAJYmlu
ZGluZ3MvanMvSlNEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9K
U0RhdGFHcmlkRGF0YVNvdXJjZS5jcHAgXAotCWJpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20u
Y3BwIFwKIAliaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwIFwK
IAliaW5kaW5ncy9qcy9KU0Rlc2t0b3BOb3RpZmljYXRpb25zQ3VzdG9tLmNwcCBcCiAJYmluZGlu
Z3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgXApJbmRleDogV2ViQ29yZS9BbmRy
b2lkLnY4YmluZGluZ3MubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLnY4YmluZGlu
Z3MubWsJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNiBAQCBMT0NBTF9TUkNfRklMRVMgKz0gXAog
CWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOERhdGFiYXNlQ2FsbGJhY2suY3BwIFwKLQliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRh
YmFzZUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNv
bnRleHRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEZXZpY2VNb3Rpb25FdmVu
dEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERldmljZU9yaWVudGF0aW9uRXZl
bnRDdXN0b20uY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjQ5NzYpCisrKyBXZWJDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01OTAsOSArNTkwLDYgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKICAgICBi
aW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKLSAgICBiaW5kaW5ncy9qcy9K
U0RhdGFiYXNlQ3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3Bw
Ci0gICAgYmluZGluZ3MvanMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNEYXRh
R3JpZERhdGFTb3VyY2UuY3BwCiAgICAgYmluZGluZ3MvanMvSlNEZWJ1Z1dyYXBwZXJTZXQuY3Bw
CkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtMjc0Myw4ICsyNzQzLDYgQEAgd2ViY29yZV9idWlsdF9zb3VyY2Vz
ICs9IFwKIAogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgXAotCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNEYXRhYmFzZUN1c3RvbS5jcHAgXAotCVdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZVN5
bmNDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlz
dEN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3Rv
bS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20u
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5neXBpCShyZXZpc2lvbiA2NDk3NikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC01NDMsOCArNTQzLDYgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy9q
cy9KU0N1c3RvbVZvaWRDYWxsYmFjay5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tWFBhdGhOU1Jlc29sdmVyLmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRGF0YWJh
c2VDdXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RhdGFiYXNlU3luY0N1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRGF0YUdyaWRDb2x1bW5MaXN0
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNEYXRhR3JpZERhdGFTb3Vy
Y2UuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RhdGFHcmlkRGF0YVNvdXJjZS5o
JywKQEAgLTc0Miw4ICs3NDAsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVZvaWRDYWxsYmFjay5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCcsCi0gICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGV2aWNlTW90aW9uRXZlbnRDdXN0
b20uY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjQ5NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDI1LDggKzI0MjUsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfREFUQUJBU0U9MSkgewogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwIFwKICAgICAg
ICAgYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBcCi0g
ICAgICAgIGJpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwIFwKLSAgICAgICAgYmluZGlu
Z3MvanMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNT
UUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25DdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNTUUxUcmFuc2Fj
dGlvblN5bmNDdXN0b20uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDIxODAsMTEwICs0MjE4MCw2IEBACiAJCQkJCT4NCiAJ
CQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xq
c1xKU0RhdGFiYXNlQ3VzdG9tLmNwcCINCi0JCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVD
b25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
Ci0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdp
bjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8
VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFt
ZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQot
CQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQot
CQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0K
LQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0K
LQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0K
LQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCINCi0JCQkJCT4NCi0J
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxX
aW4zMiINCi0JCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCQk+DQotCQkJCQkJ
PFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkvPg0KLQkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5h
bWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
Ig0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdp
bjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCT4NCi0JCQkJCQk8
VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCS8+DQotCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFt
ZT0iRGVidWdfQWxsfFdpbjMyIg0KLQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJ
CQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJ
CQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxG
aWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRGF0YUdyaWRDb2x1bW5M
aXN0Q3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NDk3
NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC00MzYyLDcgKzQzNjIsNiBAQAogCQlCNTUwQjUyNjExREM2OEE4MDA5MjM4ODUg
LyogU1FMU3RhdGVtZW50U3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjU1MEI1MjIxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMu
aCAqLzsgfTsKIAkJQjU1RDVBQTQxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1NUQ1QUEyMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmggKi87IH07CiAJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1NUQ1QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrLmNwcCAqLzsgfTsKLQkJQjU1RDVBQTgxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0
YWJhc2VTeW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3Rv
bS5jcHAgKi87IH07CiAJCUI1NUQ1QUE5MTE5MTMyNTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0
aW9uU3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNTVENUFBNzExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmND
dXN0b20uY3BwICovOyB9OwogCQlCNTZFQkE4NTExQzlGRjgxMDBCMDQ0NzcgLyogU1FMRXhjZXB0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTZF
QkE4MzExQzlGRjgxMDBCMDQ0NzcgLyogU1FMRXhjZXB0aW9uLmggKi87IH07CiAJCUI1OENFQjY5
MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU4Q0VCNjcxMTkxMzYwNzAwMkE2NzkwIC8qIEpT
RGF0YWJhc2VTeW5jLmggKi87IH07CkBAIC00ODIwLDcgKzQ4MTksNiBAQAogCQlCQ0NCRTdCNTBF
MDcxNjY5MDBFQUZBOEUgLyogQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NCRTdCNDBFMDcxNjY5MDBF
QUZBOEUgLyogQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5jcHAgKi87IH07CiAJCUJDQ0Q3NERD
MEE0QzhEMzUwMDVGREE2RCAvKiBIVE1MVmlld1NvdXJjZURvY3VtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NENzREQjBBNEM4RDM1MDA1RkRB
NkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oICovOyB9OwogCQlCQ0NENzRFNTBBNEM4RERG
MDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NENzRFNDBBNEM4RERGMDA1RkRBNkQgLyog
SFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgKi87IH07Ci0JCUJDQ0U1OEFDMTA2MUU4Q0YwMDhG
QjM1QSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDQ0U1OEFCMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFiYXNl
Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkNDRkJBRTgwQjUxNTJFRDAwMDFGMUQ3IC8qIERvY3VtZW50
UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0NGQkFFNzBCNTE1MkVEMDAwMUYxRDcgLyogRG9jdW1lbnRQYXJzZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0QwRTBGQTBFOTcyQzM1MDAy
NjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNEMEUwRjcwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3Jp
Z2luLmNwcCAqLzsgfTsKIAkJQkNEMEUwRkIwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3Jp
Z2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Qw
RTBGODBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAwNjEsNyArMTAwNTksNiBAQAog
CQlCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRTeW5jLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEyMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1NUQ1
QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUE3MTE5MTMyNTAwMEJDQzMxNSAvKiBK
U1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1NUQ1QUJCMTE5MTMyNzIwMEJDQzMxNSAvKiBEYXRhYmFzZVN5bmMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERhdGFiYXNlU3luYy5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUJDMTE5MTMyNzIwMEJDQzMxNSAvKiBTUUxUcmFuc2Fj
dGlvblN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uU3luYy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU1Niw3ICsxMDU1Myw2IEBACiAJ
CUJDQ0JFN0I0MEUwNzE2NjkwMEVBRkE4RSAvKiBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0NENzREQjBBNEM4
RDM1MDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0NENzRFNDBBNEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3Vy
Y2VEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRN
TFZpZXdTb3VyY2VEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJD
Q0U1OEFCMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YWJhc2VDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0NGQkFFNzBCNTE1MkVEMDAwMUYxRDcgLyogRG9jdW1l
bnRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50UGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRDBFMEY3MEU5NzJDMzUwMDI2
NURFQSAvKiBTZWN1cml0eU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTZWN1cml0eU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDRDBFMEY4MEU5NzJDMzUwMDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTYwMjEsOCArMTYwMTcsNiBAQAogCQkJCTkzOTIyNjJFMTAzMjEwODQw
MDZFN0Q1RCAvKiBKU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzU4MjVGMjBDMEI4
OTM4MDA1M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCAqLywKIAkJCQlC
QzIwRkI3RTBDMEU4RTZDMDBEMTQ0N0YgLyogSlNDU1NWYWx1ZUN1c3RvbS5jcHAgKi8sCi0JCQkJ
QkNDRTU4QUIxMDYxRThDRjAwOEZCMzVBIC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwICovLAotCQkJ
CUI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgKi8s
CiAJCQkJQkM3N0QxNTEwRkYxOUM3MzAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3Vz
dG9tLmNwcCAqLywKIAkJCQk0MTYyQTQ1MzEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRX
b3JrZXJDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQkzMzUwM0NCRjEwMTc5QzFBMDAzQjQ3RTEg
LyogSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1c3RvbS5jcHAgKi8sCkBAIC0yMTMxNCw5ICsyMTMw
OCw3IEBACiAJCQkJRTEwQjkzQzMwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAv
KiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1OURENjlBMTE5MDI5RTUwMDdF
OTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkNDRTU4
QUMxMDYxRThDRjAwOEZCMzVBIC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU4Q0VCNkExMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUI1NUQ1QUE4MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3lu
Y0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3RDE2OTBGRjE5RjU2MDA3MDg4N0Ig
LyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3RDE2QjBGRjE5
RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdz
QWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5n
c0FsbEluT25lLmNwcAkocmV2aXNpb24gNjQ5NzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QmluZGluZ3NBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAKICNp
bmNsdWRlICJKU0RPTVdyYXBwZXIuY3BwIgogI2luY2x1ZGUgIkpTRGF0YUdyaWRDb2x1bW5MaXN0
Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RhdGFHcmlkRGF0YVNvdXJjZS5jcHAiCi0jaW5jbHVk
ZSAiSlNEYXRhYmFzZUN1c3RvbS5jcHAiCi0jaW5jbHVkZSAiSlNEYXRhYmFzZVN5bmNDdXN0b20u
Y3BwIgogI2luY2x1ZGUgIkpTRGVidWdXcmFwcGVyU2V0LmNwcCIKICNpbmNsdWRlICJKU0RlZGlj
YXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRGVza3RvcE5vdGlmaWNh
dGlvbnNDdXN0b20uY3BwIgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1
ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBAIC0zNiwxMCArMzUsNiBAQAogI2luY2x1ZGUgIkhU
TUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKICNpbmNsdWRlICJKU0F1ZGlvQ29u
c3RydWN0b3IuaCIKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiSlNEYXRhYmFzZS5o
IgotI2luY2x1ZGUgIkpTRGF0YWJhc2VDYWxsYmFjay5oIgotI2VuZGlmCiAjaW5jbHVkZSAiSlNE
T01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50
TGlzdGVuZXIuaCIKQEAgLTEwMDYsNDkgKzEwMDEsNiBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojpy
ZW1vdmVFdmVudExpc3RlbmVyCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLSNpZiBF
TkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuRGF0YWJhc2UoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSB8fCAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgNCkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZ
TlRBWF9FUlIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBT
dHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLQotICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGRpc3BsYXlO
YW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotCi0gICAgLy8gZXhlYy0+YXJndW1lbnQoMykgPSBlc3RpbWF0ZWQgc2l6ZQotICAgIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvVUludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFj
azsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDUpIHsKLSAgICAgICAgaWYgKCFl
eGVjLT5hcmd1bWVudCg0KS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRhYmFz
ZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoNCkpLCBnbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsKCktPm9w
ZW5EYXRhYmFzZShuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3Jl
YXRpb25DYWxsYmFjay5yZWxlYXNlKCksIGVjKSkpOwotCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KIERPTVdpbmRvdyogdG9E
T01XaW5kb3coSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDY0
OTc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkpTRGF0YWJhc2UuaCIKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmgiCi0jaW5jbHVkZSAiSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKLSNpbmNs
dWRlICJKU0N1c3RvbVZvaWRDYWxsYmFjay5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9t
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUpTVmFsdWUgSlNEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgU3RyaW5nIG9sZFZlcnNpb24gPSB1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcg
bmV3VmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLQotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
azsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMiAmJiAhZXhlYy0+YXJndW1lbnQo
MikuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50
KDIpLmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FsbGJhY2sgPSBKU1NRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAzICYmICFleGVjLT5hcmd1bWVudCgzKS5pc051bGwoKSkgewotICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMykuZ2V0T2JqZWN0KCk7Ci0gICAgICAg
IGlmICghb2JqZWN0KSB7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBlcnJvckNhbGxiYWNrID0gSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KCkpKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2s7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDQgJiYgIWV4ZWMtPmFyZ3Vt
ZW50KDQpLmlzTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1
bWVudCg0KS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN1Y2Nlc3NDYWxsYmFj
ayA9IEpTQ3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSk7Ci0gICAgfQotCi0gICAgbV9pbXBsLT5j
aGFuZ2VWZXJzaW9uKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGNhbGxiYWNrLnJlbGVhc2UoKSwg
ZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCkpOwotCi0g
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5z
YWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRGF0YWJhc2UqIGRhdGFiYXNlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBib29sIHJlYWRPbmx5KQotewotICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKTsKLQotICAgIGlmICghb2JqZWN0KSB7
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrPiBjYWxsYmFjayhKU1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShv
YmplY3QsIGdsb2JhbE9iamVjdCkpOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2s7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEg
JiYgIWV4ZWMtPmFyZ3VtZW50KDEpLmlzTnVsbCgpKSB7Ci0gICAgICAgIG9iamVjdCA9IGV4ZWMt
PmFyZ3VtZW50KDEpLmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXJyb3JDYWxs
YmFjayA9IEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBnbG9i
YWxPYmplY3QpOwotICAgIH0KLQotICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjazsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMiAmJiAhZXhlYy0+YXJndW1l
bnQoMikuaXNOdWxsKCkpIHsKLSAgICAgICAgb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMikuZ2V0
T2JqZWN0KCk7Ci0gICAgICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBKU0N1c3Rv
bVZvaWRDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAg
ICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNr
LnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgcmVhZE9ubHkpOwotICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlIEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oZXhlYywg
bV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCgpKSwgZmFsc2UpOwotfQotCi1KU1ZhbHVlIEpTRGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIG1f
aW1wbC5nZXQoKSwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qo
KSksIHRydWUpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAkocmV2aXNpb24g
NjQ5NzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJKU0RhdGFiYXNlU3luYy5oIgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotCi0jaW5j
bHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotSlNW
YWx1ZSBKU0RhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgU3RyaW5nIG9sZFZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgbmV3VmVyc2lvbiA9IHVzdHJpbmdU
b1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFJl
ZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2s7Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+IDIgJiYgIWV4ZWMtPmFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgyKS5nZXRPYmplY3QoKTsK
LSAgICAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhbGxiYWNrID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjazo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QoKSkpOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIG1f
aW1wbC0+Y2hhbmdlVmVyc2lvbihvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBjYWxsYmFjay5yZWxl
YXNlKCksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotCi0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgYm9vbCByZWFkT25seSkKLXsKLSAgICBKU09iamVjdCogb2JqZWN0ID0g
ZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrPiBjYWxsYmFjayhKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUo
b2JqZWN0LCBnbG9iYWxPYmplY3QpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCksIHJlYWRPbmx5LCBlYyk7
Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLQotICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotfQotCi1KU1ZhbHVlIEpTRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIG1faW1wbC5nZXQo
KSwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSksIGZhbHNl
KTsKLX0KLQotSlNWYWx1ZSBKU0RhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0aW9uKEV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgbV9pbXBsLmdl
dCgpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgdHJ1
ZSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDY0OTc2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMyArMjksNiBAQAogCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0
LmgiCiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNs
dWRlICJEYXRhYmFzZVN5bmMuaCIKLSNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
SlNEYXRhYmFzZUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSlNEYXRhYmFzZVN5bmMuaCIKLSNlbmRp
ZgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgpAQCAtMTUzLDg5ICsxNDYsNiBAQCBKU1Zh
bHVlIEpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwoCiB9CiAjZW5kaWYKIAotI2lmIEVO
QUJMRShEQVRBQkFTRSkKLUpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UoRXhl
Y1N0YXRlKiBleGVjKSAKLXsgCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQpIHsK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0
cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmlu
ZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4
ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gZXhlYy0+YXJn
dW1lbnQoMykgPSBlc3RpbWF0ZWQgc2l6ZQotICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDUpIHsKLSAgICAgICAgaWYgKCFleGVjLT5hcmd1bWVudCg0KS5pc09iamVj
dCgpKSB7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9F
UlIpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmpl
Y3QoZXhlYy0+YXJndW1lbnQoNCkpLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgfQotIAotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOyAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwoKS0+b3BlbkRhdGFiYXNlKG5hbWUsIHZlcnNp
b24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2Uo
KSwgZWMpKSk7IAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7IAotICAgIHJldHVybiBy
ZXN1bHQ7IAotfSAKLSAKLUpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VTeW5j
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgNCkg
ewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1lOVEFYX0VSUik7Ci0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgU3Ry
aW5nIHZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmco
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSB1c3RyaW5nVG9TdHJpbmco
ZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBleGVjLT5h
cmd1bWVudCgzKSA9IGVzdGltYXRlZCBzaXplCi0gICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplID0gZXhlYy0+YXJndW1lbnQoMykudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFJlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gNSkgewotICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDQpLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBKU0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09i
amVjdChleGVjLT5hcmd1bWVudCg0KSksIGdsb2JhbE9iamVjdCgpKTsKLSAgICB9Ci0KLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwoKS0+b3BlbkRhdGFiYXNlU3luYyhuYW1lLCB2
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjay5yZWxl
YXNlKCksIGVjKSkpOwotCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JHT2JqZWN0LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNpb24gNjQ5NzYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JKHdvcmtpbmcgY29weSkKQEAg
LTIwOCw2ICsyMDgsMTQgQEAgc3ViIFNraXBGdW5jdGlvbiB7CiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KIAorICAgICMgU2tpcCBmdW5jdGlvbnMgdGhhdCBoYXZlIFsiQ2FsbGJhY2siXSBwYXJh
bWV0ZXJzLCBiZWNhdXNlIHRoaXMKKyAgICAjIGNvZGUgZ2VuZXJhdG9yIGRvZXNuJ3Qga25vdyBo
b3cgdG8gYXV0by1nZW5lcmF0ZSBjYWxsYmFja3MuCisgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7
JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IH0KKyAgICB9CisKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA2NDk3NikKKysrIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4
NTMsMTIgKzE4NTMsMjAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAg
ICAgICAgIG15ICRyZXF1aXJlc0FsbEFyZ3VtZW50cyA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVxdWlyZXNBbGxBcmd1bWVudHMifTsKICAgICAgICAgICAg
ICAgICBpZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgJG51
bVBhcmFtZXRlcnMpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcmVxdWlyZXNB
bGxBcmd1bWVudHMgZXEgIlJhaXNlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsIFwiTm90IGVub3VnaCBhcmd1bWVudHNcIikpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIG15ICRudW1NYW5kYXRvcnlQYXJhbXMgPSBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc307CisgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChyZXZlcnNl
KEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJG51bU1hbmRhdG9yeVBhcmFtcy0tOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8ICRudW1NYW5k
YXRvcnlQYXJhbXMpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRyZXF1aXJlc0FsbEFy
Z3VtZW50cyBlcSAiUmFpc2UiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhF
cnJvcihleGVjLCBcIk5vdCBlbm91Z2ggYXJndW1lbnRzXCIpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKQEAgLTE5MDgsMTQgKzE5
MTYsMTggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAg
ICAgICRwYXJhbUluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CisgICAgICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwogICAgICAgICAg
ICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
fSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGlv
bmFsIGNhbGxiYWNrcyBzaG91bGQgYmUgdHJlYXRlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB0aGV5
IGFsd2F5cyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAoMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAjIGFuZCB3ZSBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMg
dGhhdCB0YWtlIGEgZGlmZmVyZW50IG51bWJlciBvZiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25h
bCJ9ICYmICEkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgZWFybHkgY2FsbCBpZiB0aGVy
ZSBhcmUgZW5vdWdoIHBhcmFtZXRlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCEkaGFzT3B0aW9uYWxBcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1l
bnRDb3VudCgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYXNPcHRp
b25hbEFyZ3VtZW50cyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhcmdzQ291
bnQgPCAiIC4gKCRhcmdzSW5kZXggKyAxKSAuICIpIHtcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhcmdzQ291bnQgPD0gJGFyZ3NJ
bmRleCkge1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0cmluZywgJHBhcmFtSW5k
ZXgsICIgICAgIiB4IDIsICRwb2RUeXBlLCAkaW1wbENsYXNzTmFtZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTE5MzQsMTIgKzE5NDYsMjIgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXIt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXkgJGNhbGxiYWNrQ2xhc3NOYW1lID0gR2V0Q2FsbGJhY2tDbGFzc05hbWUoJHBh
cmFtZXRlci0+dHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siJGNhbGxiYWNrQ2xhc3NOYW1lLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPD0gJGFyZ3NJbmRleCB8fCAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmpl
Y3QoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8IiAuICRwYXJhbWV0ZXItPnR5cGUg
LiAiPiAkbmFtZSA9ICIgLiAkY2FsbGJhY2tDbGFzc05hbWUgLiAiOjpjcmVhdGUoYXNPYmplY3Qo
ZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCIgLiAkcGFyYW1ldGVyLT50eXBl
LiAiPiAkbmFtZTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAm
JiAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNOdWxsKCkgJiYgIWV4ZWMtPmFyZ3VtZW50
KCRhcmdzSW5kZXgpLmlzVW5kZWZpbmVkKCkpIHtcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKCFleGVjLT5hcmd1bWVu
dCgkYXJnc0luZGV4KS5pc09iamVjdCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgfVxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAkbmFtZSA9ICR7Y2FsbGJh
Y2tDbGFzc05hbWV9OjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkp
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAkYXJn
c0luZGV4IHx8ICFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc09iamVjdCgpKSB7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwi
IC4gJHBhcmFtZXRlci0+dHlwZSAuICI+ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNy
ZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRw
YXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4
ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIikgLiAiO1xuIik7CiAKQEAgLTE5NDcsMTIgKzE5Njks
MTUgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIEJ1dCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNl
IHRoZSB0eXBlIGlzIHVuc2lnbmVkIGFuZCB0aGUgZmFjdCB0aGF0IGl0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyB3YXMgbmVnYXRpdmUgd2lsbCBiZSBsb3N0IGJ5IHRoZSB0aW1lIHdl
J3JlIGluc2lkZSB0aGUgRE9NLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGFy
YW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNJbmRleCJ9KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCRuYW1lIDwgMCkge1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgSU5ERVhfU0la
RV9FUlIpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIHR5cGUgY29udmVyc2lvbiBzdWNjZWVkZWQu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CkBAIC0y
MzQzLDcgKzIzNjgsOCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgcmV0dXJuICIkdmFsdWUu
dG9Cb29sZWFuKGV4ZWMpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkdmFs
dWUudG9OdW1iZXIoZXhlYykiIGlmICR0eXBlIGVxICJkb3VibGUiOwogICAgIHJldHVybiAiJHZh
bHVlLnRvRmxvYXQoZXhlYykiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgIlNWR051
bWJlciI7Ci0gICAgcmV0dXJuICIkdmFsdWUudG9JbnQzMihleGVjKSIgaWYgJHR5cGUgZXEgInVu
c2lnbmVkIGxvbmciIG9yICR0eXBlIGVxICJsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hv
cnQiOworICAgIHJldHVybiAiJHZhbHVlLnRvSW50MzIoZXhlYykiIGlmICR0eXBlIGVxICJsb25n
IjsKKyAgICByZXR1cm4gIiR2YWx1ZS50b1VJbnQzMihleGVjKSIgaWYgJHR5cGUgZXEgInVuc2ln
bmVkIGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CiAgICAgcmV0dXJuICJzdGF0
aWNfY2FzdDwkdHlwZT4oJHZhbHVlLnRvSW50ZWdlcihleGVjKSkiIGlmICR0eXBlIGVxICJsb25n
IGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIGxvbmciOwogCiAgICAgcmV0dXJuICJ2
YWx1ZVRvRGF0ZShleGVjLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSI7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDY0OTc2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwNiw3ICsxMTA2LDE1IEBAIEVORAogCiAgICAgbXkgJHJlcXVpcmVzQWxs
QXJndW1lbnRzID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJS
ZXF1aXJlc0FsbEFyZ3VtZW50cyJ9OwogICAgIGlmICgkcmVxdWlyZXNBbGxBcmd1bWVudHMpIHsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoYXJncy5MZW5ndGgoKSA8
ICRudW1QYXJhbWV0ZXJzKVxuIik7CisgICAgICAgIG15ICRudW1NYW5kYXRvcnlQYXJhbXMgPSBA
eyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChyZXZl
cnNlKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkpIHsKKyAgICAgICAgICAgIGlmICgkcGFyYW0t
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7CisgICAgICAgICAgICAgICAgJG51
bU1hbmRhdG9yeVBhcmFtcy0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBsYXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAkbnVtTWFuZGF0b3J5UGFyYW1zKVxu
Iik7CiAgICAgICAgIGlmICgkcmVxdWlyZXNBbGxBcmd1bWVudHMgZXEgIlJhaXNlIikgewogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7XG4iKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTExNzUsNyArMTE4Myw5IEBAIEVORAogCiAgICAgICAgIG15
ICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKIAotICAgICAgICBpZiAoJHBhcmFt
ZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAgICAgICAgIyBPcHRp
b25hbCBjYWxsYmFja3Mgc2hvdWxkIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHksIGJlY2F1c2UgdGhl
eSBhbHdheXMgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgKDApLAorICAgICAgICAjIGFuZCB3ZSBjYW4g
cmVkdWNlIHRoZSBudW1iZXIgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGlm
ZmVyZW50IG51bWJlciBvZiBwYXJhbWV0ZXJzLgorICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0gJiYgISRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CiAgICAgICAgICAgICAjIEdlbmVyYXRlIGVhcmx5IGNh
bGwgaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcGFyYW1ldGVycy4KICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gJHBhcmFtSW5kZXgp
IHtcbiIpOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uQ2FsbCA9IEdlbmVyYXRlRnVuY3Rpb25D
YWxsU3RyaW5nKCRmdW5jdGlvbiwgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRpbXBsQ2xhc3NO
YW1lKTsKQEAgLTExODMsNTEgKzExOTMsNTkgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIH1cbiIpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKEJhc2lj
VHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJOYW1lfU9rO1xuIik7CisgICAg
ICAgIH0KKworICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7Cisg
ICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFt
ZXRlciwgJHBhcmFtSW5kZXgpOwogICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKICAgICAgICAgICAgIG15ICRjbGFzc05hbWUgPSBHZXRD
YWxsYmFja0NsYXNzTmFtZSgkcGFyYW1ldGVyLT50eXBlKTsKICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IiRjbGFzc05hbWUuaCJ9ID0gMTsKLSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4
Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gJHBhcmFtSW5kZXggfHwgIWFyZ3NbJHBhcmFtSW5k
ZXhdLT5Jc09iamVjdCgpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPCIgLiAkcGFyYW1l
dGVyLT50eXBlIC4gIj4gJHBhcmFtZXRlck5hbWUgPSAke2NsYXNzTmFtZX06OmNyZWF0ZShhcmdz
WyRwYXJhbUluZGV4XSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiIpOwotICAgICAg
ICAgICAgJHBhcmFtSW5kZXgrKzsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewor
ICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25h
bCJ9KSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBSZWZQ
dHI8IiAuICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkcGFyYW1ldGVyTmFtZTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAkcGFyYW1JbmRleCAmJiAhYXJnc1skcGFyYW1JbmRleF0tPklzTnVsbCgpICYmICFhcmdzWyRw
YXJhbUluZGV4XS0+SXNVbmRlZmluZWQoKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICAgICAgaWYgKCFhcmdzWyRwYXJhbUluZGV4XS0+SXNPYmpl
Y3QoKSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICAkcGFyYW1ldGVyTmFt
ZSA9ICR7Y2xhc3NOYW1lfTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCBnZXRTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAkcGFyYW1J
bmRleCB8fCAhYXJnc1skcGFyYW1JbmRleF0tPklzT2JqZWN0KCkpXG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihU
WVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIFJlZlB0cjwiIC4gJHBhcmFtZXRlci0+dHlwZSAuICI+ICRwYXJhbWV0ZXJO
YW1lID0gJHtjbGFzc05hbWV9OjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sIGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiAo
JHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewogICAgICAgICAg
ICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJOYW1lfURp
ZFRocm93ID0gZmFsc2U7XG4iKTsKLSAgICAgICAgfSBlbHNpZiAoQmFzaWNUeXBlQ2FuRmFpbENv
bnZlcnNpb24oJHBhcmFtZXRlcikpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9T2s7XG4iKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2ln
bmF0dXJlKCRwYXJhbWV0ZXIsICRwYXJhbUluZGV4KSAuICIgJHBhcmFtZXRlck5hbWUgPSAiKTsK
LQotICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
IikgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCAke3BhcmFtZXRlck5hbWV9RGlkVGhy
b3cpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRp
dmVUeXBlICRwYXJhbWV0ZXJOYW1lID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJn
c1skcGFyYW1JbmRleF0sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCR7cGFyYW1ldGVyTmFtZX1EaWRU
aHJvdylcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworICAgICAgICB9IGVsc2lmIChUeXBlQ2FuRmFp
bENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgJHBhcmFtZXRlck5hbWUgPSAiIC4KKyAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsIEJh
c2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gICIke3BhcmFtZXRlck5hbWV9
T2siIDogdW5kZWYpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICBpZiAoVU5MSUtFTFkoISRwYXJhbWV0ZXJOYW1lIiAuIChCYXNpY1R5cGVDYW5GYWls
Q29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICJPayIgOiAiIikgLiAiKSkge1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hf
RVJSO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBn
b3RvIGZhaWw7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
fVxuIik7CisgICAgICAgIH0gZWxzaWYgKCRuYXRpdmVUeXBlID1+IC9eVjhQYXJhbWV0ZXIvKSB7
CisgICAgICAgICAgICBteSAkdmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImFy
Z3NbJHBhcmFtSW5kZXhdIiwgQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikg
PyAgIiR7cGFyYW1ldGVyTmFtZX1PayIgOiB1bmRlZik7CisgICAgICAgICAgICBpZiAoJHBhcmFt
ZXRlci0+dHlwZSBlcSAiRE9NU3RyaW5nIikgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSygk
bmF0aXZlVHlwZSwgJHBhcmFtZXRlck5hbWUsICR2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgIyBEb24ndCBrbm93IGhvdyB0byBwcm9wZXJseSBjaGVj
ayBmb3IgY29udmVyc2lvbiBleGNlcHRpb25zIHdoZW4gJHBhcmFtZXRlci0+dHlwZSBpcyAiRE9N
VXNlckRhdGEiCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAk
bmF0aXZlVHlwZSAkcGFyYW1ldGVyTmFtZSA9ICR2YWx1ZTtcbiIpOworICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgSlNW
YWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNUeXBlQ2FuRmFp
bENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAgIiR7cGFyYW1ldGVyTmFtZX1PayIgOiB1bmRlZikg
LiAiO1xuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9u
KCRwYXJhbWV0ZXIpKSB7Ci0gICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2Rl
LmgifSA9IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAotIiAgICBpZiAo
VU5MSUtFTFkoISRwYXJhbWV0ZXJOYW1lIiAuIChCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigk
cGFyYW1ldGVyKSA/ICJPayIgOiAiIikgLiAiKSkge1xuIiAuCi0iICAgICAgICBlYyA9IFRZUEVf
TUlTTUFUQ0hfRVJSO1xuIiAuCi0iICAgICAgICBnb3RvIGZhaWw7XG4iIC4KLSIgICAgfVxuIik7
CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEJpbmRpbmdNYWNyb3MuaCJ9ID0gMTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgRVhDRVBUSU9OX0JMT0NLKCRu
YXRpdmVUeXBlLCAkcGFyYW1ldGVyTmFtZSwgIiAuCisgICAgICAgICAgICAgICAgIEpTVmFsdWVU
b05hdGl2ZSgkcGFyYW1ldGVyLCAiYXJnc1skcGFyYW1JbmRleF0iLCBCYXNpY1R5cGVDYW5GYWls
Q29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICAiJHtwYXJhbWV0ZXJOYW1lfU9rIiA6IHVuZGVmKSAu
ICIpO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IklzSW5kZXgifSkgewotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXhj
ZXB0aW9uQ29kZS5oIn0gPSAxOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywK
LSIgICAgaWYgKFVOTElLRUxZKCRwYXJhbWV0ZXJOYW1lIDwgMCkpIHtcbiIgLgotIiAgICAgICAg
ZWMgPSBJTkRFWF9TSVpFX0VSUjtcbiIgLgotIiAgICAgICAgZ290byBmYWlsO1xuIiAuCi0iICAg
IH1cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoVU5M
SUtFTFkoJHBhcmFtZXRlck5hbWUgPCAwKSkge1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBnb3RvIGZhaWw7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CiAgICAgICAgIH0K
IAogICAgICAgICAkcGFyYW1JbmRleCsrOwpAQCAtMjgyNSw3ICsyODQzLDggQEAgc3ViIEpTVmFs
dWVUb05hdGl2ZQogICAgIHJldHVybiAic3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS0+TnVtYmVy
VmFsdWUoKSkiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgImRvdWJsZSI7CiAgICAg
cmV0dXJuICIkdmFsdWUtPk51bWJlclZhbHVlKCkiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOwog
Ci0gICAgcmV0dXJuICJ0b0ludDMyKCR2YWx1ZSR7bWF5YmVPa1BhcmFtfSkiIGlmICR0eXBlIGVx
ICJ1bnNpZ25lZCBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiIG9yICR0eXBlIGVx
ICJsb25nIjsKKyAgICByZXR1cm4gInRvSW50MzIoJHZhbHVlJHttYXliZU9rUGFyYW19KSIgaWYg
JHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAidG9VSW50MzIoJHZhbHVlJHttYXliZU9rUGFy
YW19KSIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBz
aG9ydCI7CiAgICAgcmV0dXJuICJ0b0ludDY0KCR2YWx1ZSkiIGlmICR0eXBlIGVxICJ1bnNpZ25l
ZCBsb25nIGxvbmciIG9yICR0eXBlIGVxICJsb25nIGxvbmciOwogICAgIHJldHVybiAic3RhdGlj
X2Nhc3Q8UmFuZ2U6OkNvbXBhcmVIb3c+KCR2YWx1ZS0+SW50MzJWYWx1ZSgpKSIgaWYgJHR5cGUg
ZXEgIkNvbXBhcmVIb3ciOwogICAgIHJldHVybiAic3RhdGljX2Nhc3Q8U1ZHUGFpbnQ6OlNWR1Bh
aW50VHlwZT4oJHZhbHVlLT5Ub0ludDMyKCktPkludDMyVmFsdWUoKSkiIGlmICR0eXBlIGVxICJT
VkdQYWludFR5cGUiOwpAQCAtMjk1NSw3ICsyOTc0LDcgQEAgc3ViIFJlcXVpcmVzQ3VzdG9tU2ln
bmF0dXJlCiAgICAgfQogCiAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+
cGFyYW1ldGVyc30pIHsKLSAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJPcHRpb25hbCJ9KSB7CisgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiT3B0aW9uYWwifSB8fCAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2FsbGJhY2sifSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2Fs
bGJhY2suY3BwCShyZXZpc2lvbiA2NDk3NikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDEz
IEBAIEpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFjayhKU09iamVjdCoKIAogSlNUZXN0Q2Fs
bGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCiB7Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAvLyBXaGVuIHRoZSBjb250ZXh0
IGlzIGRlc3Ryb3llZCwgYWxsIHRhc2tzIHdpdGggYSByZWZlcmVuY2UgdG8gYSBjYWxsYmFjawor
ICAgIC8vIHNob3VsZCBiZSBkZWxldGVkLiBTbyBpZiB0aGUgY29udGV4dCBpcyBOVUxMLCB3ZSBh
cmUgb24gdGhlIGNvbnRleHQgdGhyZWFkLgorICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSkKICAgICAgICAgZGVsZXRlIG1fZGF0YTsKICAgICBlbHNlCi0gICAg
ICAgIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9z
dFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpOworICAgICAgICBj
b250ZXh0LT5wb3N0VGFzayhEZWxldGVDYWxsYmFja0RhdGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7
CiAjaWZuZGVmIE5ERUJVRwogICAgIG1fZGF0YSA9IDA7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gNjQ5
NzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQktleS5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIkpTVGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCkBAIC03OTQs
OCArNzk1LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpbnQgaW50QXJnID0gZXhlYy0+YXJndW1lbnQoMCku
dG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgY29uc3QgU3RyaW5nJiBz
dHJBcmcgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqKiBvYmpBcmcgPSB0b1Rlc3RPYmoo
ZXhlYy0+YXJndW1lbnQoMikpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+dm9p
ZE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBvYmpBcmcpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC04MjIsOCArODI5LDE0IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
ICAgICBpbnQgaW50QXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcgPSB1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBUZXN0T2JqKiBvYmpBcmcgPSB0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMikpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIGltcC0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIG9iakFyZykp
OwpAQCAtODUxLDggKzg2NCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2Jq
Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaW50IGludEFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGNvbnN0
IFN0cmluZyYgc3RyQXJnID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnID0g
dG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKIAog
ICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm9iak1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJn
LCBvYmpBcmcpKSk7CkBAIC04NjksNyArODg4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBjb25zdCBT
dHJpbmcmIHN0ckFyZyA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IHRv
VGVzdE9iaihleGVjLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAKICAg
ICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIoaW1wLT5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKHN0ckFyZywg
b2JqQXJnKSkpOwpAQCAtODg3LDcgKzkxMCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
U3ludGF4RXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnID0gdXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgVGVzdE9iaiogb2JqQXJnID0gdG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm1ldGhvZFRo
YXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVjKSkpOwpAQCAtOTAz
LDYgKzkzMCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
ZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+c2VyaWFsaXpl
ZFZhbHVlKHNlcmlhbGl6ZWRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC05MTYsNiArOTQ1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRp
Y19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaW1wLT5pZGJLZXkoa2V5KTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtOTYzLDYgKzk5NCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBTY3JpcHRDYWxsU3RhY2sgY2FsbFN0YWNrKGV4ZWMsIDEpOwogICAgIGxvZyog
aW50QXJnID0gdG9sb2coZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIGltcC0+Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbihpbnRBcmcsICZjYWxsU3RhY2ssIGVj
KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtMTAyMyw2ICsxMDU2LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmICghZHluYW1p
Y0ZyYW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGludCBpbnRBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZEFyZyhkeW5hbWlj
RnJhbWUsIGludEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTEwMzksMTQgKzEwNzQsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmICghZHluYW1pY0ZyYW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGludCBpbnRBcmcgPSBleGVjLT5hcmd1bWVu
dCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGludCBhcmdz
Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKGFyZ3NDb3VudCA8IDIpIHsK
KyAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKICAgICAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1l
QW5kT3B0aW9uYWxBcmcoZHluYW1pY0ZyYW1lLCBpbnRBcmcpOwogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAgIGludCBvcHRpb25hbEFy
ZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9uYWxBcmcoZHluYW1pY0ZyYW1l
LCBpbnRBcmcsIG9wdGlvbmFsQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMTA2Myw2ICsxMTAyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmICghZHluYW1pY0ZyYW1lKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGludCBpbnRBcmcgPSBleGVjLT5h
cmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlt
cC0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBw
cm9jZXNzaW5nVXNlckdlc3R1cmUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC0xMDc5LDE0ICsxMTIwLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoIWR5bmFtaWNGcmFtZSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbnQgaW50QXJnID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwotICAgIGlmIChhcmdz
Q291bnQgPCAyKSB7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAxKSB7CiAgICAgICAgIGltcC0+d2l0
aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRChkeW5hbWljRnJhbWUsIGludEFyZyk7CiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAg
ICAgaW50IG9wdGlvbmFsQXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2Vz
dHVyZUFTQUQoZHluYW1pY0ZyYW1lLCBpbnRBcmcsIG9wdGlvbmFsQXJnLCBwcm9jZXNzaW5nVXNl
ckdlc3R1cmUoZXhlYykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC0xMTc0LDEyICsxMjE5LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKIAogICAgIGludCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENv
dW50KCk7Ci0gICAgaWYgKGFyZ3NDb3VudCA8IDEpIHsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDAp
IHsKICAgICAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcoKTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICBpbnQgb3B0ID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICBpbXAtPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMTkzLDE0ICsxMjQwLDE4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
ICAgICBpbnQgbm9uT3B0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3Vu
dCgpOwotICAgIGlmIChhcmdzQ291bnQgPCAyKSB7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAxKSB7
CiAgICAgICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9u
T3B0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICB9CiAKICAgICBpbnQgb3B0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnKG5vbk9wdCwgb3B0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtMTIxNCwxNSArMTI2NSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaW50IG5v
bk9wdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBp
ZiAoYXJnc0NvdW50IDwgMikgeworICAgIGlmIChhcmdzQ291bnQgPD0gMSkgewogICAgICAgICBp
bXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQpOwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAog
ICAgIGludCBvcHQxID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW50IG9wdDIgPSBleGVjLT5hcmd1bWVudCgyKS50b0ludDMyKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEyMzcsNyArMTI5NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBUZXN0T2JqKiBpbXAg
PSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDw9IDAgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
IHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxi
YWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKIApAQCAtMTI1Myw5ICsxMzEwLDExIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsK
ICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKICAgICBpbnQgbm9uQ2FsbGJhY2sgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDw9IDEgfHwgIWV4ZWMtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpIHsKICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgfQogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKTsKIApAQCAtMTI3MCwxOCArMTMyOSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCi0gICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDwgMSkgewotICAgICAgICBpbXAt
Pm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKCk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotCi0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8PSAwIHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOwor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwICYmICFleGVjLT5hcmd1bWVudCgwKS5p
c051bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNr
ID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICB9Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFj
az4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3Vt
ZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgaW1wLT5tZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhjYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEyOTUsNyArMTM1MCwxMSBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1RlCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAg
ICAgVGVzdE9iaiogb2JqQXJnID0gdG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcgPSB1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcsIHN0ckFyZyk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEzMDksMTQgKzEzNjgsMTgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZQogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IHRvVGVzdE9iaihleGVjLT5hcmd1bWVu
dCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDwgMikgeworICAgIGlmIChhcmdz
Q291bnQgPD0gMSkgewogICAgICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnKTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAg
ICBpbnQgaW50QXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBpbnRBcmcp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMzMwLDYg
KzEzOTMsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1RlCiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChzdHJBcmcpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMzQzLDYgKzE0MDgsOCBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1RlCiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CiAgICAgaW50IGludEFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKGludEFyZyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAkocmV2aXNpb24g
NjQ5NzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0
YWNrLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOElzb2xh
dGVkQ29udGV4dC5oIgpAQCAtNTU2LDkgKzU1Nyw5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdm9pZE1ldGhvZFcKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnZvaWRNZXRo
b2RXaXRoQXJncyIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7Ci0gICAgaW50IGludEFyZyA9IHRvSW50MzIoYXJnc1swXSk7Ci0gICAgVjhQ
YXJhbWV0ZXI8PiBzdHJBcmcgPSBhcmdzWzFdOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IFY4VGVz
dE9iajo6SGFzSW5zdGFuY2UoYXJnc1syXSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpIDogMDsKKyAgICBFWENFUFRJT05fQkxPQ0so
aW50LCBpbnRBcmcsIHRvSW50MzIoYXJnc1swXSkpOworICAgIFNUUklOR19UT19WOFBBUkFNRVRF
Ul9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3RyQXJnLCBhcmdzWzFdKTsKKyAgICBF
WENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShh
cmdzWzJdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzJdKSkgOiAwKTsKICAgICBpbXAtPnZvaWRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0
ckFyZywgb2JqQXJnKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CkBA
IC01NzQsOSArNTc1LDkgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRNZXRob2RX
aQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW50TWV0aG9kV2l0aEFyZ3MiKTsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAg
IGludCBpbnRBcmcgPSB0b0ludDMyKGFyZ3NbMF0pOwotICAgIFY4UGFyYW1ldGVyPD4gc3RyQXJn
ID0gYXJnc1sxXTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNl
KGFyZ3NbMl0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGFyZ3NbMl0pKSA6IDA7CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0lu
dDMyKGFyZ3NbMF0pKTsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NL
KFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgYXJnc1sxXSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKFRl
c3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoYXJnc1syXSkgPyBWOFRlc3RP
Ymo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpIDogMCk7
CiAgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5pbnRNZXRob2RXaXRoQXJncyhpbnRB
cmcsIHN0ckFyZywgb2JqQXJnKSk7CiB9CiAKQEAgLTU5MSw5ICs1OTIsOSBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG9iak1ldGhvZFdpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai5vYmpNZXRob2RXaXRoQXJncyIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW50IGludEFyZyA9IHRvSW50MzIoYXJnc1sw
XSk7Ci0gICAgVjhQYXJhbWV0ZXI8PiBzdHJBcmcgPSBhcmdzWzFdOwotICAgIFRlc3RPYmoqIG9i
akFyZyA9IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoYXJnc1syXSkgPyBWOFRlc3RPYmo6OnRvTmF0
aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpIDogMDsKKyAgICBFWENF
UFRJT05fQkxPQ0soaW50LCBpbnRBcmcsIHRvSW50MzIoYXJnc1swXSkpOworICAgIFNUUklOR19U
T19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3RyQXJnLCBhcmdz
WzFdKTsKKyAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpI
YXNJbnN0YW5jZShhcmdzWzJdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChhcmdzWzJdKSkgOiAwKTsKICAgICByZXR1cm4gdG9WOChpbXAtPm9iak1l
dGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBvYmpBcmcpKTsKIH0KIApAQCAtNjAzLDggKzYw
NCw4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kVGhhdFIKICAgICBpZiAo
YXJncy5MZW5ndGgoKSA8IDIpCiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OwotICAgIFY4UGFyYW1ldGVyPD4gc3RyQXJnID0gYXJnc1swXTsKLSAgICBUZXN0T2JqKiBvYmpB
cmcgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMV0pID8gVjhUZXN0T2JqOjp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pKSA6IDA7CisgICAgU1RSSU5H
X1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBzdHJBcmcsIGFy
Z3NbMF0pOworICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6
Okhhc0luc3RhbmNlKGFyZ3NbMV0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pKSA6IDApOwogICAgIHJldHVybiB0b1Y4KGltcC0+bWV0
aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhzdHJBcmcsIG9iakFyZykpOwogfQogCkBAIC02MTYsOCAr
NjE3LDggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RUaGF0UgogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgewotICAgIFY4UGFyYW1ldGVyPD4gc3RyQXJnID0gYXJn
c1swXTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3Nb
MV0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
Z3NbMV0pKSA6IDA7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhW
OFBhcmFtZXRlcjw+LCBzdHJBcmcsIGFyZ3NbMF0pOworICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0
T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMV0pID8gVjhUZXN0T2Jq
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pKSA6IDApOwog
ICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQog
ICAgICAgICBnb3RvIGZhaWw7CkBAIC02NDQsNyArNjQ1LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBpZGJLZXlDYWxsYgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaWRi
S2V5Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoYXJn
c1swXSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKFJlZlB0cjxJREJLZXk+LCBrZXksIGNyZWF0ZUlE
QktleUZyb21WYWx1ZShhcmdzWzBdKSk7CiAgICAgaW1wLT5pZGJLZXkoa2V5KTsKICAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CkBAIC02NzQsNyArNjc1LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXN0b21BcmdzQQogICAgIE93blB0cjxTY3JpcHRDYWxs
U3RhY2s+IGNhbGxTdGFjayhTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZShhcmdzLCAxKSk7CiAgICAg
aWYgKCFjYWxsU3RhY2spCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgbG9n
KiBpbnRBcmcgPSBWOGxvZzo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyBWOGxvZzo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIEVYQ0VQVElP
Tl9CTE9DSyhsb2cqLCBpbnRBcmcsIFY4bG9nOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4bG9n
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDApOwog
ICAgIGltcC0+Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbihpbnRBcmcsIGNhbGxTdGFjay5nZXQoKSwg
ZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTcyMiw3
ICs3MjMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhEeW5hbWljCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoRHluYW1pY0ZyYW1lQW5kQXJnIik7CiAgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBp
bnQgaW50QXJnID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICBFWENFUFRJT05fQkxPQ0soaW50LCBp
bnRBcmcsIHRvSW50MzIoYXJnc1swXSkpOwogICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUgPSBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKICAgICBpZiAoIWVudGVyZWRG
cmFtZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTczNCw3ICs3MzUsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhEeW5hbWljCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai53aXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9uYWxBcmciKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIGlu
dCBpbnRBcmcgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGlu
dEFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkgewog
ICAgICAgICBGcmFtZSogZW50ZXJlZEZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVu
dGVyZWRDb250ZXh0KCk7CiAgICAgICAgIGlmICghZW50ZXJlZEZyYW1lKQpAQCAtNzQyLDcgKzc0
Myw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aER5bmFtaWMKICAgICAgICAg
aW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9uYWxBcmcoZW50ZXJlZEZyYW1lLCBpbnRBcmcp
OwogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAgICAgfQotICAgIGlu
dCBvcHRpb25hbEFyZyA9IHRvSW50MzIoYXJnc1sxXSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGlu
dCwgb3B0aW9uYWxBcmcsIHRvSW50MzIoYXJnc1sxXSkpOwogICAgIEZyYW1lKiBlbnRlcmVkRnJh
bWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKICAgICBpZiAo
IWVudGVyZWRGcmFtZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTc1NCw3
ICs3NTUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhEeW5hbWljCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmUi
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OwotICAgIGludCBpbnRBcmcgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIEVYQ0VQVElPTl9CTE9D
SyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgRnJhbWUqIGVudGVyZWRGcmFt
ZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwogICAgIGlmICgh
ZW50ZXJlZEZyYW1lKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtNzY2LDcg
Kzc2Nyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aER5bmFtaWMKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFT
QUQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIGludCBpbnRBcmcgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIEVYQ0VQVElPTl9C
TE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMSkgewogICAgICAgICBGcmFtZSogZW50ZXJlZEZyYW1lID0gVjhQcm94eTo6cmV0cmll
dmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgICAgIGlmICghZW50ZXJlZEZyYW1lKQpA
QCAtNzc0LDcgKzc3NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aER5bmFt
aWMKICAgICAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKGVudGVy
ZWRGcmFtZSwgaW50QXJnLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7CiAgICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9Ci0gICAgaW50IG9wdGlvbmFsQXJnID0g
dG9JbnQzMihhcmdzWzFdKTsKKyAgICBFWENFUFRJT05fQkxPQ0soaW50LCBvcHRpb25hbEFyZywg
dG9JbnQzMihhcmdzWzFdKSk7CiAgICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJl
dHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwogICAgIGlmICghZW50ZXJlZEZyYW1lKQog
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtODYxLDcgKzg2Miw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE8KICAgICAgICAgaW1wLT5tZXRob2RX
aXRoT3B0aW9uYWxBcmcoKTsKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
OwogICAgIH0KLSAgICBpbnQgb3B0ID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICBFWENFUFRJT05f
QkxPQ0soaW50LCBvcHQsIHRvSW50MzIoYXJnc1swXSkpOwogICAgIGltcC0+bWV0aG9kV2l0aE9w
dGlvbmFsQXJnKG9wdCk7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQpA
QCAtODcwLDEyICs4NzEsMTIgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RX
aXRoTgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kT3B0aW9uYWxBcmciKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIGludCBub25PcHQgPSB0b0ludDMyKGFyZ3NbMF0pOwor
ICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIG5vbk9wdCwgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkgewogICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5vbk9wdCk7CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKICAgICB9Ci0gICAgaW50IG9wdCA9IHRvSW50MzIoYXJnc1sxXSk7Cisg
ICAgRVhDRVBUSU9OX0JMT0NLKGludCwgb3B0LCB0b0ludDMyKGFyZ3NbMV0pKTsKICAgICBpbXAt
Pm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5vbk9wdCwgb3B0KTsKICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CkBAIC04ODQsMTMgKzg4NSwxMyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFy
Z3MiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIGludCBub25PcHQgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIEVYQ0VQVElPTl9C
TE9DSyhpbnQsIG5vbk9wdCwgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMSkgewogICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09w
dGlvbmFsQXJncyhub25PcHQpOwogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CiAgICAgfQotICAgIGludCBvcHQxID0gdG9JbnQzMihhcmdzWzFdKTsKLSAgICBpbnQgb3B0
MiA9IHRvSW50MzIoYXJnc1syXSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgb3B0MSwgdG9J
bnQzMihhcmdzWzFdKSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgb3B0MiwgdG9JbnQzMihh
cmdzWzJdKSk7CiAgICAgaW1wLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25h
bEFyZ3Mobm9uT3B0LCBvcHQxLCBvcHQyKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7CiB9CkBAIC05MTAsNyArOTExLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBtZXRob2RXaXRoTgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aE5v
bkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIGludCBub25DYWxsYmFjayA9IHRvSW50
MzIoYXJnc1swXSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgbm9uQ2FsbGJhY2ssIHRvSW50
MzIoYXJnc1swXSkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEgfHwgIWFyZ3NbMV0tPklz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsK
ICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVh
dGUoYXJnc1sxXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKQEAgLTkyMiwxMyArOTIz
LDEyIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEMKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
LSAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgIGltcC0+bWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmcoKTsKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOworICAgIGlmIChhcmdz
Lkxlbmd0aCgpID4gMCAmJiAhYXJnc1swXS0+SXNOdWxsKCkgJiYgIWFyZ3NbMF0tPklzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICBjYWxsYmFjayA9
IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKICAgICB9Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCB8fCAhYXJnc1swXS0+SXNP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwot
ICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0
ZShhcmdzWzBdLCBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGltcC0+bWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoY2FsbGJhY2spOwogICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTsKIH0KQEAgLTkzNyw4ICs5MzcsOCBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5v
dmVybG9hZGVkTWV0aG9kMSIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gVjhUZXN0T2JqOjpIYXNJ
bnN0YW5jZShhcmdzWzBdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwotICAgIFY4UGFyYW1ldGVyPD4gc3RyQXJnID0gYXJn
c1sxXTsKKyAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpI
YXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJf
RVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgYXJnc1sxXSk7CiAgICAgaW1w
LT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgc3RyQXJnKTsKICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CiB9CkBAIC05NDcsMTIgKzk0NywxMiBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5v
dmVybG9hZGVkTWV0aG9kMiIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gVjhUZXN0T2JqOjpIYXNJ
bnN0YW5jZShhcmdzWzBdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwg
b2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhUZXN0T2JqOjp0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDApOwogICAgIGlm
IChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKICAgICAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9i
akFyZyk7CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9Ci0g
ICAgaW50IGludEFyZyA9IHRvSW50MzIoYXJnc1sxXSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGlu
dCwgaW50QXJnLCB0b0ludDMyKGFyZ3NbMV0pKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qo
b2JqQXJnLCBpbnRBcmcpOwogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0K
QEAgLTk2MSw3ICs5NjEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2Fk
ZWRNCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVybG9hZGVkTWV0aG9kMyIpOwog
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0g
ICAgVjhQYXJhbWV0ZXI8PiBzdHJBcmcgPSBhcmdzWzBdOworICAgIFNUUklOR19UT19WOFBBUkFN
RVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3RyQXJnLCBhcmdzWzBdKTsKICAg
ICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7CiB9CkBAIC05NzAsNyArOTcwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBvdmVybG9hZGVkTQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoub3Zlcmxv
YWRlZE1ldGhvZDQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwotICAgIGludCBpbnRBcmcgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIEVY
Q0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaW1wLT5v
dmVybG9hZGVkTWV0aG9kKGludEFyZyk7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpOwogfQpAQCAtMTA4OCw2ICsxMDg4LDggQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFj
ayBUZXN0T2JqQ2FsbAogICAgIHsibWV0aG9kV2l0aE9wdGlvbmFsQXJnIiwgVGVzdE9iakludGVy
bmFsOjptZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmdDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNrfSwKKyAgICB7Im1ldGhv
ZFdpdGhDYWxsYmFja0FyZyIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aENhbGxiYWNrQXJn
Q2FsbGJhY2t9LAorICAgIHsibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmci
LCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJn
Q2FsbGJhY2t9LAogICAgIHsibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciLCBUZXN0
T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAog
ICAgIHsib3ZlcmxvYWRlZE1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhv
ZENhbGxiYWNrfSwKIH07CkBAIC0xMTYxLDE4ICsxMTYzLDYgQEAgc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYQogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25Bcmd2W2N1c3RvbUFyZ3NBbmRFeGNlcHRpb25Bcmdj
XSA9IHsgVjhsb2c6OkdldFJhd1RlbXBsYXRlKCkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWdu
YXR1cmU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpO
ZXcoZGVzYywgY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkFyZ2MsIGN1c3RvbUFyZ3NBbmRFeGNlcHRp
b25Bcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VzdG9tQXJnc0FuZEV4
Y2VwdGlvbiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6Y3Vz
dG9tQXJnc0FuZEV4Y2VwdGlvbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgY3Vz
dG9tQXJnc0FuZEV4Y2VwdGlvblNpZ25hdHVyZSkpOwotCi0gICAgLy8gQ3VzdG9tIFNpZ25hdHVy
ZSAnbWV0aG9kV2l0aENhbGxiYWNrQXJnJwotICAgIGNvbnN0IGludCBtZXRob2RXaXRoQ2FsbGJh
Y2tBcmdBcmdjID0gMTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRo
b2RXaXRoQ2FsbGJhY2tBcmdBcmd2W21ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ2NdID0geyBWOFRl
c3RDYWxsYmFjazo6R2V0UmF3VGVtcGxhdGUoKSB9OwotICAgIHY4OjpIYW5kbGU8djg6OlNpZ25h
dHVyZT4gbWV0aG9kV2l0aENhbGxiYWNrQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3
KGRlc2MsIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ2MsIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0Fy
Z3YpOwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJtZXRob2RXaXRoQ2FsbGJhY2tB
cmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdp
dGhDYWxsYmFja0FyZ0NhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9kV2l0
aENhbGxiYWNrQXJnU2lnbmF0dXJlKSk7Ci0KLSAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZycKLSAgICBjb25zdCBpbnQgbWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmdjID0gMjsKLSAgICB2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZ0FyZ3ZbbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmdjXSA9IHsg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0Q2FsbGJhY2s6OkdldFJh
d1RlbXBsYXRlKCkgfTsKLSAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3
KGRlc2MsIG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQXJnYywgbWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4
OjpTdHJpbmc6Ok5ldygibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKSwg
djg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
LCBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ1NpZ25hdHVyZSkpOwogICAg
IGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKGRlc2MsIHByb3RvLCBUZXN0T2JqQ29uc3RzLCBzaXpl
b2YoVGVzdE9iakNvbnN0cykgLyBzaXplb2YoKlRlc3RPYmpDb25zdHMpKTsKIAogICAgIC8vIEN1
c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZp
c2lvbiA2NDk3NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxOCw3ICsyMTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdGVtcGxh
dGUgPFY4UGFyYW1ldGVyTW9kZSBNT0RFID0gRGVmYXVsdE1vZGU+CiAgICAgY2xhc3MgVjhQYXJh
bWV0ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgVjhQYXJhbWV0ZXIgKHY4OjpMb2NhbDx2ODo6
VmFsdWU+IG9iamVjdCkgOm1fdjhPYmplY3Qob2JqZWN0KSB7IH0KKyAgICAgICAgVjhQYXJhbWV0
ZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0ID0gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKSkg
OiBtX3Y4T2JqZWN0KG9iamVjdCkgeyB9CiAgICAgICAgIG9wZXJhdG9yIFN0cmluZygpOwogICAg
ICAgICBvcGVyYXRvciBBdG9taWNTdHJpbmcoKTsKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCaW5kaW5nTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCaW5kaW5nTWFjcm9zLmgJKHJldmlzaW9uIDY0OTc2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCaW5kaW5nTWFjcm9zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDEyICszNywxMyBAQAogICAgICAgICAgICAgcmV0dXJuIGJsb2NrLlJl
VGhyb3coKTsgICAgICAgXAogICAgIH0KIAotI2RlZmluZSBUT19XRUJDT1JFX1NUUklOR19FWENF
UFRJT05fQkxPQ0sodmFyLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFN0cmlu
ZyB2YXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB2ODo6VHJ5Q2F0Y2ggYmxv
Y2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nID0gKHZhbHVlKS0+VG9TdHJpbmco
KTsgICAgICAgICAgICAgXAotICAgICAgICBpZiAoYmxvY2suSGFzQ2F1Z2h0KCkpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJu
IGJsb2NrLlJlVGhyb3coKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICB2YXIgPSB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJpbmc+KHY4U3RyaW5n
LCBEb05vdEV4dGVybmFsaXplKTsgXAorI2RlZmluZSBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhD
RVBUSU9OX0JMT0NLKHR5cGUsIHZhciwgdmFsdWUpIFwKKyAgICB0eXBlIHZhcjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlID0gKHZhbHVlKTsgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgdjg6OlRyeUNhdGNoIGJsb2NrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICh2YWx1ZSktPlRvU3RyaW5nKCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoYmxvY2suSGFzQ2F1Z2h0KCkp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBi
bG9jay5SZVRocm93KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHZh
ciA9IHY4VmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKIAogI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1
ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBAIC01NSw4ICs1NCw2IEBACiAjaW5j
bHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNp
bmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJWOERhdGFiYXNlLmgi
Ci0jaW5jbHVkZSAiVjhEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhHQ0ZvckNvbnRl
eHREaXNwb3NlLmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRl
ICJWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oIgpAQCAtNzkwLDM5ICs3ODcsNiBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6OnNldEluCiAgICAgcmV0dXJuIFdpbmRv
d1NldFRpbWVvdXRJbXBsKGFyZ3MsIGZhbHNlKTsKIH0KIAotI2lmIEVOQUJMRShEQVRBQkFTRSkK
LXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkRhdGFiYXNlQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5k
b3cub3BlbkRhdGFiYXNlIik7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCA0KQotICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihTWU5UQVhfRVJSKTsKLQotICAgIFRPX1dFQkNPUkVfU1RSSU5HX0VY
Q0VQVElPTl9CTE9DSyhuYW1lLCBhcmdzWzBdKTsKLSAgICBUT19XRUJDT1JFX1NUUklOR19FWENF
UFRJT05fQkxPQ0sodmVyc2lvbiwgYXJnc1sxXSk7Ci0gICAgVE9fV0VCQ09SRV9TVFJJTkdfRVhD
RVBUSU9OX0JMT0NLKGRpc3BsYXlOYW1lLCBhcmdzWzJdKTsKLSAgICBFWENFUFRJT05fQkxPQ0so
dW5zaWduZWQgbG9uZywgZXN0aW1hdGVkU2l6ZSwgYXJnc1szXS0+VWludDMyVmFsdWUoKSk7Ci0K
LSAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV2luZG93Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKLSAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdT
dGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQotICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1
KSB7Ci0gICAgICAgIGlmICghYXJnc1s0XS0+SXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAgICBjcmVhdGlvbkNhbGxi
YWNrID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHRvVjgoaW1wLT5vcGVuRGF0YWJhc2UobmFtZSwgdmVy
c2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2sucmVsZWFz
ZSgpLCBlYykpOwotCi0gICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKLQogYm9vbCBWOERPTVdp
bmRvdzo6bmFtZWRTZWN1cml0eUNoZWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob3N0LCB2ODo6
TG9jYWw8djg6OlZhbHVlPiBrZXksIHY4OjpBY2Nlc3NUeXBlIHR5cGUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+KQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93ID0gVjhET01XcmFw
cGVyOjpsb29rdXBET01XcmFwcGVyKFY4RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCBob3N0KTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20u
Y3BwCShyZXZpc2lvbiA2NDk3NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0
YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIlY4RGF0YWJhc2Uu
aCIKLQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgot
I2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgotI2lu
Y2x1ZGUgIlY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgotI2luY2x1ZGUgIlY4U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCIK
LSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OmNoYW5nZVZlcnNpb25DYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLmNoYW5nZVZl
cnNpb24oKSIpOwotCi0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihTWU5UQVhfRVJSKTsKLQotICAgIFRPX1dFQkNPUkVfU1RSSU5HX0VYQ0VQVElP
Tl9CTE9DSyhvbGRWZXJzaW9uLCBhcmdzWzBdKTsKLSAgICBUT19XRUJDT1JFX1NUUklOR19FWENF
UFRJT05fQkxPQ0sobmV3VmVyc2lvbiwgYXJnc1sxXSk7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJh
c2UgPSBWOERhdGFiYXNlOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4gY2FsbGJhY2s7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyICYmICFpc1VuZGVmaW5l
ZE9yTnVsbChhcmdzWzJdKSkgewotICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0KLSAgICAg
ICAgY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8VjhTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAzICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzNdKSkgewotICAgICAgICBpZiAoIWFyZ3Nb
M10tPklzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01B
VENIX0VSUik7Ci0KLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
fQotCi0gICAgUmVmUHRyPFY4Q3VzdG9tVm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2s7Ci0g
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiA0ICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzRdKSkg
ewotICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0KLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNr
ID0gVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKLSAgICB9Ci0KLSAgICBkYXRhYmFzZS0+Y2hhbmdlVmVyc2lvbihvbGRWZXJzaW9u
LCBuZXdWZXJzaW9uLCBjYWxsYmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgp
LCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpKTsKLQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVHJhbnNhY3Rpb24o
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgYm9vbCByZWFkT25seSkKLXsKLSAgICBpZiAoIWFy
Z3MuTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFNZTlRBWF9FUlIpOwotCi0g
ICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihU
WVBFX01JU01BVENIX0VSUik7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBWOERhdGFiYXNl
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0g
ICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0g
VjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7Ci0KLSAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2s7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxICYmICFpc1VuZGVmaW5lZE9y
TnVsbChhcmdzWzFdKSkgewotICAgICAgICBpZiAoIWFyZ3NbMV0tPklzT2JqZWN0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0KLSAgICAgICAg
ZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJn
c1sxXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFY4Q3Vz
dG9tVm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2s7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAyICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzJdKSkgewotICAgICAgICBpZiAoIWFyZ3Nb
Ml0tPklzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01B
VENIX0VSUik7Ci0KLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrID0gVjhDdXN0b21Wb2lkQ2FsbGJh
Y2s6OmNyZWF0ZShhcmdzWzJdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICB9Ci0KLSAg
ICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNr
LnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgcmVhZE9ubHkpOwotICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFi
YXNlOjp0cmFuc2FjdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0g
ICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2UudHJhbnNhY3Rpb24oKSIpOwotICAgIHJldHVybiBj
cmVhdGVUcmFuc2FjdGlvbihhcmdzLCBmYWxzZSk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOERhdGFiYXNlOjpyZWFkVHJhbnNhY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnJlYWRUcmFuc2FjdGlvbigp
Iik7Ci0gICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGFyZ3MsIHRydWUpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAkocmV2aXNpb24gNjQ5NzYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiVjhEYXRhYmFzZVN5bmMuaCIKLQotI2luY2x1
ZGUgIkRhdGFiYXNlU3luYy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKLSNpbmNsdWRlICJW
OFByb3h5LmgiCi0jaW5jbHVkZSAiVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFiYXNlU3lu
Yzo6Y2hhbmdlVmVyc2lvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0g
ICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2VTeW5jLmNoYW5nZVZlcnNpb24oKSIpOwotCi0gICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihTWU5UQVhf
RVJSKTsKLQotICAgIFRPX1dFQkNPUkVfU1RSSU5HX0VYQ0VQVElPTl9CTE9DSyhvbGRWZXJzaW9u
LCBhcmdzWzBdKTsKLSAgICBUT19XRUJDT1JFX1NUUklOR19FWENFUFRJT05fQkxPQ0sobmV3VmVy
c2lvbiwgYXJnc1sxXSk7Ci0KLSAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlID0gVjhEYXRhYmFz
ZVN5bmM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLSAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2s7Ci0g
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzJdKSkg
ewotICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0KLSAgICAgICAgY2FsbGJhY2sgPSBWOFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGF0YWJh
c2UtPmNoYW5nZVZlcnNpb24ob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgY2FsbGJhY2sucmVsZWFz
ZSgpLCBlYyk7Ci0gICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKLQotICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3Jl
YXRlVHJhbnNhY3Rpb24oY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgYm9vbCByZWFkT25seSkK
LXsKLSAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFNZ
TlRBWF9FUlIpOwotCi0gICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0KLSAgICBEYXRhYmFzZVN5bmMqIGRh
dGFiYXNlID0gVjhEYXRhYmFzZVN5bmM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJn
c1swXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCByZWFkT25s
eSwgZWMpOwotICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0KLSAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFzZVN5
bmM6OnRyYW5zYWN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZVN5bmMudHJhbnNhY3Rpb24oKSIpOwotICAgIHJldHVy
biBjcmVhdGVUcmFuc2FjdGlvbihhcmdzLCBmYWxzZSk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOERhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZVN5bmMucmVhZFRy
YW5zYWN0aW9uKCkiKTsKLSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oYXJncywgdHJ1ZSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gNjQ5NzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5z
YWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhTUUxUcmFuc2FjdGlvbjo6CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PT0gMCkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoU1lOVEFYX0VSUik7CiAKLSAgICBUT19X
RUJDT1JFX1NUUklOR19FWENFUFRJT05fQkxPQ0soc3RhdGVtZW50LCBhcmdzWzBdKTsKKyAgICBT
VFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0YXRl
bWVudCwgYXJnc1swXSk7CiAKICAgICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKIApAQCAt
ODIsNyArODIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTUUxUcmFuc2FjdGlvbjo6CiAg
ICAgICAgICAgICAgICAgRVhDRVBUSU9OX0JMT0NLKGRvdWJsZSwgc3FsVmFsdWUsIHZhbHVlLT5O
dW1iZXJWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKFNRTFZhbHVl
KHNxbFZhbHVlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRPX1dF
QkNPUkVfU1RSSU5HX0VYQ0VQVElPTl9CTE9DSyhzcWxWYWx1ZSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8
Piwgc3FsVmFsdWUsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKFNR
TFZhbHVlKHNxbFZhbHVlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3lu
Y0N1c3RvbS5jcHAJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFNRTFRyYW5zYWN0aW9uU3kKICAgICBp
ZiAoIWFyZ3MuTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFNZTlRBWF9FUlIp
OwogCi0gICAgVE9fV0VCQ09SRV9TVFJJTkdfRVhDRVBUSU9OX0JMT0NLKHN0YXRlbWVudCwgYXJn
c1swXSk7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFt
ZXRlcjw+LCBzdGF0ZW1lbnQsIGFyZ3NbMF0pOwogCiAgICAgVmVjdG9yPFNRTFZhbHVlPiBzcWxW
YWx1ZXM7CiAKQEAgLTgyLDcgKzgyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1FMVHJh
bnNhY3Rpb25TeQogICAgICAgICAgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhkb3VibGUsIHNxbFZh
bHVlLCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFw
cGVuZChTUUxWYWx1ZShzcWxWYWx1ZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBUT19XRUJDT1JFX1NUUklOR19FWENFUFRJT05fQkxPQ0soc3FsVmFsdWUsIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NL
KFY4UGFyYW1ldGVyPD4sIHNxbFZhbHVlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgc3FsVmFs
dWVzLmFwcGVuZChTUUxWYWx1ZShzcWxWYWx1ZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29u
dGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIg
KzMzLDYgQEAKICNpZiBFTkFCTEUoV09SS0VSUykKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHQu
aCIKIAotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1
ZGUgIlY4RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJWOERhdGFiYXNlQ2FsbGJhY2suaCIKLSNpbmNs
dWRlICJWOERhdGFiYXNlU3luYy5oIgotI2VuZGlmCiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCkBA
IC0xNDMsNjYgKzEzNyw2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdvcmtlckNvbnRl
eHQKICAgICByZXR1cm4gZ2xvYmFsOwogfQogCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5WOFdvcmtlckNv
bnRleHQub3BlbkRhdGFiYXNlKCkiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDQpCi0gICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFNZTlRBWF9FUlIpOwotCi0gICAgVE9fV0VCQ09SRV9TVFJJ
TkdfRVhDRVBUSU9OX0JMT0NLKG5hbWUsIGFyZ3NbMF0pOwotICAgIFRPX1dFQkNPUkVfU1RSSU5H
X0VYQ0VQVElPTl9CTE9DSyh2ZXJzaW9uLCBhcmdzWzFdKTsKLSAgICBUT19XRUJDT1JFX1NUUklO
R19FWENFUFRJT05fQkxPQ0soZGlzcGxheU5hbWUsIGFyZ3NbMl0pOwotICAgIEVYQ0VQVElPTl9C
TE9DSyh1bnNpZ25lZCBsb25nLCBlc3RpbWF0ZWRTaXplLCBhcmdzWzNdLT5VaW50MzJWYWx1ZSgp
KTsKLQotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRleHQ6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAg
ICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsKLSAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghYXJnc1s0XS0+SXNPYmplY3QoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAg
ICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHRvVjgod29ya2VyQ29udGV4
dC0+b3BlbkRhdGFiYXNlKG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
LCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgZWMpKTsKLQotICAgIFY4UHJveHk6OnNldERP
TUV4Y2VwdGlvbihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luY0NhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVjhXb3JrZXJDb250ZXh0
Lm9wZW5EYXRhYmFzZVN5bmMoKSIpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgNCkKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoU1lOVEFYX0VSUik7Ci0KLSAgICBUT19XRUJDT1JFX1NUUklO
R19FWENFUFRJT05fQkxPQ0sobmFtZSwgYXJnc1swXSk7Ci0gICAgVE9fV0VCQ09SRV9TVFJJTkdf
RVhDRVBUSU9OX0JMT0NLKHZlcnNpb24sIGFyZ3NbMV0pOwotICAgIFRPX1dFQkNPUkVfU1RSSU5H
X0VYQ0VQVElPTl9CTE9DSyhkaXNwbGF5TmFtZSwgYXJnc1syXSk7Ci0gICAgRVhDRVBUSU9OX0JM
T0NLKHVuc2lnbmVkIGxvbmcsIGVzdGltYXRlZFNpemUsIGFyZ3NbM10tPlVpbnQzMlZhbHVlKCkp
OwotCi0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
IFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwotICAgIGlmIChhcmdz
Lkxlbmd0aCgpID49IDUpIHsKLSAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotCi0gICAgICAg
IGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gdG9WOCh3b3JrZXJDb250ZXh0
LT5vcGVuRGF0YWJhc2VTeW5jKG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRT
aXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgZWMpKTsKLQotICAgIFY4UHJveHk6OnNl
dERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKSW5kZXg6IFdl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsCShyZXZpc2lvbiA2NDk3NikKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZV0gRE9NQXBwbGljYXRpb25D
YWNoZSBhcHBsaWNhdGlvbkNhY2hlOwogI2VuZGlmICAgIAogI2lmIGRlZmluZWQoRU5BQkxFX0RB
VEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKLSAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWUsIEN1
c3RvbV0gRGF0YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJp
bmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIGluIERhdGFiYXNlQ2FsbGJhY2sgY3JlYXRpb25DYWxsYmFjaykKKyAgICAg
ICAgW0VuYWJsZWRBdFJ1bnRpbWUsIFJlcXVpcmVzQWxsQXJndW1lbnRzPVJhaXNlXSBEYXRhYmFz
ZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBp
biBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
aW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNr
KQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAjZW5kaWYKICNpZiBkZWZpbmVk
KEVOQUJMRV9ET01fU1RPUkFHRSkgJiYgRU5BQkxFX0RPTV9TVE9SQUdFCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZS5jcHAJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDggKzI3MCwxOCBAQCB2b2lkIERhdGFiYXNlOjpjaGFu
Z2VWZXJzaW9uKGNvbnN0IFN0cmluCiAgICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIH0K
IAotdm9pZCBEYXRhYmFzZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5KQordm9pZCBEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spCit7CisgICAgcnVuVHJh
bnNhY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgZmFsc2Up
OworfQorCit2b2lkIERhdGFiYXNlOjpyZWFkVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2spCit7CisgICAgcnVuVHJhbnNhY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ss
IHN1Y2Nlc3NDYWxsYmFjaywgdHJ1ZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OnJ1blRyYW5zYWN0
aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgYm9vbCByZWFkT25seSkKIHsKICAgICBtX3RyYW5zYWN0aW9uUXVldWUuYXBwZW5kKFNR
TFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nl
c3NDYWxsYmFjaywgMCwgcmVhZE9ubHkpKTsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNjQ5
NzYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
OCArNTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0Owog
ICAgIHZvaWQgY2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0
cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwKICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lk
IHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKLSAgICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpOwor
ICAgIHZvaWQgdHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICB2b2lkIHJlYWRUcmFuc2FjdGlvbihQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sp
OwogCiAgICAgLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKICAgICBWZWN0b3I8U3RyaW5nPiB0
YWJsZU5hbWVzKCk7CkBAIC05MCw2ICs5MCw4IEBAIHByaXZhdGU6CiAKICAgICBEYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24o
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+LAorICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSk7CiAKICAgICBib29s
IG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuaWRsCShyZXZpc2lvbiA2NDk3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgICAg
ICBOb1N0YXRpY1RhYmxlcwogICAgIF0gRGF0YWJhc2UgewogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHZlcnNpb247Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgY2hhbmdlVmVy
c2lvbihpbiBET01TdHJpbmcgb2xkVmVyc2lvbiwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGlu
IFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsK
LSAgICAgICAgW0N1c3RvbV0gdm9pZCB0cmFuc2FjdGlvbihpbiBTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFj
aywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgICAgIFtDdXN0b21dIHZv
aWQgcmVhZFRyYW5zYWN0aW9uKGluIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGlu
IFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgW1JlcXVpcmVzQWxsQXJndW1lbnRzPVJhaXNl
XSB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmlu
ZyBuZXdWZXJzaW9uLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrIGNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gVm9pZENhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgIFtSZXF1aXJlc0FsbEFyZ3VtZW50cz1SYWlz
ZV0gdm9pZCB0cmFuc2FjdGlvbihpbiBbQ2FsbGJhY2tdIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sg
Y2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjayBlcnJvckNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBWb2lkQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgW1JlcXVpcmVzQWxsQXJndW1lbnRzPVJhaXNlXSB2
b2lkIHJlYWRUcmFuc2FjdGlvbihpbiBbQ2FsbGJhY2tdIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sg
Y2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjayBlcnJvckNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBWb2lkQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrKTsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5j
LmNwcAkocmV2aXNpb24gNjQ5NzYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCwxNyBAQCB2b2lkIERhdGFiYXNlU3luYzo6
Y2hhbmdlVmVyc2lvbihjb25zdCBTCiAgICAgc2V0RXhwZWN0ZWRWZXJzaW9uKG5ld1ZlcnNpb24p
OwogfQogCi12b2lkIERhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRhYmFz
ZVN5bmM6OnJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiBjYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcnVuVHJhbnNhY3Rpb24o
Y2FsbGJhY2ssIHRydWUsIGVjKTsKK30KKwordm9pZCBEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0
aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29s
IHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VT
eW5jLmgJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFz
c1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY2hh
bmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVy
c2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2s+LCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0cmFu
c2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgcmVhZFRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFy
a0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHko
KTsKQEAgLTY0LDYgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBEYXRhYmFzZVN5bmMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgdm9pZCBydW5UcmFuc2Fj
dGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25s
eSwgRXhjZXB0aW9uQ29kZSYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlU3luYy5pZGwJKHJldmlzaW9uIDY0OTc2KQorKysgV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgbW9k
dWxlIHN0b3JhZ2UgewogICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gRGF0YWJhc2VTeW5j
IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwotICAgICAg
ICBbQ3VzdG9tXSB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGlu
IERPTVN0cmluZyBuZXdWZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayBjYWxs
YmFjayk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdHJhbnNhY3Rpb24oaW4gU1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2sgY2FsbGJhY2spOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlYWRUcmFu
c2FjdGlvbihpbiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayBjYWxsYmFjayk7CisgICAgICAg
IFtSZXF1aXJlc0FsbEFyZ3VtZW50cz1SYWlzZV0gdm9pZCBjaGFuZ2VWZXJzaW9uKGluIERPTVN0
cmluZyBvbGRWZXJzaW9uLCBpbiBET01TdHJpbmcgbmV3VmVyc2lvbiwgaW4gW0NhbGxiYWNrLCBP
cHRpb25hbF0gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgY2FsbGJhY2spIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICBbUmVxdWlyZXNBbGxBcmd1bWVudHM9UmFpc2VdIHZvaWQgdHJh
bnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayBjYWxsYmFj
aykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtSZXF1aXJlc0FsbEFyZ3VtZW50cz1S
YWlzZV0gdm9pZCByZWFkVHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjayBjYWxsYmFjaykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgfTsKIAogfQpJ
bmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24gNjQ5NzYpCisrKyBXZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUw
LDEwIEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBpbXBvcnRTY3Jp
cHRzKC8qW1ZhcmlhZGljXSBpbiBET01TdHJpbmcgdXJscyAqLyk7CiAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIFdvcmtlck5hdmlnYXRvciBuYXZpZ2F0b3I7CiAjaWYg
ZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQotICAgICAgICBbRW5h
YmxlZEF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5n
IG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGlu
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlv
bkNhbGxiYWNrKQorICAgICAgICBbRW5hYmxlZEF0UnVudGltZSwgUmVxdWlyZXNBbGxBcmd1bWVu
dHM9UmFpc2VdIERhdGFiYXNlIG9wZW5EYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9N
U3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBEYXRhYmFzZUNhbGxiYWNr
IGNyZWF0aW9uQ2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAg
ICAgICAgW0VuYWJsZWRBdFJ1bnRpbWUsIFJlcXVpcmVzQWxsQXJndW1lbnRzPVJhaXNlXSBEYXRh
YmFzZVN5bmMgb3BlbkRhdGFiYXNlU3luYyhpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5n
IHZlcnNpb24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBEYXRhYmFzZUNhbGxiYWNrIGNyZWF0
aW9uQ2FsbGJhY2spCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAg
W0VuYWJsZWRBdFJ1bnRpbWUsIEN1c3RvbV0gRGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMo
aW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlz
cGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJhc2VDYWxs
YmFjayBjcmVhdGlvbkNhbGxiYWNrKTsKICNlbmRpZgogCiAgICAgICAgIC8vIFRpbWVycwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjQ5NzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMC0wOC0wOSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1
bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENoYW5naW5nIHRoZSBleHBlY3RlZCBlcnJvciBtZXNzYWdlIGZvciBhIHRlc3Qu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzM4Mgor
CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3lu
Yy1leHBlY3RlZC50eHQ6CisKIDIwMTAtMDUtMjAgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NDk3NikK
KysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRz
LXN5bmMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogVGhpcyB0
ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlk
IHBhcmFtZXRlcnMuCi1QQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCi1QQVNTOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiBOb3QgZW5vdWdoIGFyZ3VtZW50cwor
UEFTUzogTm90IGVub3VnaCBhcmd1bWVudHMKIFBBU1M6IHVuZGVmaW5lZAogUEFTUzogdW5kZWZp
bmVkCiBQQVNTOiB1bmRlZmluZWQK
</data>
<flag name="review"
          id="52320"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="52321"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>