<?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>199838</bug_id>
          
          <creation_ts>2019-07-16 14:33:36 -0700</creation_ts>
          <short_desc>[WHLSL] Move WHLSL tests to their own folder</short_desc>
          <delta_ts>2019-07-17 12:38:04 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>rmorisset</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1553317</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-16 14:33:36 -0700</bug_when>
    <thetext>[WHLSL] Move WHLSL tests to their own folder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553318</commentid>
    <comment_count>1</comment_count>
      <attachid>374241</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-16 14:35:30 -0700</bug_when>
    <thetext>Created attachment 374241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553319</commentid>
    <comment_count>2</comment_count>
      <attachid>374241</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-16 14:37:11 -0700</bug_when>
    <thetext>Comment on attachment 374241
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553320</commentid>
    <comment_count>3</comment_count>
      <attachid>374241</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-16 14:44:21 -0700</bug_when>
    <thetext>Comment on attachment 374241
Patch

Rejecting attachment 374241 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 374241, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
whlsl/overload.html
patching file LayoutTests/webgpu/whlsl/override-subscript-expected.txt
patching file LayoutTests/webgpu/whlsl/override-subscript.html
patching file LayoutTests/webgpu/whlsl/plus-equals-expected.txt
patching file LayoutTests/webgpu/whlsl/plus-equals.html
patching file LayoutTests/webgpu/whlsl/pointer-spec-tests-expected.txt
patching file LayoutTests/webgpu/whlsl/pointer-spec-tests.html
patching file LayoutTests/webgpu/whlsl/postfix-prefix-expected.txt
patching file LayoutTests/webgpu/whlsl/postfix-prefix.html
patching file LayoutTests/webgpu/whlsl/read-modify-write-expected.txt
patching file LayoutTests/webgpu/whlsl/read-modify-write-high-zombies-expected.txt
patching file LayoutTests/webgpu/whlsl/read-modify-write-high-zombies.html
patching file LayoutTests/webgpu/whlsl/read-modify-write.html
patching file LayoutTests/webgpu/whlsl/recursive-structs-expected.txt
patching file LayoutTests/webgpu/whlsl/recursive-structs.html
patching file LayoutTests/webgpu/whlsl/return-local-variable-expected.html
patching file LayoutTests/webgpu/whlsl/return-local-variable.html
patching file LayoutTests/webgpu/whlsl/return-spec-tests-expected.txt
patching file LayoutTests/webgpu/whlsl/return-spec-tests.html
patching file LayoutTests/webgpu/whlsl/setter-spec-tests-expected.txt
patching file LayoutTests/webgpu/whlsl/setter-spec-tests.html
patching file LayoutTests/webgpu/whlsl/simple-arrays-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-arrays.html
patching file LayoutTests/webgpu/whlsl/simple-getter-setter-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-getter-setter.html
patching file LayoutTests/webgpu/whlsl/simple-tests-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-tests.html
patching file LayoutTests/webgpu/whlsl/simple-while-loop-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-while-loop.html
patching file LayoutTests/webgpu/whlsl/store-null-expected.txt
patching file LayoutTests/webgpu/whlsl/store-null.html
patching file LayoutTests/webgpu/whlsl/store-to-property-updates-properly-expected.html
patching file LayoutTests/webgpu/whlsl/store-to-property-updates-properly.html
patching file LayoutTests/webgpu/whlsl/struct-expected.txt
patching file LayoutTests/webgpu/whlsl/struct.html
patching file LayoutTests/webgpu/whlsl/switch-expected.txt
patching file LayoutTests/webgpu/whlsl/switch.html
patching file LayoutTests/webgpu/whlsl/ternary-spec-test-expected.txt
patching file LayoutTests/webgpu/whlsl/ternary-spec-test.html
patching file LayoutTests/webgpu/whlsl/test-harness-test-expected.txt
patching file LayoutTests/webgpu/whlsl/test-harness-test.html
patching file LayoutTests/webgpu/whlsl/textures-getdimensions-expected.txt
patching file LayoutTests/webgpu/whlsl/textures-getdimensions.html
patching file LayoutTests/webgpu/whlsl/textures-load-expected.html
patching file LayoutTests/webgpu/whlsl/textures-load.html
patching file LayoutTests/webgpu/whlsl/textures-sample-expected.html
patching file LayoutTests/webgpu/whlsl/textures-sample.html
patching file LayoutTests/webgpu/whlsl/two-dimensional-array-expected.txt
patching file LayoutTests/webgpu/whlsl/two-dimensional-array.html
patching file LayoutTests/webgpu/whlsl/type-mismatch-expected.txt
patching file LayoutTests/webgpu/whlsl/type-mismatch.html
patching file LayoutTests/webgpu/whlsl/uint-bitwise-expected.txt
patching file LayoutTests/webgpu/whlsl/uint-bitwise.html
patching file LayoutTests/webgpu/whlsl/use-undefined-variable-2-expected.txt
patching file LayoutTests/webgpu/whlsl/use-undefined-variable-2.html
patching file LayoutTests/webgpu/whlsl/use-undefined-variable-expected.txt
patching file LayoutTests/webgpu/whlsl/use-undefined-variable.html
patching file LayoutTests/webgpu/whlsl/variable-shadowing-expected.txt
patching file LayoutTests/webgpu/whlsl/variable-shadowing.html
patching file LayoutTests/webgpu/whlsl/vector-syntax-expected.txt
patching file LayoutTests/webgpu/whlsl/vector-syntax.html
patching file LayoutTests/webgpu/whlsl/while-loop-break-expected.html
patching file LayoutTests/webgpu/whlsl/while-loop-break.html
patching file LayoutTests/webgpu/whlsl/while-loop-continue-expected.html
patching file LayoutTests/webgpu/whlsl/while-loop-continue.html
patching file LayoutTests/webgpu/whlsl/whlsl.html
patching file LayoutTests/webgpu/whlsl/wrong-argument-length-expected.txt
patching file LayoutTests/webgpu/whlsl/wrong-argument-length.html
patching file LayoutTests/webgpu/whlsl/wrong-types-expected.txt
patching file LayoutTests/webgpu/whlsl/wrong-types.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values-2-expected.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values-2.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values-expected.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values.html

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Robin Morisset&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/12753492</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553325</commentid>
    <comment_count>4</comment_count>
      <attachid>374243</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-16 14:59:54 -0700</bug_when>
    <thetext>Created attachment 374243
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553326</commentid>
    <comment_count>5</comment_count>
      <attachid>374244</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-16 15:01:12 -0700</bug_when>
    <thetext>Created attachment 374244
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553373</commentid>
    <comment_count>6</comment_count>
      <attachid>374244</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-16 16:27:32 -0700</bug_when>
    <thetext>Comment on attachment 374244
Patch for committing

Rejecting attachment 374244 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 374244, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
sl/postfix-prefix.html
patching file LayoutTests/webgpu/whlsl/read-modify-write-expected.txt
patching file LayoutTests/webgpu/whlsl/read-modify-write-high-zombies-expected.txt
patching file LayoutTests/webgpu/whlsl/read-modify-write-high-zombies.html
patching file LayoutTests/webgpu/whlsl/read-modify-write.html
patching file LayoutTests/webgpu/whlsl/recursive-structs-expected.txt
patching file LayoutTests/webgpu/whlsl/recursive-structs.html
patching file LayoutTests/webgpu/whlsl/return-local-variable-expected.html
patching file LayoutTests/webgpu/whlsl/return-local-variable.html
patching file LayoutTests/webgpu/whlsl/return-spec-tests-expected.txt
patching file LayoutTests/webgpu/whlsl/return-spec-tests.html
patching file LayoutTests/webgpu/whlsl/setter-spec-tests-expected.txt
patching file LayoutTests/webgpu/whlsl/setter-spec-tests.html
patching file LayoutTests/webgpu/whlsl/simple-arrays-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-arrays.html
patching file LayoutTests/webgpu/whlsl/simple-getter-setter-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-getter-setter.html
patching file LayoutTests/webgpu/whlsl/simple-tests-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-tests.html
patching file LayoutTests/webgpu/whlsl/simple-while-loop-expected.txt
patching file LayoutTests/webgpu/whlsl/simple-while-loop.html
patching file LayoutTests/webgpu/whlsl/store-null-expected.txt
patching file LayoutTests/webgpu/whlsl/store-null.html
patching file LayoutTests/webgpu/whlsl/store-to-property-updates-properly-expected.html
patching file LayoutTests/webgpu/whlsl/store-to-property-updates-properly.html
patching file LayoutTests/webgpu/whlsl/struct-expected.txt
patching file LayoutTests/webgpu/whlsl/struct.html
patching file LayoutTests/webgpu/whlsl/switch-expected.txt
patching file LayoutTests/webgpu/whlsl/switch.html
patching file LayoutTests/webgpu/whlsl/ternary-spec-test-expected.txt
patching file LayoutTests/webgpu/whlsl/ternary-spec-test.html
patching file LayoutTests/webgpu/whlsl/test-harness-test-expected.txt
patching file LayoutTests/webgpu/whlsl/test-harness-test.html
patching file LayoutTests/webgpu/whlsl/textures-getdimensions-expected.txt
patching file LayoutTests/webgpu/whlsl/textures-getdimensions.html
patching file LayoutTests/webgpu/whlsl/textures-load-expected.html
patching file LayoutTests/webgpu/whlsl/textures-load.html
patching file LayoutTests/webgpu/whlsl/textures-sample-expected.html
patching file LayoutTests/webgpu/whlsl/textures-sample.html
patching file LayoutTests/webgpu/whlsl/two-dimensional-array-expected.txt
patching file LayoutTests/webgpu/whlsl/two-dimensional-array.html
patching file LayoutTests/webgpu/whlsl/type-mismatch-expected.txt
patching file LayoutTests/webgpu/whlsl/type-mismatch.html
patching file LayoutTests/webgpu/whlsl/uint-bitwise-expected.txt
patching file LayoutTests/webgpu/whlsl/uint-bitwise.html
patching file LayoutTests/webgpu/whlsl/use-undefined-variable-2-expected.txt
patching file LayoutTests/webgpu/whlsl/use-undefined-variable-2.html
patching file LayoutTests/webgpu/whlsl/use-undefined-variable-expected.txt
patching file LayoutTests/webgpu/whlsl/use-undefined-variable.html
patching file LayoutTests/webgpu/whlsl/variable-shadowing-expected.txt
patching file LayoutTests/webgpu/whlsl/variable-shadowing.html
patching file LayoutTests/webgpu/whlsl/vector-syntax-expected.txt
patching file LayoutTests/webgpu/whlsl/vector-syntax.html
patching file LayoutTests/webgpu/whlsl/while-loop-break-expected.html
patching file LayoutTests/webgpu/whlsl/while-loop-break.html
patching file LayoutTests/webgpu/whlsl/while-loop-continue-expected.html
patching file LayoutTests/webgpu/whlsl/while-loop-continue.html
patching file LayoutTests/webgpu/whlsl/whlsl.html
patching file LayoutTests/webgpu/whlsl/wrong-argument-length-expected.txt
patching file LayoutTests/webgpu/whlsl/wrong-argument-length.html
patching file LayoutTests/webgpu/whlsl/wrong-types-expected.txt
patching file LayoutTests/webgpu/whlsl/wrong-types.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values-2-expected.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values-2.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values-expected.html
patching file LayoutTests/webgpu/whlsl/zero-initialize-values.html

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
From https://git.webkit.org/git/WebKit
   7c1264d7b1c..35516a5d942  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 247498 = 7c1264d7b1c4efce081b8266f3dded08ae16fcab
r247499 = 35516a5d94222ffb584fde90670650657962790c
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: https://webkit-queues.webkit.org/results/12754297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553399</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-16 17:13:48 -0700</bug_when>
    <thetext>Committed r247501: &lt;https://trac.webkit.org/changeset/247501&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553400</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-16 17:17:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/53180250&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553502</commentid>
    <comment_count>9</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-07-17 07:57:36 -0700</bug_when>
    <thetext>Reverted r247501 for reason:

Introduced 100 failures on Mojave WK2.

Committed r247513: &lt;https://trac.webkit.org/changeset/247513&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553504</commentid>
    <comment_count>10</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-07-17 08:08:33 -0700</bug_when>
    <thetext>This change seems to have introduced 100 failures on Mojave WK2

Build:
https://build.webkit.org/builders/Apple%20Mojave%20Release%20WK2%20%28Tests%29/builds/5360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553526</commentid>
    <comment_count>11</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-07-17 08:57:28 -0700</bug_when>
    <thetext>This only effected Mojave WK2 which is not tested on EWS, and was not caught by EWS because webgpu is disabled on High Sierra. It looks like this change requires updating expectations for all these tests to include the new file paths possibly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553632</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-17 12:38:04 -0700</bug_when>
    <thetext>Committed r247528: &lt;https://trac.webkit.org/changeset/247528&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374241</attachid>
            <date>2019-07-16 14:35:30 -0700</date>
            <delta_ts>2019-07-16 14:44:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199838-20190716143528.patch</filename>
            <type>text/plain</type>
            <size>898968</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NDg0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZmZkNzc2OWU4MTNhMTFkMmUzYTBj
NTMwOGRjMTM0YzkzOTU2YTEzNi4uNTgyN2IyZjQxYjk1ZTNlN2I0NDg1MzQ3MGQzNGViZDlhNGRj
MTU2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxOCBAQAorMjAxOS0wNy0xNiAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTW92ZSBXSExTTCB0
ZXN0cyB0byB0aGVpciBvd24gZm9sZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTk4MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICB3ZWJncHUvd2hsc2wtZm9vLmh0bWwgPT4gd2ViZ3B1L3dobHNsL2Zv
by5odG1sCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy13azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJiaXRy
YXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5o
dG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1s
b2NhdGlvbnMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJp
dHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci1leHBl
Y3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2FyZ3VtZW50LWV2YWx1YXRpb24tb3Jk
ZXIuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmd1bWVudC1l
dmFsdWF0aW9uLW9yZGVyLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2FycmF5LWxlbmd0
aC1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1hcnJheS1sZW5ndGgtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL2FycmF5LWxlbmd0aC1zcGVjLXRlc3RzLmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvYXJyYXktc3BlYy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktc3BlYy10ZXN0cy1leHBlY3Rl
ZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2FycmF5LXNwZWMtdGVzdHMuaHRtbDogUmVu
YW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1zcGVjLXRlc3RzLmh0bWwu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL2JhZC1hZGQtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hZGQtZXhwZWN0ZWQudHh0LgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9iYWQtYWRkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYmFkLWFkZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9iYWQtYW5k
ZXItZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJh
ZC1hbmRlci1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JhZC1hbmRlci5o
dG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRlci5odG1s
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMtZXhwZWN0ZWQudHh0OiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1saXRlcmFscy1leHBlY3RlZC50
eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JhZC1saXRlcmFscy5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1saXRlcmFscy5odG1sLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9iaXR3aXNlLWJvb2wtb3BzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLWV4cGVjdGVkLnR4dC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYml0d2lzZS1ib29sLW9wcy5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJpdHdpc2UtYm9vbC1vcHMuaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvYm9vbHMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWJvb2xzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvYm9vbHMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1i
b29scy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9idWZmZXItZnJhZ21lbnQtZXhwZWN0
ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1z
YW1wbGUtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYnVmZmVyLWZyYWdt
ZW50Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWZy
YWdtZW50Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1ZmZlci1sZW5ndGgtZXhwZWN0
ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmlu
ZWQtdmFyaWFibGUtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9idWZmZXIt
bGVuZ3RoLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVy
LWxlbmd0aC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9idWZmZXItdmVydGV4LWV4cGVj
dGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMt
bG9hZC1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9idWZmZXItdmVydGV4
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRl
eC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9idWlsdGluLXZlY3RvcnMtMi1leHBlY3Rl
ZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0
b3JzLTItZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9idWlsdGluLXZlY3Rv
cnMtMi5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4t
dmVjdG9ycy0yLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy1l
eHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRp
bi12ZWN0b3JzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYnVpbHRpbi12
ZWN0b3JzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRp
bi12ZWN0b3JzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Nhc3RzLWV4cGVjdGVkLnR4
dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jYXN0cy1leHBlY3RlZC50
eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Nhc3RzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtY2FzdHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
Y2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5k
ZWZpbmVkLXZhcmlhYmxlLTItZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9j
aGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jaGVja2VyLXNob3VsZC1z
ZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21tZW50LXBhcnNpbmctZXhwZWN0ZWQudHh0LgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9jb21tZW50LXBhcnNpbmcuaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21tZW50LXBhcnNpbmcuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvY29tcHV0ZS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvY29tcHV0ZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvY29weS1l
eHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29weS1l
eHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2NvcHkuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5Lmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVyZW5jZS1vcmRlcmluZy1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZGVyZWZlcmVuY2UtcG9pbnRlci1zaG91bGQtdHlw
ZS1jaGVjay1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXN0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMtcHJvcGVybHktZXhwZWN0ZWQuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvZGVyZWZlcmVuY2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVj
ay5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNl
LXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
ZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtZXhwZWN0ZWQuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1icmVhay5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtYnJlYWsuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1s
OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVybi1sb2NhbC12YXJp
YWJsZS1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9kby13aGlsZS1sb29w
LWNvbnRpbnVlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8t
d2hpbGUtbG9vcC1jb250aW51ZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9kby13aGls
ZS1sb29wLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5odG1sLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC9kb250LWNyYXNoLXBhcnNpbmctZW51bS1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL2RvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0uaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL2RvdWJsZS1ub3QtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWRvdWJsZS1ub3QtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxz
bC9kb3VibGUtbm90Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZG91YmxlLW5vdC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMt
c2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1leHBlY3RlZC50eHQ6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtZ2V0ZGltZW5zaW9ucy1leHBl
Y3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1zaG91bGQt
bm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNh
dGUtY3RvcnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZHVwbGljYXRlcy1leHBlY3Rl
ZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlcy1l
eHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZXMuaHRtbDogUmVu
YW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGVzLmh0bWwuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi1leHBl
Y3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1w
cm9wZXItdmFyaWFibGUtbGlmZXRpbWUtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0yLmh0bWw6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGlt
ZS0yLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUt
bGlmZXRpbWUtMy1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy1leHBlY3RlZC5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTMu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZW5zdXJl
LXByb3Blci12YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi1l
eHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlh
YmxlLWxpZmV0aW1lLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9lbnVtLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy1leHBlY3RlZC50eHQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL2VudW0tc3BlYy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9lcXVhbGl0eS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZXF1YWxpdHktZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9l
cXVhbGl0eS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVxdWFs
aXR5Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2V4cGVjdGVkLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLWV4cGVjdGVkLmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGgtZXhwZWN0ZWQudHh0OiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0LW1hdGgtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9mbG9hdC1tYXRoLmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZmxvYXQtbWF0aC5odG1sLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9nZXR0ZXItc2V0dGVyLXR5cGUtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWdldHRlci1zZXR0ZXItdHlwZS1leHBlY3RlZC50eHQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0ZXItdHlwZS5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWdldHRlci1zZXR0ZXItdHlwZS5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9odWdlLWFycmF5LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvaHVnZS1hcnJheS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXkuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wvaWYtc3RhdGVtZW50LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1pZi1zdGF0ZW1lbnQtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9pZi1zdGF0ZW1lbnQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1pZi1zdGF0ZW1lbnQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW5jcmVtZW50
LWRlY3JlbWVudC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtaW5jcmVtZW50LWRlY3JlbWVudC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1pbmNyZW1lbnQtZGVjcmVtZW50Lmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2luZGV4LWFuZGVyLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1pbmRleC1hbmRlci1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2luZGV4LWFuZGVyLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtaW5kZXgtYW5kZXIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW5kZXgtZ2V0
dGVyLXNldHRlci1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2luZGV4LWdldHRlci1zZXR0ZXIuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXItZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LXNldHRlci1nZXR0ZXItZXhwZWN0ZWQudHh0Lgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtc2V0dGVyLWdldHRlci5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9pbnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0OiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1iaXQtbWF0aC1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL2ludC1iaXQtbWF0aC5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1iaXQtbWF0aC5odG1sLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9pbnQtbGl0ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtbGl0ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4
dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW50LWxpdGVyYWwtY29tcGFyZS5odG1sOiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1saXRlcmFsLWNvbXBhcmUuaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9naWNhbC1uZWdhdGlvbi1leHBlY3RlZC50eHQ6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9naWNhbC1uZWdhdGlvbi1l
eHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvZ2ljYWwtbmVnYXRpb24uaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb2dpY2FsLW5lZ2F0aW9u
Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZh
bHVlcy0yLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLWJyZWFr
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtYnJlYWsu
aHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMtY29udGludWUtZXhwZWN0ZWQuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFr
LWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLWNvbnRpbnVlLmh0
bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUu
aHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMtZXhwZWN0ZWQuaHRtbDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb250LWNyYXNoLXBhcnNpbmctZW51bS1l
eHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9sb29wcy1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1z
cGVjLXRlc3RzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMtc3Bl
Yy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3Bz
LXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMuaHRtbDogUmVu
YW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1leHBlY3RlZC50eHQ6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJpYWJsZXMt
ZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlh
Ymxlcy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvdHMtb2Yt
bG9jYWwtdmFyaWFibGVzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2x2YWx1ZXMtZXhw
ZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMt
ZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9sdmFsdWVzLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbHZhbHVlcy5odG1sLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9tYWtlLWFycmF5LXJlZi1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVu
YW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZi1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWYt
c3BlYy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1h
a2UtYXJyYXktcmVmLXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbWFr
ZS1hcnJheS1yZWZlcmVuY2UtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmllcy1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbWF0cmljZXMtc3BlYy10ZXN0cy1leHBlY3RlZC50
eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cmljZXMtc3BlYy10
ZXN0cy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMt
dGVzdHMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaWNl
cy1zcGVjLXRlc3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpeC0yLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlm
eS13cml0ZS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpeC0yLmh0
bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbWF0cml4LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0OiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UtZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9tYXRyaXgtbWVtb3J5LWxheW91dC5odG1s
OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5
b3V0Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpeC5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC5odG1sLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLWV4cGVjdGVkLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1leHBlY3RlZC5o
dG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVl
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWRvdC1l
eHByZXNzaW9uLXJ2YWx1ZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtbG9v
cC1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5l
c3RlZC1sb29wLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL25lc3RlZC1s
b29wLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxv
b3AuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbnVsbC1hcmctZXhwZWN0ZWQudHh0OiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLWV4cGVjdGVkLnR4
dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbnVsbC1hcmcuaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWFyZy5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9udWxsLWFycmF5LXJlZi5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLW51bGwtYXJyYXktcmVmLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL251bGwt
ZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5b3V0LWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvbnVsbC1kZXJlZmVyZW5jZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wvb29iLWFjY2Vzcy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbWF0cml4LWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb29i
LWFjY2Vzcy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1h
Y2Nlc3MuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQtZXhw
ZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9y
LW92ZXJsb2FkLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb3BlcmF0b3It
b3ZlcmxvYWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vcGVy
YXRvci1vdmVybG9hZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vdmVybG9hZC1leHBl
Y3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcmxvYWQt
ZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vdmVybG9hZC5odG1sOiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC1leHBlY3RlZC50eHQ6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWw6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLWV4cGVjdGVkLnR4dDogUmVu
YW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVzLWVxdWFscy1leHBlY3RlZC50
eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLmh0bWw6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvcG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVzdHMuaHRtbDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQudHh0OiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgtcHJlZml4LWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXguaHRtbDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb3N0Zml4LXByZWZpeC5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1leHBlY3RlZC50eHQ6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTItZXhwZWN0ZWQudHh0Lgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMtZXhw
ZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJy
YXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvcmVhZC1t
b2RpZnktd3JpdGUtaGlnaC16b21iaWVzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnktd3JpdGUuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlY3Vyc2l2ZS1zdHJ1Y3RzLWV4cGVjdGVkLnR4dC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1cnNpdmUtc3RydWN0cy5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9yZXR1cm4tbG9jYWwtdmFyaWFibGUtZXhwZWN0ZWQuaHRtbDog
UmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRp
bnVlLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3JldHVybi1sb2NhbC12
YXJpYWJsZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVy
bi1sb2NhbC12YXJpYWJsZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9yZXR1cm4tc3Bl
Yy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtcmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxz
bC9yZXR1cm4tc3BlYy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3Nl
dHRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1zZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3NldHRlci1zcGVjLXRlc3RzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtaHVnZS1hcnJheS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3NpbXBsZS1hcnJheXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1zaW1wbGUtYXJyYXlzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NpbXBs
ZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLWdldHRlci1zZXR0ZXIuaHRtbC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0LgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9zaW1wbGUtdGVzdHMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wvc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLWV4cGVjdGVkLnR4dC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AuaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtd2hpbGUtbG9vcC5odG1sLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9zdG9yZS1udWxsLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvc3RvcmUtbnVsbC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXN0b3JlLW51bGwuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc3RvcmUtdG8t
cHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hl
Y2stZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc3RvcmUtdG8tcHJvcGVy
dHktdXBkYXRlcy1wcm9wZXJseS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXN0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMtcHJvcGVybHkuaHRtbC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvc3RydWN0LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9zdHJ1Y3QuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1z
dHJ1Y3QuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc3dpdGNoLWV4cGVjdGVkLnR4dDog
UmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zd2l0Y2guaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
dGVybmFyeS1zcGVjLXRlc3QtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXRlcm5hcnktc3BlYy10ZXN0LWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRlc3QuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC10ZXJuYXJ5LXNwZWMtdGVzdC5odG1sLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0LgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3RleHR1cmVzLWdldGRpbWVuc2lvbnMtZXhwZWN0ZWQudHh0OiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQt
bm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvdGV4dHVyZXMtZ2V0ZGltZW5zaW9ucy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVuc2lvbnMuaHRtbC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci12ZXJ0ZXgtZXhwZWN0ZWQuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWxvYWQuaHRtbC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvdGV4dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3RleHR1cmVzLXNhbXBsZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLXNhbXBsZS5odG1sLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC90d28tZGltZW5zaW9uYWwtYXJyYXktZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUtZXhwZWN0ZWQudHh0LgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC90d28tZGltZW5zaW9uYWwtYXJyYXkuaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10d28tZGltZW5zaW9uYWwtYXJyYXkuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvdHlwZS1taXNtYXRjaC1leHBlY3RlZC50eHQ6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHlwZS1taXNtYXRjaC1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0Y2guaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10eXBlLW1pc21hdGNoLmh0bWwuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3VpbnQtYml0d2lzZS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvdWludC1iaXR3aXNlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtdWludC1iaXR3aXNlLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2Rp
Znktd3JpdGUtdmFyaWFibGVzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
dXNlLXVuZGVmaW5lZC12YXJpYWJsZS0yLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtdXNlLXVuZGVmaW5lZC12YXJpYWJsZS0yLmh0bWwuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci1sZW5ndGgtZXhwZWN0ZWQudHh0Lgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdXNlLXVuZGVmaW5lZC12YXJpYWJsZS5o
dG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dpbmctZXhwZWN0ZWQu
dHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZhcmlhYmxlLXNoYWRv
d2luZy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3ZhcmlhYmxlLXNoYWRv
d2luZy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZhcmlhYmxl
LXNoYWRvd2luZy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC92ZWN0b3Itc3ludGF4LWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC12ZWN0b3It
c3ludGF4LWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvdmVjdG9yLXN5bnRh
eC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZlY3Rvci1zeW50
YXguaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1icmVhay1leHBlY3Rl
ZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRp
bnVlLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtYnJl
YWsuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29w
LWJyZWFrLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUt
ZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJp
dHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51ZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUuaHRtbC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvd2hsc2wuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5n
dGgtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdy
b25nLWFyZ3VtZW50LWxlbmd0aC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3dyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXdyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC93cm9uZy10eXBlcy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93
aGxzbC93cm9uZy10eXBlcy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXdyb25nLXR5cGVzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3plcm8taW5pdGlh
bGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4cGVjdGVkLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay1leHBl
Y3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFsdWVz
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFs
aXplLXZhbHVlcy5odG1sLgorCiAyMDE5LTA3LTE2ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtUZXh0IGF1dG9zaXppbmddIFtpUGFkT1NdIFBhcmFn
cmFwaCB0ZXh0IG9uIHRoZSBmcm9udCBwYWdlIG9mIExpbmtlZEluLmNvbSBpcyBub3QgYm9vc3Rl
ZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3Rz
L1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZDQxNGQ4NjgwMzhhMDU3OTQzZDc2NGJlMWJjZWZkZDJi
YTNkZGFlMS4uYjhiYTliN2VkZjJlMGRhN2RlMTg2NWI2ZWZhYzI1YzZjZDRmNDVkOSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0
RXhwZWN0YXRpb25zCkBAIC0zNDM5LDcgKzM0MzksNyBAQCBmYXN0L2RvbS9saW5raWZ5LXBob25l
LW51bWJlcnMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTk5MDM5
IGVkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRlLXBhcmFncmFwaC0wMDMuaHRtbCBbIFNraXAg
XQogCi13ZWJraXQub3JnL2IvMTk5MDI4IHdlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3MtdGVzdC5o
dG1sIFsgU2xvdyBdCit3ZWJraXQub3JnL2IvMTk5MDI4IHdlYmdwdS93aGxzbC90ZXN0LWhhcm5l
c3MtdGVzdC5odG1sIFsgU2xvdyBdCiAKIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzc29tLXZpZXcvb2Zmc2V0VG9wTGVmdC1pbmxpbmUuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMK
aW5kZXggMTUyNTA5NzhkMzdlZmNhMjZlYTI4MTdlOTY4ODJiZWU1NjJjODJkNC4uZDY1N2JjNzNm
ZmEyNWY0MzQwZjVlNzRmNzNhYzJlYmMxNGM5ZjQ4MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtOTY3LDQgKzk2Nyw0IEBAIHdlYmtpdC5v
cmcvYi8xOTU2MzUgc2Nyb2xsaW5nY29vcmRpbmF0b3IvbWFjL211bHRpcGxlLWZpeGVkLmh0bWwg
WyBQYXNzIFRpbWVvdXQKICMgPHJkYXI6Ly9wcm9ibGVtLzUxNTI0OTU4PiBSRUdSRVNTSU9OOiBb
IENhdGFsaW5hIFdLMiBdIGh0dHAvd3B0L3dlYmF1dGhuL3B1YmxpYy1rZXktY3JlZGVudGlhbC1j
cmVhdGUtc3VjY2Vzcy11MmYuaHR0cHMuaHRtbCBpcyBmYWlsaW5nCiBbIENhdGFsaW5hKyBdIGh0
dHAvd3B0L3dlYmF1dGhuL3B1YmxpYy1rZXktY3JlZGVudGlhbC1jcmVhdGUtc3VjY2Vzcy11MmYu
aHR0cHMuaHRtbCBbIEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMTk5NjUxIFsgTW9qYXZlIERl
YnVnIF0gd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy0yLmh0bWwgWyBTbG93IF0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit3ZWJraXQub3JnL2IvMTk5NjUxIFsgTW9qYXZlIERlYnVn
IF0gd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0yLmh0bWwgWyBTbG93IF0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1s
b2NhdGlvbnMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJh
cnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtYXJiaXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4
cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJp
YnV0ZS1sb2NhdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJhcnkt
dmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjFhMDQxNDdkNTAxMDY1Yzg0MmJhYWNmMTNiMzM3ZWRhMTQ2MDkyNS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYXJiaXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgot
PGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0
IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0
IHBvc2l0aW9uIDogYXR0cmlidXRlKDE3MyksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDQ5OCkp
IHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0OwotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9u
OwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZy
YWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAx
LjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRl
ciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAg
ICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTog
Im5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVu
ZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwg
YWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRl
Qml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25z
dCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAxNzMsIGZvcm1hdDogImZsb2F0NCJ9Owot
ICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDQ5OCwgZm9ybWF0OiAiZmxv
YXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmli
dXRlU2V0OiBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV19OwotICAgIGNvbnN0IGlucHV0cyA9IFtp
bnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2Jp
bmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5k
R3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdy
aXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0g
PSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzRdID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0w
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTldID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwot
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAx
LCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRw
dXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9y
ZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xv
ckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQ
YXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVz
Y3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxp
bmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBd
LCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVu
ZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsK
LSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAg
IGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
LX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNjJjMmE4MjNlNjYyNmE2NTg5
NjIwMTRjOGE3N2UzMTc0OGMyZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFyZ3VtZW50LWV2YWx1YXRpb24t
b3JkZXItZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mg
ZXZhbHVhdGlvbk9yZGVyRm9yQXJndW1lbnRzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWFyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXIuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTBlYThkMTY1ZDBmMGQyZTAwODYxYjc1OGM0MjhiNjEyZTExN2I0
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5Db3B5aW5nLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmV2YWx1YXRp
b25PcmRlckZvckFyZ3VtZW50cyA9IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBwcm9ncmFtID0g
YAotICAgICAgICBpbnQgZm9vKCkgeyByZXR1cm4gKmJhcigxMCkgKyAqYmFyKDIwKTsgfQotCi0g
ICAgICAgIHRocmVhZCBpbnQqIGJhcihpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCB4ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gJng7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbnQgYmF6KCkgeyByZXR1cm4gcGx1cyhiYXIoMTApLCBiYXIoMjApKTsgfQotCi0gICAg
ICAgIGludCBwbHVzKHRocmVhZCBpbnQqIHgsIHRocmVhZCBpbnQqIHkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAqeCArICp5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtd
KSwgNDApOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4K
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVj
LXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1sZW5n
dGgtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU1MzNlOGFhZjAyZTNhNDA0ZGQyNDIwZjFjOWE5NGY3YjA3ZjRhN2UuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWFycmF5LWxlbmd0aC1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDQgKzAsMCBAQAotCi1QQVNTIG5vbkFycmF5UmVmQXJyYXlMZW5ndGhGYWlsIAotUEFTUyBub25B
cnJheVJlZkFycmF5TGVuZ3RoU3VjY2VlZCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDc3NzA0Y2FlODM4YjllNWE4NTIwM2Y4M2JjNzg2YzMwZjM1YjA4YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDQ1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0
Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBz
dHJ1Y3RzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLm5vbkFycmF5UmVm
QXJyYXlMZW5ndGhGYWlsID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIHRocmVhZCB1aW50KiBsZW5ndGhQdHIoKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGludFs0Ml0gYXJyYXk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICYoYXJyYXkubGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdo
bHNsVGVzdHMubm9uQXJyYXlSZWZBcnJheUxlbmd0aFN1Y2NlZWQgPSBhc3luYyAoKSA9Pgotewot
ICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICB1aW50IGZvbygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZsb2F0Wzc1NF0gYXJyYXk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3Ro
OwotICAgICAgICB9Ci0gICAgICAgIHVpbnQgYmFyKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50Wzc1NF0gYXJyYXk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3RoOwotICAgICAg
ICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgNzU0KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50
RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdKSwgNzU0KTsKLX0KLQotcnVuVGVzdHMod2hsc2xU
ZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1hcnJheS1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1hcnJheS1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTY4NWIxZjZlNmZmMDk0MWZjNjM4NGQ5MmM4MzgyYjI3ZDJiMDJiZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYXJyYXktc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSw4ICswLDAgQEAKLQotUEFTUyBhcnJheVJlZlRvQXJyYXlSZWYgCi1QQVNTIGFzc2lnbkxl
bmd0aCAKLVBBU1MgYXNzaWduTGVuZ3RoSGVscGVyIAotUEFTUyBidWlsZEFycmF5VGhlblN1bUl0
IAotUEFTUyBidWlsZEFycmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSAKLVBBU1MgcGFz
c2luZ0FycmF5VG9GdW5jdGlvbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWFycmF5LXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJh
eS1zcGVjLXRlc3RzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MmNkNGQw
NzZjY2M0MzZiZDBjMTg3NTQzYTBmNDVhN2JmZGUxZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LXNw
ZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQi
IGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5hcnJheVJlZlRvQXJyYXlSZWYgPSBh
c3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0g
QHg7Ci0gICAgICAgICAgICB0aHJlYWQgaW50W11bXSBwcCA9IEBwOwotICAgICAgICAgICAgaW50
W110aHJlYWRbXXRocmVhZCBxcSA9IHBwOwotICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7Ci0g
ICAgICAgICAgICB4ID0gNDI7Ci0gICAgICAgICAgICBwWzBdID0gNzY7Ci0gICAgICAgICAgICBy
ZXN1bHQgKz0geDsKLSAgICAgICAgICAgIHBwWzBdWzBdID0gMzk7Ci0gICAgICAgICAgICByZXN1
bHQgKz0geDsKLSAgICAgICAgICAgIHFxWzBdWzBdID0gODM7Ci0gICAgICAgICAgICByZXN1bHQg
Kz0geDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICBgOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSks
IDc2ICsgMzkgKyA4Myk7Ci19Ci0KLXdobHNsVGVzdHMuYXNzaWduTGVuZ3RoID0gYXN5bmMgKCkg
PT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdm9pZCBm
b28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJyYXk7Ci0g
ICAgICAgICAgICAgICAgKEBhcnJheSkubGVuZ3RoID0gNDI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGApOwotICAgICAgICAKLX0KLQotd2hsc2xUZXN0cy5hc3NpZ25MZW5ndGhIZWxwZXIgPSBh
c3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICB2b2lkIGJhcih0aHJlYWQgZmxvYXRbXSBhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBhcnJheS5sZW5ndGggPSA0MjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZv
aWQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdFs3NTRdIGFycmF5
OwotICAgICAgICAgICAgICAgIGJhcihAYXJyYXkpOwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLX0KLQotd2hsc2xUZXN0cy5idWlsZEFycmF5VGhlblN1bUl0ID0gYXN5bmMgKCkgPT4gewot
ICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50WzQyXSBhcnJheTsKLSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQy
OyBpID0gaSArIDEpCi0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBpbnQoaSArIDUpOwotICAg
ICAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQy
OyBpID0gaSArIDEpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYXJyYXlbaV07
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0MiAq
IDUgKyA0MiAqIDQxIC8gMik7Ci19Ci0KLXdobHNsVGVzdHMuYnVpbGRBcnJheVRoZW5TdW1JdFVz
aW5nQXJyYXlSZWZlcmVuY2UgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0g
ICAgICAgIGludCBiYXIodGhyZWFkIGludFtdIGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQotICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gaW50KGkgKyA1KTsKLSAgICAgICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgICAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHJlc3VsdCArIGFycmF5W2ldOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50WzQy
XSBhcnJheTsKLSAgICAgICAgICAgIHJldHVybiBiYXIoQGFycmF5KTsKLSAgICAgICAgfQotICAg
IGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdKSwgNDIgKiA1ICsgNDIgKiA0MSAvIDIpOwotfQotCi13aGxzbFRlc3RzLnBhc3NpbmdB
cnJheVRvRnVuY3Rpb24gPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAg
ICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50WzEwXSBhcnI7Ci0gICAg
ICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICAgICAgYXJyW2ldID0gaW50KGkpICsgMTsKLSAgICAgICAgICAgIHJldHVybiBzdW0oYXJyKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGludCBzdW0oaW50WzEwXSB4cykKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHQgPSAwOwotICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgeHMu
bGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgdCA9IHQgKyB4c1tpXTsKLSAgICAgICAgICAg
IHJldHVybiB0OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA1NSk7Ci19Ci0KLXJ1blRlc3RzKHdo
bHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYmFkLWFkZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtYmFkLWFkZC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJl
YjQ1MmU2OTIxOTZjNTFjNmQzNDE4Y2EwYTM2ZDNiZmM1MGQxZGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJh
ZC1hZGQtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mg
YmFkQWRkIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hZGQuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmFlMDQxNjljYTYzMWE5MDczMTJiYzc0YzdkMmM4ZGE1NzE5NjQ2
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0
YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+
Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qg
d2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmJhZEFkZCA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbyhpbnQg
eCwgdWludCB5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVpbnQgeiA9IHggKyB5
OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7
Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1iYWQtYW5kZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1h
bmRlci1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGE3NGM5
ZGZlNzFiNWM5NDY1MDI0ZDY5ODllYTk5OTdiNGNlMWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRl
ci1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotUEFTUyBpbmRl
eEFuZGVyRG9lc250UmV0dXJuUG9pbnRlciAKLVBBU1MgaW5kZXhBbmRlckRvZXNudFRha2VSZWZl
cmVuY2UgCi1QQVNTIGFuZGVyRG9lc250UmV0dXJuUG9pbnRlciAKLVBBU1MgYW5kZXJEb2VzbnRU
YWtlUmVmZXJlbmNlIAotUEFTUyBhbmRlcldpdGhCYWRJbmRleCAKLVBBU1MgYW5kZXJXaXRoTm90
aGluZ1dyb25nIAotUEFTUyBhbmRlcldpdGhXcm9uZ051bWJlck9mQXJndW1lbnRzIAotCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFuZGVyLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFuZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDljOTdhYjhlNGVhMjY5MDQwOWFhZmI2Nzg2Y2IyZDk2Y2Y4YzY3MzIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWJhZC1hbmRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5pbmRleEFuZGVyRG9lc250UmV0dXJu
UG9pbnRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBg
Ci0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVp
bnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvby0+eDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMuaW5kZXhBbmRlckRvZXNudFRh
a2VSZWZlcmVuY2UgPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAg
ICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXShGb28gZm9v
LCB1aW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLng7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLmFuZGVyRG9lc250UmV0
dXJuUG9pbnRlciA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAg
IGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgICAgIGludCB4OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9v
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmb28tPng7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLmFuZGVyRG9lc250VGFrZVJlZmVy
ZW5jZSA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0g
ICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28oRm9vIGZvbykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZvby54OwotICAgICAgICAgICAg
fQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5hbmRlcldpdGhCYWRJbmRleCA9IGFzeW5j
ICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKGBpbnQgZm9vKHRocmVhZCBpbnRbXSB4KSB7
IHJldHVybiB4Wy0xXTsgfWApOwotCi0gICAgYXdhaXQgY2hlY2tGYWlsKGBpbnQgZm9vKHRocmVh
ZCBpbnRbXSB4KSB7IHJldHVybiB4WzEuZl07IH1gKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChg
aW50IGZvbyh0aHJlYWQgaW50W10geCwgaW50IHkpIHsgcmV0dXJuIHhbeV07IH1gKTsKLQotICAg
IGF3YWl0IGNoZWNrRmFpbChgaW50IGZvbyh0aHJlYWQgaW50W10geCwgZmxvYXQgeSkgeyByZXR1
cm4geFt5XTsgfWApOwotfQotCi13aGxzbFRlc3RzLmFuZGVyV2l0aE5vdGhpbmdXcm9uZyA9IGFz
eW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewot
ICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyZWFkIGludCogb3BlcmF0
b3ImLmZvbyh0aHJlYWQgRm9vKiBmb28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAm
Zm9vLT54OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBGb28geDsKLSAgICAgICAgICAgIHgueCA9IDEzOwotICAgICAgICAgICAgcmV0dXJuIHgu
Zm9vOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMyk7Ci19Ci0KLXdobHNsVGVzdHMuYW5kZXJX
aXRoV3JvbmdOdW1iZXJPZkFyZ3VtZW50cyA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28o
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAg
IHJldHVybiAmeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAg
ICAgIGludCB4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0
b3ImLmZvbyh0aHJlYWQgRm9vKiBmb28sIGludCBibGFoKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0K
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtbGl0ZXJhbHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1saXRlcmFscy1leHBlY3RlZC50eHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YTE2YTJmOTA0NWE4Njg2YTM0ZDlmN2IwYjA0YjRlZWJi
NzI5MGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1saXRlcmFscy1leHBlY3RlZC50eHQKKysrIC9kZXYv
bnVsbApAQCAtMSw0ICswLDAgQEAKLQotUEFTUyBiYWRJbnRMaXRlcmFsRm9ySW50IAotUEFTUyBi
YWRJbnRMaXRlcmFsRm9yRmxvYXQgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1iYWQtbGl0ZXJhbHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtbGl0
ZXJhbHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhlMDIwNWM1ODQ2MTUz
NDQ3YzM4MmIxNzU2YmNhNDNlMWFjODczMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWxpdGVyYWxzLmh0
bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgotPHRpdGxlPlRlc3QgcHJlZml4L3Bvc3RmaXguPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJq
cy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMuYmFkSW50TGl0ZXJhbEZvckludCA9IGFzeW5jICgpID0+Ci17Ci0gICAg
YXdhaXQgY2hlY2tGYWlsKCAidm9pZCBmb28oKSB7IGludCB4ID0gMzAwMDAwMDAwMDsgfSIpOwot
fQotCi13aGxzbFRlc3RzLmJhZEludExpdGVyYWxGb3JGbG9hdCA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgYXdhaXQgY2hlY2tGYWlsKCJ2b2lkIGZvbygpIHsgZmxvYXQgeCA9IDUwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA7IH0iKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7
Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1iaXR3aXNlLWJvb2wtb3BzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1iaXR3aXNlLWJvb2wtb3BzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjQxZGQ2Njc4MWZiMWQxODA1NDc4YmE0OTU4NGE2YzY0YTgzNzc3Ny4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYml0d2lzZS1ib29sLW9wcy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2
ICswLDAgQEAKLQotUEFTUyBib29sQml0QW5kIAotUEFTUyBib29sQml0T3IgCi1QQVNTIGJvb2xC
aXRYb3IgCi1QQVNTIGJvb2xCaXROb3QgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Yml0d2lzZS1ib29sLW9wcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDZl
ODNjZDI0NjEwN2I2N2U3ZjMzOWVlOGQ0ZTVmNTA3MWQ1MmViLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3
aXNlLWJvb2wtb3BzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3Mu
PC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQ+Ci1jb25zdCBlcHNpbG9uID0gMC4wMDAxOwotCi1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMuYm9vbEJpdEFuZCA9IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBz
b3VyY2UgPSBgCi0gICAgICAgIGJvb2wgZm9vKGJvb2wgYSwgYm9vbCBiKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gYSAmIGI7Ci0gICAgICAgIH0KLSAgICBgOwotCi0gICAgewotICAg
ICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBb
bWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKHRydWUpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMo
cmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0K
LSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJj
ZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pOwotICAgICAgICBh
c3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVl
LiIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChmYWxzZSld
KTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBl
eHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1h
a2VCb29sKHRydWUpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRl
c3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgfQotfTsKLQotd2hsc2xUZXN0cy5i
b29sQml0T3IgPSBhc3luYyAoKSA9PiB7Ci0gICAgY29uc3Qgc291cmNlID0gYAotICAgICAgICBi
b29sIGZvbyhib29sIGEsIGJvb2wgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEg
fCBiOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtl
Qm9vbCh0cnVlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3Qg
cmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQg
cmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wo
ZmFsc2UpLCBtYWtlQm9vbChmYWxzZSldKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQs
IGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7
Ci0gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZv
byIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2woZmFsc2UpXSk7Ci0gICAgICAgIGFzc2VydF9l
cXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7Ci0gICAg
ICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2
YWx1ZS4iKTsKLSAgICB9Ci19OwotCi13aGxzbFRlc3RzLmJvb2xCaXRYb3IgPSBhc3luYyAoKSA9
PiB7Ci0gICAgY29uc3Qgc291cmNlID0gYAotICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wg
YikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgXiBiOwotICAgICAgICB9Ci0gICAg
YDsKLQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
c291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOwotICAgICAg
ICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZh
bHVlLiIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2woZmFs
c2UpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3QgcmV0dXJu
ZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0
ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSks
IG1ha2VCb29sKGZhbHNlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwg
IlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgfQotCi0gICAgewotICAgICAg
ICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFr
ZUJvb2woZmFsc2UpLCBtYWtlQm9vbCh0cnVlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJl
c3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgfQotfTsK
LQotd2hsc2xUZXN0cy5ib29sQml0Tm90ID0gYXN5bmMgKCkgPT4gewotICAgIGNvbnN0IHNvdXJj
ZSA9IGAKLSAgICAgICAgYm9vbCBmb28oYm9vbCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gfmE7Ci0gICAgICAgIH0KLSAgICBgOwotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0
ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSld
KTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBl
eHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKTsK
LSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIHRydWUsICJUZXN0IHJldHVybmVkIGV4cGVj
dGVkIHZhbHVlLiIpOwotICAgIH0KLX07Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3Jp
cHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJvb2xzLWV4cGVjdGVkLnR4
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1YWJiOGMxYzQwYmM2NzJjNzc5OGI5
YjJjMmQ1NGYyMzVmNzhjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMtZXhwZWN0ZWQudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLVBBU1MgYm9vbGVhbk1hdGggCi1QQVNTIGlkZW50
aXR5Qm9vbCAKLVBBU1MgbGl0ZXJhbEJvb2wgCi1QQVNTIG9wZXJhdG9yQm9vbCAKLQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJvb2xzLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYm9vbHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVm
NzFhNDk5ZTM2MTYxMzMxZDhkNmExYjk2ZmRhNTk2YmQ0NzI2Yi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9v
bHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgotPHRpdGxlPkJvb2xzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wt
dGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxz
bFRlc3RzLmJvb2xlYW5NYXRoID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAK
LSAgICAgICAgYm9vbCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZSAm
JiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vMigpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlICYmIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9v
MygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZSAmJiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGJvb2wgZm9vNCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZSAmJiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBib29sIGZvbzUoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZSB8fCB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJv
b2wgZm9vNigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlIHx8IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vNygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZSB8fCB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vOCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZSB8fCBmYWxzZTsKLSAgICAgICAgfQotICAg
IGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgZmFsc2UpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFtdKSwgZmFs
c2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vNSIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJmb282IiwgW10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzciLCBbXSksIHRydWUpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIsIFtdKSwgZmFs
c2UpOwotfQotCi0KLXdobHNsVGVzdHMuaWRlbnRpdHlCb29sID0gYXN5bmMgKCkgPT4gewotICAg
IGxldCBwcm9ncmFtID0gImJvb2wgZm9vKGJvb2wgeCkgeyByZXR1cm4geDsgfSI7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJv
b2wodHJ1ZSldKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpXSksIGZhbHNlKTsKLX0KLQotd2hs
c2xUZXN0cy5saXRlcmFsQm9vbCA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9ICJi
b29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCB0cnVlKTsKLX0KLQotd2hsc2xUZXN0
cy5vcGVyYXRvckJvb2wgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAg
ICAgICBib29sIGJvb2xGcm9tVWNoYXJGYWxzZSgpIHsgcmV0dXJuIGJvb2wodWNoYXIoMCkpOyB9
Ci0gICAgICAgIGJvb2wgYm9vbEZyb21VY2hhclRydWUoKSB7IHJldHVybiBib29sKHVjaGFyKDEp
KTsgfQotCi0gICAgICAgIGJvb2wgYm9vbEZyb21VaW50RmFsc2UoKSB7IHJldHVybiBib29sKHVp
bnQoMCkpOyB9Ci0gICAgICAgIGJvb2wgYm9vbEZyb21VaW50VHJ1ZSgpIHsgcmV0dXJuIGJvb2wo
dWludCgxKSk7IH0KLQotICAgICAgICBib29sIGJvb2xGcm9tSW50RmFsc2UoKSB7IHJldHVybiBi
b29sKGludCgwKSk7IH0KLSAgICAgICAgYm9vbCBib29sRnJvbUludFRydWUoKSB7IHJldHVybiBi
b29sKGludCgxKSk7IH0KLQotICAgICAgICBib29sIGJvb2xGcm9tRmxvYXRGYWxzZSgpIHsgcmV0
dXJuIGJvb2woZmxvYXQoMCkpOyB9Ci0gICAgICAgIGJvb2wgYm9vbEZyb21GbG9hdFRydWUoKSB7
IHJldHVybiBib29sKGZsb2F0KDEpKTsgfQotICAgICAgICBib29sIGJvb2xGcm9tRmxvYXROYU4o
ZmxvYXQgYXJnKSB7IHJldHVybiBib29sKGFyZyk7IH0KLSAgICBgOwotCi0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbVVjaGFyRmFsc2Ui
LCBbXSksIGZhbHNlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
cHJvZ3JhbSwgImJvb2xGcm9tVWNoYXJUcnVlIiwgW10pLCB0cnVlKTsKLQotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21VaW50RmFsc2Ui
LCBbXSksIGZhbHNlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
cHJvZ3JhbSwgImJvb2xGcm9tVWludFRydWUiLCBbXSksIHRydWUpOwotCi0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUludEZhbHNlIiwg
W10pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJib29sRnJvbUludFRydWUiLCBbXSksIHRydWUpOwotCi0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUZsb2F0RmFsc2UiLCBb
XSksIGZhbHNlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImJvb2xGcm9tRmxvYXRUcnVlIiwgW10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tRmxvYXROYU4iLCBbbWFr
ZUZsb2F0KHByb2dyYW0sIE5hTildKSwgdHJ1ZSk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBmbG9hdDMgeDsKLSAgICAgICAgICAgICAgICBib29sIHIgPSBib29sKHgpOwotICAg
ICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0KLSAgICBhd2FpdCBjaGVja0ZhaWwo
Ci0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmbG9hdDN4MyB4OwotICAgICAgICAgICAgICAgIGJvb2wgciA9IGJvb2woeCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLQotcnVuVGVzdHMod2hs
c2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1idWZmZXItZnJhZ21lbnQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1idWZmZXItZnJhZ21lbnQtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52
YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7
Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1idWZmZXItZnJhZ21lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1idWZmZXItZnJhZ21lbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBi
YWJhMDM3ZjFjZTJiMDc5YTVkNjkyYjIyY2Q5ZTMyMjNmOTg5Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVm
ZmVyLWZyYWdtZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJT
b3VyY2UgPSBgCi12ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCksIGZsb2F0IGkgOiBhdHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24gewotICAg
IHJldHVybiBwb3NpdGlvbjsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uLCBjb25zdGFudCBmbG9hdFtdIHRoZUJ1ZmZlciA6
IHJlZ2lzdGVyKGIwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NCh0aGVCdWZm
ZXJbMF0sIHRoZUJ1ZmZlclswXSwgdGhlQnVmZmVyWzBdLCAxLjApOwotfQotYDsKLQotY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0gICAgCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtz
aGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmlidXRl
MSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQifTsKLSAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OwotICAgIGNvbnN0
IGlucHV0MSA9IHtzdHJpZGU6IDQsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTFdfTsKLSAgICBj
b25zdCBpbnB1dHMgPSBbaW5wdXQwLCBpbnB1dDFdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1
bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91
cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBh
d2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZm
ZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs5XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAxOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTJdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTNdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVu
bWFwKCk7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVS
VEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIx
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7Ci0gICAgY29u
c3QgdmVydGV4QnVmZmVyMUFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0
ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkodmVydGV4QnVmZmVyMUFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxv
YXQzMkFycmF5WzBdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsK
LSAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzJdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIx
RmxvYXQzMkFycmF5WzNdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7Ci0KLSAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVz
YWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlb
MF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJC
aW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJp
bmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9Owot
ICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQs
IGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBj
b250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRl
c2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dh
cENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7
Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgp
OwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZh
dWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29t
bWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwg
YTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0
VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVP
cDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JB
dHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFz
c0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2Ny
aXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5l
KTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2
ZXJ0ZXhCdWZmZXIxXSwgWzAsIDBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0g
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBm
dW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci1sZW5ndGgtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci1sZW5ndGgtZXhwZWN0ZWQudHh0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdm
OGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItbGVuZ3RoLWV4cGVjdGVkLnR4dAor
KysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYnVmZmVyLWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWJ1ZmZlci1sZW5ndGguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMyMmM2
ZGQ1NjlmY2Y2MWNhNzE0OTFjMzVmNjE5ZWNhODM3NTg5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVy
LWxlbmd0aC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPCFET0NUWVBFIGh0
bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBg
Ci1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSB1aW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7Ci0gICAgYnVmZmVyWzBdID0gYnVmZmVyLmxlbmd0aDsKLX0KLWA7Ci0K
LWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlw
ZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmlu
ZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
UGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5l
TGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0
ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9
IFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTMzNzsKLQotICAgIGNvbnN0IGJ1ZmZl
ckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQ
VUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZl
ciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVyVWludDMy
QXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlclVp
bnQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3Vs
dHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9
OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNC
dWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBy
ZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRp
bmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNj
cmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJp
bmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJp
bmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVm
ZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCAxICogVWludDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1h
bmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0Qmlu
ZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEs
IDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVm
ZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1
bHRVaW50MzJBcnJheSA9IG5ldyBVaW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAg
IGlmIChyZXN1bHRVaW50MzJBcnJheVswXSA9PSAxMzM3KQotICAgICAgICB0ZXN0UGFzc2VkKCIi
KTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgIHJlc3VsdHNCdWZmZXIu
dW5tYXAoKTsKLX0KLXdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLWdldEJhc2ljRGV2aWNl
KCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAg
ICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSk7Ci19
LCBmdW5jdGlvbigpIHsKLSAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBmaW5pc2hKU1Rlc3QoKTsK
LX0pOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRleC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWJ1ZmZlci12ZXJ0ZXgtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRleC1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAg
LTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxz
Y3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
Ci1kcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9z
Y3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYnVmZmVyLXZlcnRleC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZl
ci12ZXJ0ZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwZjI4MDgxYzYx
OGUwYjAzMDg3MTk5NzZkOWJiNWM1NWI3YzZjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRl
eC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAot
dmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoY29uc3RhbnQgZmxvYXQ0W10gYnVmZmVyIDogcmVn
aXN0ZXIoYjApLCB1aW50IGlkIDogU1ZfVmVydGV4SUQpIDogU1ZfUG9zaXRpb24gewotICAgIHJl
dHVybiBidWZmZXJbaWRdOwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBm
bG9hdDQoMS4wLCAxLjAsIDEuMCwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2
aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIi
fTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9
ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250
RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9
OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7
Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazog
MTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3Rh
dGUgPSBudWxsOwotCi0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogW119
OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3ti
aW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAg
IGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBw
aXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91
dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3Zl
cnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlv
blN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1w
bGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSA0ICogNCAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVDsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07
Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9
IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAg
IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICByZXNvdXJjZUJ1ZmZl
ckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsz
XSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OwotICAgIHJl
c291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxv
YXQzMkFycmF5WzZdID0gMS4wOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzddID0g
MTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbMTBdID0gMS4wOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7
Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OwotICAgIHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJB
cnJheVsxNF0gPSAxLjA7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsK
LSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5k
aW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBi
aW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczog
W2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNh
bnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0g
e2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNv
bnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0
IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25z
dCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsK
LQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVy
KCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAg
IGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3
LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIs
IGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBu
dWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMs
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0g
Y29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFz
c0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwot
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGlu
LXZlY3RvcnMtMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRp
bi12ZWN0b3JzLTItZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
ZTdiMDE3MmVlY2M2MTUyM2YxMWNmNWQyNmIxMTkwNGU4MTY0YWUxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1i
dWlsdGluLXZlY3RvcnMtMi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAg
QEAKLQotUEFTUyBidWlsdGluVmVjdG9yR2V0dGVycyAKLVBBU1MgYnVpbHRpblZlY3RvclNldHRl
cnMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGluLXZlY3Rv
cnMtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy0yLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTdhODM2NmY1ZjIzOTNlZWY0N2U1
YWY1ZTZkNDIwZjhhMTY2YjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy0yLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxvbmci
PgotPHRpdGxlPlRlc3QgbG9vcHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0
LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLWNvbnN0IGNo
ZWNrRnVuY3MgPSB7Ci0gICAgInVpbnQiOiBjYWxsVWludEZ1bmN0aW9uLAotICAgICJpbnQiOiBj
YWxsSW50RnVuY3Rpb24sCi0gICAgImZsb2F0IjogY2FsbEZsb2F0RnVuY3Rpb24KLX07Ci1jb25z
dCB0eXBlTmFtZXMgPSBbICJ1aW50IiwgImludCIsICJmbG9hdCIgXTsKLWNvbnN0IHNpemVzID0g
WyAyLCAzLCA0IF07Ci1jb25zdCBlbGVtZW50cyA9IFsgIngiLCAieSIsICJ6IiwgInciIF07Ci1j
b25zdCBpbml0aWFsaXplckxpc3QgPSBbIDEsIDIsIDMsIDQgXTsKLQotd2hsc2xUZXN0cy5idWls
dGluVmVjdG9yR2V0dGVycyA9IGFzeW5jICgpID0+Ci17Ci0KLSAgICBsZXQgdGVzdHMgPSBbXTsK
LSAgICBsZXQgc3JjID0gIiI7Ci0gICAgZm9yIChsZXQgdHlwZU5hbWUgb2YgdHlwZU5hbWVzKSB7
Ci0gICAgICAgIGZvciAobGV0IHNpemUgb2Ygc2l6ZXMpIHsKLSAgICAgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25O
YW1lID0gYCR7dHlwZU5hbWV9JHtzaXplfSR7ZWxlbWVudHNbaV19YDsKLSAgICAgICAgICAgICAg
ICBzcmMgKz0gYCR7dHlwZU5hbWV9ICR7ZnVuY3Rpb25OYW1lfSgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3NpemV9
IHggPSAke3R5cGVOYW1lfSR7c2l6ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6ZSku
am9pbigiLCAiKX0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LiR7ZWxl
bWVudHNbaV19OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgYDsKLSAgICAgICAgICAgICAgICB0ZXN0cy5wdXNoKHsgdHlwZTogdHlwZU5hbWUsIG5h
bWU6IGZ1bmN0aW9uTmFtZSwgZXhwZWN0YXRpb246IGluaXRpYWxpemVyTGlzdFtpXSB9KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGxldCBwcm9ncmFtID0gc3JjOwot
ICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKLSAgICAgICAgY29uc3QgY2hlY2tGdW5jID0g
Y2hlY2tGdW5jc1t0ZXN0LnR5cGVdOwotICAgICAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNoZWNr
RnVuYyhwcm9ncmFtLCB0ZXN0Lm5hbWUsIFtdKSwgdGVzdC5leHBlY3RhdGlvbik7Ci0gICAgfQot
fTsKLQotd2hsc2xUZXN0cy5idWlsdGluVmVjdG9yU2V0dGVycyA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgbGV0IHRlc3RzID0gW107Ci0gICAgbGV0IHNyYyA9ICIiOwotICAgIGZvciAobGV0IHR5cGVO
YW1lIG9mIHR5cGVOYW1lcykgewotICAgICAgICBmb3IgKGxldCBzaXplIG9mIHNpemVzKSB7Ci0g
ICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAg
ICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGAke3R5cGVOYW1lfSR7c2l6ZX0ke2VsZW1lbnRzW2ld
fWA7Ci0gICAgICAgICAgICAgICAgc3JjICs9IGAke3R5cGVOYW1lfSAke2Z1bmN0aW9uTmFtZX0o
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICR7dHlwZU5hbWV9JHtzaXplfSB4ID0gJHt0eXBlTmFtZX0ke3NpemV9KCR7aW5pdGlhbGl6ZXJM
aXN0LnNsaWNlKDAsIHNpemUpLmpvaW4oIiwgIil9KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4LiR7ZWxlbWVudHNbaV19ID0gMzQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHguJHtlbGVtZW50c1tpXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBgOwotICAgICAgICAgICAgICAgIHRlc3RzLnB1c2goeyB0eXBl
OiB0eXBlTmFtZSwgbmFtZTogZnVuY3Rpb25OYW1lLCBleHBlY3RhdGlvbjogMzQgfSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBsZXQgcHJvZ3JhbSA9IHNyYzsKLSAg
ICBmb3IgKGxldCB0ZXN0IG9mIHRlc3RzKSB7Ci0gICAgICAgIGNvbnN0IGNoZWNrRnVuYyA9IGNo
ZWNrRnVuY3NbdGVzdC50eXBlXTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjaGVja0Z1
bmMocHJvZ3JhbSwgdGVzdC5uYW1lLCBbXSksIHRlc3QuZXhwZWN0YXRpb24pOwotICAgIH0KLX0K
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAxYzdhMjgyZWY2YjVlMjc5NjU3MDJjMTlh
Y2Y0ZTE1NGU4Y2FhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIGJ1aWx0aW5WZWN0b3JJbmRl
eFNldHRlcnMgCi1QQVNTIGJ1aWx0aW5WZWN0b3JzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0b3JzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYnVpbHRpbi12ZWN0b3JzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDIxNDk0ZjMxYjVkZjljZjliMTU1OTQxMjM2MWI3YzY1ZDhkZjg4NDAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWJ1aWx0aW4tdmVjdG9ycy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgotPHNj
cmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNs
VGVzdHMgPSB7fTsKLQotY29uc3QgY2hlY2tGdW5jcyA9IHsKLSAgICAidWludCI6IGNhbGxVaW50
RnVuY3Rpb24sCi0gICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKLSAgICAiZmxvYXQiOiBjYWxs
RmxvYXRGdW5jdGlvbgotfTsKLWNvbnN0IHR5cGVOYW1lcyA9IFsgInVpbnQiLCAiaW50IiwgImZs
b2F0IiBdOwotY29uc3Qgc2l6ZXMgPSBbIDIsIDMsIDQgXTsKLWNvbnN0IGVsZW1lbnRzID0gWyAi
eCIsICJ5IiwgInoiLCAidyIgXTsKLWNvbnN0IGluaXRpYWxpemVyTGlzdCA9IFsgMSwgMiwgMywg
NCBdOwotCi13aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JJbmRleFNldHRlcnMgPSBhc3luYyAoKSA9
PgotewotICAgIGxldCB0ZXN0cyA9IFtdOwotICAgIGxldCBzcmMgPSAiIjsKLSAgICBmb3IgKGxl
dCB0eXBlTmFtZSBvZiB0eXBlTmFtZXMpIHsKLSAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBzaXpl
cykgewotICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0ke3NpemV9JHtlbGVt
ZW50c1tpXX1gOwotICAgICAgICAgICAgICAgIHNyYyArPSBgJHt0eXBlTmFtZX0gJHtmdW5jdGlv
bk5hbWV9KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAke3R5cGVOYW1lfSR7c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtzaXplfSgke2luaXRp
YWxpemVyTGlzdC5zbGljZSgwLCBzaXplKS5qb2luKCIsICIpfSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeFske2l9XSA9IDM0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB4WyR7aX1dOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgYDsKLSAgICAgICAgICAgICAgICB0ZXN0cy5wdXNoKHsgdHlwZTogdHlwZU5hbWUs
IG5hbWU6IGZ1bmN0aW9uTmFtZSwgZXhwZWN0YXRpb246IDM0IH0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgbGV0IHByb2dyYW0gPSBzcmM7Ci0gICAgZm9yIChsZXQg
dGVzdCBvZiB0ZXN0cykgewotICAgICAgICBjb25zdCBjaGVja0Z1bmMgPSBjaGVja0Z1bmNzW3Rl
c3QudHlwZV07Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2hlY2tGdW5jKHByb2dyYW0s
IHRlc3QubmFtZSwgW10pLCB0ZXN0LmV4cGVjdGF0aW9uKTsKLSAgICB9Ci19OwotCi13aGxzbFRl
c3RzLmJ1aWx0aW5WZWN0b3JzID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAK
LSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDIgYSA9IGludDIo
MywgNCk7Ci0gICAgICAgICAgICByZXR1cm4gYVswXTsKLSAgICAgICAgfQotICAgICAgICBpbnQg
Zm9vMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDIgYSA9IGludDIoMywgNCk7Ci0gICAg
ICAgICAgICBpbnQzIGIgPSBpbnQzKGEsIDUpOwotICAgICAgICAgICAgcmV0dXJuIGJbMV07Ci0g
ICAgICAgIH0KLSAgICAgICAgaW50IGZvbzMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQz
IGEgPSBpbnQzKDMsIDQsIDUpOwotICAgICAgICAgICAgaW50NCBiID0gaW50NCg2LCBhKTsKLSAg
ICAgICAgICAgIHJldHVybiBiWzFdOwotICAgICAgICB9Ci0gICAgICAgIGludCBmb280KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50MiBhID0gaW50MigzLCA0KTsKLSAgICAgICAgICAgIGlu
dDIgYiA9IGludDIoNSwgNik7Ci0gICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0KGEsIGIpOwotICAg
ICAgICAgICAgcmV0dXJuIGNbMl07Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb281KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50NCBhID0gaW50NCgzLCA0LCA1LCA2KTsKLSAgICAgICAg
ICAgIGludDIgYiA9IGludDIoNCwgNSk7Ci0gICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0KDMsIGIs
IDYpOwotICAgICAgICAgICAgcmV0dXJuIGEgPT0gYzsKLSAgICAgICAgfQotICAgICAgICBib29s
IGZvbzYoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQyIGEgPSBpbnQyKDQsIDUpOwotICAg
ICAgICAgICAgaW50MyBiID0gaW50MygzLCBhKTsKLSAgICAgICAgICAgIGludDMgYyA9IGludDMo
MywgNCwgNik7Ci0gICAgICAgICAgICByZXR1cm4gYiA9PSBjOwotICAgICAgICB9Ci0gICAgICAg
IHVpbnQgZm9vdSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVpbnQyIGEgPSB1aW50MigzLCA0
KTsKLSAgICAgICAgICAgIHJldHVybiBhWzBdOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9v
dTIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50MiBhID0gdWludDIoMywgNCk7Ci0gICAg
ICAgICAgICB1aW50MyBiID0gdWludDMoYSwgNSk7Ci0gICAgICAgICAgICByZXR1cm4gYlsxXTsK
LSAgICAgICAgfQotICAgICAgICB1aW50IGZvb3UzKCkKLSAgICAgICAgewotICAgICAgICAgICAg
dWludDMgYSA9IHVpbnQzKDMsIDQsIDUpOwotICAgICAgICAgICAgdWludDQgYiA9IHVpbnQ0KDYs
IGEpOwotICAgICAgICAgICAgcmV0dXJuIGJbMV07Ci0gICAgICAgIH0KLSAgICAgICAgdWludCBm
b291NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVpbnQyIGEgPSB1aW50MigzLCA0KTsKLSAg
ICAgICAgICAgIHVpbnQyIGIgPSB1aW50Mig1LCA2KTsKLSAgICAgICAgICAgIHVpbnQ0IGMgPSB1
aW50NChhLCBiKTsKLSAgICAgICAgICAgIHJldHVybiBjWzJdOwotICAgICAgICB9Ci0gICAgICAg
IGJvb2wgZm9vdTUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50NCBhID0gdWludDQoMywg
NCwgNSwgNik7Ci0gICAgICAgICAgICB1aW50MiBiID0gdWludDIoNCwgNSk7Ci0gICAgICAgICAg
ICB1aW50NCBjID0gdWludDQoMywgYiwgNik7Ci0gICAgICAgICAgICByZXR1cm4gYSA9PSBjOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vdTYoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1
aW50MiBhID0gdWludDIoNCwgNSk7Ci0gICAgICAgICAgICB1aW50MyBiID0gdWludDMoMywgYSk7
Ci0gICAgICAgICAgICB1aW50MyBjID0gdWludDMoMywgNCwgNik7Ci0gICAgICAgICAgICByZXR1
cm4gYiA9PSBjOwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvb2YoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOwotICAgICAgICAgICAgcmV0dXJu
IGFbMF07Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vZjIoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOwotICAgICAgICAgICAgZmxvYXQzIGIg
PSBmbG9hdDMoYSwgNS4pOwotICAgICAgICAgICAgcmV0dXJuIGJbMV07Ci0gICAgICAgIH0KLSAg
ICAgICAgZmxvYXQgZm9vZjMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDMgYSA9IGZs
b2F0MygzLiwgNC4sIDUuKTsKLSAgICAgICAgICAgIGZsb2F0NCBiID0gZmxvYXQ0KDYuLCBhKTsK
LSAgICAgICAgICAgIHJldHVybiBiWzFdOwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvb2Y0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQyIGEgPSBmbG9hdDIoMy4sIDQuKTsKLSAg
ICAgICAgICAgIGZsb2F0MiBiID0gZmxvYXQyKDUuLCA2Lik7Ci0gICAgICAgICAgICBmbG9hdDQg
YyA9IGZsb2F0NChhLCBiKTsKLSAgICAgICAgICAgIHJldHVybiBjWzJdOwotICAgICAgICB9Ci0g
ICAgICAgIGJvb2wgZm9vZjUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDQgYSA9IGZs
b2F0NCgzLiwgNC4sIDUuLCA2Lik7Ci0gICAgICAgICAgICBmbG9hdDIgYiA9IGZsb2F0Mig0Liwg
NS4pOwotICAgICAgICAgICAgZmxvYXQ0IGMgPSBmbG9hdDQoMy4sIGIsIDYuKTsKLSAgICAgICAg
ICAgIHJldHVybiBhID09IGM7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb29mNigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZsb2F0MiBhID0gZmxvYXQyKDQuLCA1Lik7Ci0gICAgICAgICAg
ICBmbG9hdDMgYiA9IGZsb2F0MygzLiwgYSk7Ci0gICAgICAgICAgICBmbG9hdDMgYyA9IGZsb2F0
MygzLiwgNC4sIDYuKTsKLSAgICAgICAgICAgIHJldHVybiBiID09IGM7Ci0gICAgICAgIH0KLSAg
ICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSksIDMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28yIiwgW10pLCA0KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDUpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgdHJ1ZSk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb282
IiwgW10pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9u
KHByb2dyYW0sICJmb291IiwgW10pLCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxV
aW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UyIiwgW10pLCA0KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UzIiwgW10pLCAzKTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U0IiwgW10p
LCA1KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvb3U1IiwgW10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvb3U2IiwgW10pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vZiIsIFtdKSwgMyk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vZjIiLCBbXSks
IDQpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvb2YzIiwgW10pLCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0
aW9uKHByb2dyYW0sICJmb29mNCIsIFtdKSwgNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNSIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNiIsIFtdKSwgZmFs
c2UpOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jYXN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDViN2NlNGM3ZDhlNDFhN2VhNWZhOTNkYzM2NDkxMWEyZTQzMWJk
YTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDQgKzAsMCBAQAotCi1QQVNTIGNhc3RzIAotUEFTUyBzZWxmQ2FzdHMgCi0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jYXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWNhc3RzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZmVmNDJi
Yzg2NGM3NzBiMzMxMmMwYjU2OTQxY2UyZGRmNmI2MGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLmh0
bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgotPHRpdGxlPkJhZCBhZGQuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0
LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVz
dHMuY2FzdHMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBz
dHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIHN0cnVj
dCBCYXIgewotICAgICAgICAgICAgaW50IHk7Ci0gICAgICAgIH0KLSAgICAgICAgb3BlcmF0b3Ig
QmFyKEZvbyBmb28pIHsKLSAgICAgICAgICAgIEJhciBiOwotICAgICAgICAgICAgYi55ID0gZm9v
LnggKyA3OwotICAgICAgICAgICAgcmV0dXJuIGI7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJh
eihpbnQgeikgewotICAgICAgICAgICAgRm9vIGZvbzsKLSAgICAgICAgICAgIGZvby54ID0gejsK
LSAgICAgICAgICAgIEJhciBiID0gQmFyKGZvbyk7Ci0gICAgICAgICAgICByZXR1cm4gYi55Owot
ICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiYmF6IiwgW21ha2VJbnQoNildKSwgMTMpOwotfQotCi13aGxzbFRlc3RzLnNl
bGZDYXN0cyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0
cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZv
bygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICBmb28ueCA9
IDIxOwotICAgICAgICAgICAgRm9vIGJhciA9IEZvbyhmb28pOwotICAgICAgICAgICAgYmFyLngg
PSA0MjsKLSAgICAgICAgICAgIHJldHVybiBmb28ueCArIGJhci54OwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCAyMSArIDQyKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXIt
c2hvdWxkLXNldC10eXBlLW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2Yt
cmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3Jp
dGUtdmFyaWFibGVzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAot
UEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0
LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUt
dmFyaWFibGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNzk5YmY1YTNj
MDRjYjU1OWUwNzdmYjMyMGZlZWRkMzM4YjA3NjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXItc2hv
dWxkLXNldC10eXBlLW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsODAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1bbnVtdGhyZWFkcygxLCAxLCAx
KV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJl
Z2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAg
IGZsb2F0NCB2ZWM7Ci0gICAgdmVjWzBdICs9IDQyLjA7Ci0gICAgYnVmZmVyW3VpbnQodGhyZWFk
SUQueCldID0gdmVjWzBdOwotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdl
ID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9Owot
Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5k
aW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNv
bnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdy
b3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERl
c2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21w
dXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
ICogMTsKLQotICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAg
Y29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
Ci0gICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJB
cnJheUJ1ZmZlcik7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIu
dW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNU
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29u
c3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30K
LSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRz
QnVmZmVyLCAwLCBzaXplKTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5k
RW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBp
cGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRH
cm91cCgwLCBiaW5kR3JvdXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAx
LCAxKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1h
bmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUo
KS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZl
ciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVzdWx0
c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAg
ICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PSA0MikKLSAgICAgICAgdGVzdFBhc3NlZCgi
Iik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVy
LnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0Rldmlj
ZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0
aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwot
fSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7
Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWNvbW1lbnQtcGFyc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWNiNDA5MWJkODExYmY3NWZlZDM2MmVlZjQwNTIyNzViNmNmN2ZjNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxs
CkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGNvbW1lbnRQYXJzaW5nIAotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tbWVudC1wYXJzaW5nLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtY29tbWVudC1wYXJzaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQyMzg1ZmFmYzY1YjU3NTY1YjEzM2EyMmQ3NDVjNTk1MzM2M2FmMzcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWNvbW1lbnQtcGFyc2luZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0
YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90
aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1j
b25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuY29tbWVudFBhcnNpbmcgPSBhc3lu
YyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIC8qIHRoaXMgY29tbWVudAot
ICAgICAgICBydW5zIG92ZXIgbXVsdGlwbGUgbGluZXMgKi8KLSAgICAgICAgYm9vbCBmb28oKSB7
IHJldHVybiB0cnVlOyB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7Ci0KLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgLyogdGhpcyBjb21tZW50Ci0gICAgICAgIHJ1bnMgb3Zl
ciBtdWx0aXBsZSBsaW5lcwotICAgICAgICBib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLWV4cGVjdGVkLnR4dApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3Zjhm
NmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tcHV0ZS1leHBlY3RlZC50eHQKKysrIC9kZXYv
bnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWNvbXB1dGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLmh0bWwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYjBlOWE0YmJiYmUxMWIzMmUyYmVmN2Nl
ZTVkMThkOTI0ZDBkOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDkyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08
c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMiwgMSwgMSldCi1j
b21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rl
cih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBidWZm
ZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Ci19
Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBj
b25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0
ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4OwotCi0gICAgY29uc3Qg
YnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBidWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlb
M10gPSA0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQz
MkFycmF5WzVdID0gNjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OwotICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBy
ZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RP
UkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9S
RUFEfTsKLSAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1
bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZl
cjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHti
aW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3Vw
RGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3Jv
dXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29w
eUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAg
Y29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFz
cygpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUp
OwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAg
ICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goMiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Ci0KLSAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVy
Lm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJy
YXlbMF0gPT0gMgotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQKLSAgICAg
ICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9h
dDMyQXJyYXlbM10gPT0gOAotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUK
LSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9PSA2Ci0gICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNl0gPT0gNwotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5Wzdd
ID09IDgpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZh
aWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewot
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0
KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNz
ZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5LWV4cGVjdGVkLnR4dApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDZhNGJkY2Y0MzY2OGFjZDRhMGU3N2M0ZmYzNmU5MzkxMjBk
ZWE3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtY29weS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwzICswLDAgQEAKLQotUEFTUyBjb3B5QXJyYXkgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1jb3B5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29weS5o
dG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGMxOTdiMmQ5MWFjNjBmNjk1YTI2
NmFkYzcwN2NmZTI5NGJlNTVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5Lmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwzNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNl
dD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkNv
cHlpbmcuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuY29weUFycmF5ID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludFsxMF0geHM7Ci0gICAgICAgICAgICBmb3IgKHVpbnQg
aSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB4c1tpXSA9IGludChp
KSArIDE7Ci0gICAgICAgICAgICBpbnRbMTBdIHlzID0geHM7Ci0gICAgICAgICAgICBmb3IgKHVp
bnQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB4c1tpXSA9IDA7
Ci0gICAgICAgICAgICBpbnQgc3VtID0gMDsKLSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsg
aSA8IHlzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIHlzW2ldOwot
ICAgICAgICAgICAgcmV0dXJuIHN1bTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTUpOwotfQot
Ci1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVyZW5jZS1vcmRlcmluZy1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzYxN2VlZjVmZTQ3MjQyMmVk
MGE0ZmI1ZjgyNmQwMGEyMzhmY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5n
LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGNhbGxB
cmd1bWVudHNBcmVDb3BpZWRJbW1lZGlhdGVseUFmdGVyRXZhbHVhdGlvbiAKLQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0YmFiZjY3MWE0MzcwNzcyYTMxMTJlYTBiMDRjNDVh
MjNkYjY3MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDMyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBj
aGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0
bGU+RGVyZWZlcmVuY2Ugb3JkZXJpbmcuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNs
VGVzdHMuY2FsbEFyZ3VtZW50c0FyZUNvcGllZEltbWVkaWF0ZWx5QWZ0ZXJFdmFsdWF0aW9uID0g
YXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpiYXIoNSkgKyAqYmFyKDcpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50IHggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAgfQot
ICAgIGA7Ci0KLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCAxMik7Ci19OwotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJl
bmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2stZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kZXJlZmVyZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLWV4cGVj
dGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMyMWYzMzNh
NTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50
ZXItc2hvdWxkLXR5cGUtY2hlY2stZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEz
ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0
PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJh
d1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0
PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kZXJlZmVyZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLmh0bWwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyY2VjOTZjY2FkZmM4ZmRiOTc0OGRiNWE0
YWVjOWUzYTliNzljNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxk
LXR5cGUtY2hlY2suaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNv
dXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVy
dGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0
IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIHRo
cmVhZCBmbG9hdCogcHRyMiA9ICZzaGFkZTsKLSAgICAqcHRyMiA9IHNoYWRlOwotCi0gICAgcmVz
dWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gKnB0cjI7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9h
dDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQo
ZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1v
ZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVy
dGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFk
ZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9n
eSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zy
b250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9
IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9
IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFz
azogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2ls
U3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjog
MCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0g
e3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNv
bnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5w
dXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVy
In1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0g
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJh
c3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJ
bnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41Owot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotCi0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1h
cCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owot
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAw
KTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rp
b24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2Fu
dmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3Rl
ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmY4NjlhOTc5NmYzNTg2NWIy
OGM2YjY1ZjhiMjAyZmI5ZmQyMmU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFr
LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdCbGFja1NxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFr
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFjYTU1ZDJkOGIyZDMxNjcxMjVjY2Y1
YTllYzYzMjAyN2Y2MzhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3Qg
VmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFk
ZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBib29sIGIgPSB0cnVlOwotICAg
IGRvIHsKLSAgICAgICAgaWYgKGIpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfSB3aGlsZSAoKHNoYWRlID0gMS4wLCBmYWxzZSkpOwotCi0gICAgcmVzdWx0LnBvc2l0aW9u
ID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNo
YWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0g
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBj
b25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
ZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmds
ZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3
IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNv
bnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAi
cmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8g
R1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxs
OwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0
aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNvbnN0IGF0dHJpYnV0
ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlk
ZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsK
LQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7Ymlu
ZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0
ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25T
dGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxl
Q291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZF
UlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVy
MCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3Jp
dGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9
IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOwotCi0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
Nl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxOV0gPSAwLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0g
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJl
c291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBi
aW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsK
LSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0
LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5E
ZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3
YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3Ip
OwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUo
KTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVm
YXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNv
bW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEs
IGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1
dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3Jl
T3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9y
QXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBh
c3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNj
cmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0g
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0s
IFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5k
ZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewot
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAg
ZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwot
fSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIx
YWZmMDNkYjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4
cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVl
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1jb250aW51ZS5o
dG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Nzg5NmU4MGVlOWE5N2E4ZGQwOTgy
MTJjYmFmYjM4YWJhNDBhODhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVl
Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08
aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhl
aWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1z
dHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAg
ICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0
ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0
dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBib29sIGIgPSB0cnVl
OwotICAgIHVpbnQgaSA9IDA7Ci0gICAgZG8gewotICAgICAgICBpZiAoYikgewotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc2hhZGUgPSAwLjA7Ci0gICAgfSB3aGls
ZSAoKGkgPSBpICsgMSwgc2hhZGUgPSBzaGFkZSArIDAuMSwgaSA8IDEwKSk7Ci0KLSAgICByZXN1
bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0
NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChk
ZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7Ci0KLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9Owot
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0g
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlv
bigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2Ri
MzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVh
ZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVh
ZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1kby13aGlsZS1sb29wLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQwOWM1YzgxMGZjOTQ3Nzg0NzBiZjE4MWEyMmIyYzI3ZmM1ZjRjZDEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWRvLXdoaWxlLWxvb3AuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRl
clNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNW
X1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXgg
VmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZs
b2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAg
IGRvIHsKLSAgICAgICAgc2hhZGUgPSAxLjA7Ci0gICAgfSB3aGlsZShmYWxzZSk7Ci0KLSAgICBy
ZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihm
bG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZs
b2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFy
dChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2
ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEg
PSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAg
Y29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBp
bnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25z
dCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZm
ZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZm
ZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3Jv
dXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsK
LSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChw
aXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwg
cmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRl
eElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29u
c3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0g
e3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4
QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
OV0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
M10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7Ci0KLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVu
bWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9S
TSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdy
aXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZm
ZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAg
ICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9
OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1
ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBi
aW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0
IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7
Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNv
bnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07
Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENo
YWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRD
dXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4
dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjog
MCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0
YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDog
ImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3Qg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2Ny
aXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAg
Y29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3Mo
cmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwg
YmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2
ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5j
dGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVu
dW0tZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1
MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFz
aC1wYXJzaW5nLWVudW0tZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRl
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9i
b2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvbnQt
Y3Jhc2gtcGFyc2luZy1lbnVtLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1j
cmFzaC1wYXJzaW5nLWVudW0uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEz
ZjI0NTAxMjZmZmMyNDkyYmQ1ZTFlMTg4MTA2YjEyNDFmZDBjNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9u
dC1jcmFzaC1wYXJzaW5nLWVudW0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBA
Ci08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0
IHNoYWRlclNvdXJjZSA9IGAKLQotZW51bSBEb250Q3Jhc2ggewotICAgIFZhbHVlCi19Ci0KLXZl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwg
ZmxvYXQgaSA6IGF0dHJpYnV0ZSgxKSkgOiBTVl9Qb3NpdGlvbiB7Ci0gICAgcmV0dXJuIHBvc2l0
aW9uOwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0K
LWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
LQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
LSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotICAgIAotICAgIGNvbnN0IGF0
dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNv
bnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0In07Ci0g
ICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBd
fTsKLSAgICBjb25zdCBpbnB1dDEgPSB7c3RyaWRlOiA0LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1
dGUxXX07Ci0gICAgY29uc3QgaW5wdXRzID0gW2lucHV0MCwgaW5wdXQxXTsKLSAgICBjb25zdCB2
ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5
OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91
dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNh
Z2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1
ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFy
cmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29u
c3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVm
ZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbM10gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAtMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs2XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0g
MTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTBdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gMTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDE7Ci0gICAgdmVy
dGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMURlc2NyaXB0b3Ig
PSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3Qg
dmVydGV4QnVmZmVyMSA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMURlc2NyaXB0
b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjEubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlcik7Ci0gICAgdmVy
dGV4QnVmZmVyMUZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJB
cnJheVsxXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsyXSA9IDE7Ci0gICAg
dmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVszXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMS51bm1h
cCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owot
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyMCwgdmVydGV4QnVmZmVyMV0sIFswLCAwXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29k
ZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0g
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZp
Y2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5j
dGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwot
ICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dy
b3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lv
bnMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lv
bnMtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1
MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJl
c3Npb25zLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lv
bnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4ZDUwYmY4ZTQ1NDljMjkwNTJmNWVkMTBk
MzI0YTI3ZDhhMDQxNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLmh0bWwKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFk
PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4
T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkg
ewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247
Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6
IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEu
MCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0
IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OwotICAg
IGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwg
b2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1
dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRy
aWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJ
bnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0
eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFti
aW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVh
dGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBw
cmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhT
dGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGlu
ZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVy
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2
ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVm
ZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFy
cmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29u
c3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJl
c291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7
Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVm
ZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3Vy
Y2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGlu
ZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2Ny
aXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmlu
ZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmlu
ZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAg
ICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JB
dHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJn
ZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjog
cmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29u
c3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2ls
QXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsK
LSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAg
ZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0Rl
dmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3Qt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QtZXhwZWN0
ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjc0MzE4OWVkZjhkNWUyMzBj
NThlYzI1ODA4YTA2MzMzOTZjODcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3VibGUtbm90LWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGRvdWJsZU5vdCAKLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3VibGUtbm90Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDdlOWY1YmQ3YzNjNWNhZjVmMTM4YjA0MWEyZDY5ZDg4NGVmNDhhZDQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+Q29weWluZy48L3RpdGxlPgot
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5kb3VibGVOb3QgPSBhc3luYyAoKSA9Pgotewot
ICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBib29sIGZvbyhib29sIHgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAhIXg7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRy
dWUpXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7Ci19Ci0KLXJ1blRlc3Rz
KHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNh
dGUtY3RvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0
ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3
ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3Qt
cHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEs
NSArMCwwIEBACi1QQVNTIAotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNU
IENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNh
dGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVw
bGljYXRlLWN0b3JzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNDIzOGQz
N2ZlYzgzM2ZkYzliYmFjM2UyNmUzMWJlNDcyYzEzOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0
ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgWFlaIHsKLSAgICBp
bnQgeDsKLSAgICBpbnQgeTsKLSAgICBpbnQgejsKLX0KLQotdHlwZWRlZiBYWVoxID0gWFlaOwot
dHlwZWRlZiBYWVoyID0gWFlaOwotdHlwZWRlZiBYWVozID0gWFlaOwotCi1bbnVtdGhyZWFkcygy
LCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZl
ciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkg
ewotICAgIHRocmVhZCBpbnQqIHg7Ci0gICAgdGhyZWFkIGludCogeTsKLSAgICB0aHJlYWQgZmxv
YXQqIGYxOwotICAgIHRocmVhZCBmbG9hdCogZjI7Ci0gICAgWFlaMSBhOwotICAgIFhZWjIgYjsK
LSAgICBYWVozIGM7Ci0gICAgdGhyZWFkIGludFtdIGludEFycmF5UmVmMTsKLSAgICB0aHJlYWQg
aW50W10gaW50QXJyYXlSZWYyOwotICAgIGlmICgqeCA9PSAqeSAmJiB4ID09IHkgJiYgeCA9PSBu
dWxsICYmIGYxID09IG51bGwgJiYgKmYxID09IDApIHsKLSAgICAgICAgYnVmZmVyW3VpbnQodGhy
ZWFkSUQueCldID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOwotICAgIH0KLX0KLWA7
Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29t
cHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6
ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7Ci0KLSAgICBjb25zdCBidWZm
ZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBH
UFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZm
ZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKLSAg
ICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9
IDQ7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKLSAgICBidWZmZXJGbG9hdDMyQXJy
YXlbNV0gPSA2OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7Ci0gICAgYnVmZmVyRmxv
YXQzMkFycmF5WzddID0gODsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3Vs
dHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9
OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNC
dWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBy
ZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRp
bmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNj
cmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJp
bmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJp
bmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVm
ZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA4KTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21t
YW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNl
dFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJp
bmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgy
LCAxLCAxKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1
ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVz
dWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsK
LSAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PSAyCi0gICAgICAgICYmIHJlc3VsdHNG
bG9hdDMyQXJyYXlbMV0gPT0gNAotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzJdID09
IDYKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSA9PSA4Ci0gICAgICAgICYmIHJl
c3VsdHNGbG9hdDMyQXJyYXlbNF0gPT0gNQotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5
WzVdID09IDYKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PSA3Ci0gICAgICAg
ICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT0gOCkKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7
Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVu
bWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgp
LnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9u
KCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwg
ZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19
KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWR1cGxpY2F0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWR1cGxpY2F0ZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4MjBhNGViNGI2ZmJjMGNkOGUyODc1NjIzMzUxMmY5MGQ4NGY3YzgwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kdXBsaWNhdGVzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAot
Ci1QQVNTIGR1cGxpY2F0ZUZ1bmN0aW9ucyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWR1cGxpY2F0ZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBs
aWNhdGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZWQ5NmM1MWYwM2Yw
M2ZlN2FjNTJlYTg2YzU0NmRhOWFkM2IyNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Ci08dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5kdXBsaWNhdGVGdW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdh
aXQgY2hlY2tGYWlsKGAKLSAgICAgICAgdm9pZCBmb28oKSB7IH0KLSAgICAgICAgdm9pZCBmb28o
KSB7IH0KLSAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIHZvaWQgZm9v
KGludCB4KSB7IH0KLSAgICAgICAgdHlwZWRlZiBBID0gaW50OwotICAgICAgICB2b2lkIGZvbyhB
IHgpIHsgfQotICAgIGApOwotCi0gICAgY29uc3QgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGJh
cigpIHsKLSAgICAgICAgICAgIHJldHVybiA0MjsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFy
KGludCB4KSB7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgICAgICBpbnQg
Zm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGJhcigpOwotICAgICAgICB9Ci0g
ICAgICAgIGludCBiYXooKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYmFyKDMpOwot
ICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgMyk7Ci0KLSAgICBhd2FpdCBjaGVja0Zh
aWwoYAotICAgICAgICBpbnQgb3BlcmF0b3ImW10odGhyZWFkIGludFtdIGEsIHVpbnQgYikgewot
ICAgICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICAgIH0KLSAgICBgKTsKLQotICAgIGF3YWl0IGNo
ZWNrRmFpbChgCi0gICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKHRocmVhZCBpbnRbXSBhKSB7
Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgfQotICAgIGApOwotCi0gICAgYXdhaXQg
Y2hlY2tGYWlsKGAKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnRbXSBhLCB0aHJl
YWQgaW50W10gYikgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICBg
KTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PSh0aHJl
YWQgaW50KiBhLCB0aHJlYWQgaW50KiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIGApOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJv
cGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQuaHRtbApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFm
ZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZl
dGltZS0yLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1
cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjk4YzMxMDU4NmI2ZTdmMjc2ZGViZGRlYWYwY2M5NWIxZThmMmVjZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0yLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxNjIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgot
PGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0
IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKTsKLX0KLQotZmxvYXQgYXNzaWduVG9QdHIodGhyZWFkIGZsb2F0KiBwdHIs
IGZsb2F0IHZhbHVlKSB7Ci0gICAgcmV0dXJuICpwdHIgPSB2YWx1ZTsKLX0KLQotdGhyZWFkIGZs
b2F0KiByZWFsUHRyKGZsb2F0IHZhbHVlKQotewotICAgIHJldHVybiAmdmFsdWU7Ci19Ci0KLXRo
cmVhZCBmbG9hdCogZmlyc3RQdHIoZmxvYXQgdmFsdWUpIHsKLSAgICByZXR1cm4gcmVhbFB0cih2
YWx1ZSk7Ci19Ci0KLXRocmVhZCBmbG9hdCogc2Vjb25kUHRyKGZsb2F0IHZhbHVlKSB7Ci0gICAg
cmV0dXJuIGZpcnN0UHRyKHZhbHVlKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFk
ZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICB0aHJlYWQgZmxvYXQqIHB0clRv
U2hhZGUgPSBmaXJzdFB0cihzaGFkZSk7Ci0gICAgdGhyZWFkIGZsb2F0KiBwdHJUb1NoYWRlMiA9
IHNlY29uZFB0cigxLjApOwotCi0gICAgZmxvYXQgZHVtbXk7Ci0gICAgdGhyZWFkIGZsb2F0KiBk
dW1teVB0ciA9ICZkdW1teTsKLQotICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZTIs
IDAuMCk7Ci0gICAgdGhyZWFkIGZsb2F0KiBkdW1teTIgPSByZWFsUHRyKHNoYWRlKTsKLQotICAg
IHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotCi0gICAgcmVzdWx0LnNoYWRlID0gKnB0clRv
U2hhZGUyOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAg
ICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwot
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEg
PSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAg
Y29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBp
bnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25z
dCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZm
ZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZm
ZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3Jv
dXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsK
LSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChw
aXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwg
cmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRl
eElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29u
c3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0g
e3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4
QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
OV0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
M10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVu
bWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9S
TSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdy
aXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZm
ZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAg
ICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9
OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1
ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBi
aW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0
IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7
Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNv
bnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07
Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENo
YWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRD
dXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4
dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjog
MCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0
YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDog
ImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3Qg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2Ny
aXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAg
Y29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3Mo
cmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwg
YmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2
ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5j
dGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRp
bWUtMy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9w
ZXItdmFyaWFibGUtbGlmZXRpbWUtMy1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTMtZXhwZWN0ZWQuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUt
My5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUt
bGlmZXRpbWUtMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYThhMjhmNThj
YTIyYTE2ZmRiYzU0MDI5NDk0NjZhYjBiOTNlNTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJv
cGVyLXZhcmlhYmxlLWxpZmV0aW1lLTMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCww
IEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNv
bnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3Np
dGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQot
Ci1mbG9hdCBhc3NpZ25Ub1B0cih0aHJlYWQgZmxvYXQqIHB0ciwgZmxvYXQgdmFsdWUpIHsKLSAg
ICByZXR1cm4gKnB0ciA9IHZhbHVlOwotfQotCi10aHJlYWQgZmxvYXQqIHJlYWxQdHIoZmxvYXQg
dmFsdWUpCi17Ci0gICAgZmxvYXQgdiA9IHZhbHVlOwotICAgIHJldHVybiAmdjsKLX0KLQotdGhy
ZWFkIGZsb2F0KiBmaXJzdFB0cihmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiByZWFsUHRyKHZh
bHVlKTsKLX0KLQotdGhyZWFkIGZsb2F0KiBzZWNvbmRQdHIoZmxvYXQgdmFsdWUpIHsKLSAgICBy
ZXR1cm4gZmlyc3RQdHIodmFsdWUpOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIHRocmVhZCBmbG9hdCogcHRyVG9T
aGFkZSA9IGZpcnN0UHRyKHNoYWRlKTsKLSAgICB0aHJlYWQgZmxvYXQqIHB0clRvU2hhZGUyID0g
c2Vjb25kUHRyKDEuMCk7Ci0KLSAgICBmbG9hdCBkdW1teTsKLSAgICB0aHJlYWQgZmxvYXQqIGR1
bW15UHRyID0gJmR1bW15OwotCi0gICAgZHVtbXkgPSBhc3NpZ25Ub1B0cihwdHJUb1NoYWRlMiwg
MC4wKTsKLSAgICB0aHJlYWQgZmxvYXQqIGR1bW15MiA9IHJlYWxQdHIoc2hhZGUpOwotCi0gICAg
cmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0KLSAgICByZXN1bHQuc2hhZGUgPSAqcHRyVG9T
aGFkZTI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21l
bnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAg
IHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0g
ICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmlt
aXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlv
blN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3Qg
YWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBj
b2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxl
bmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3Qg
ZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9
IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBj
b25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlu
cHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0
IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZl
cnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZl
ciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19Owot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCBy
YXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4
SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25z
dCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7
c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0
IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlw
dG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhC
dWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5
XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEz
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKLQotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTdd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5t
YXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JN
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3Jp
dGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZl
ckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAg
IGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07
Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVm
ZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJp
bmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3Qg
YmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29u
c3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsK
LSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hh
aW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1
cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0
dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRl
dmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAw
LCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRh
Y2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAi
Y2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3Jp
cHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBj
b25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBi
aW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3Zl
cnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwg
MCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRC
dWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlv
bihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0
aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGlt
ZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXIt
dmFyaWFibGUtbGlmZXRpbWUtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFk
PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7Ci1kcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUu
aHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE2YTJlZThiNDA3MzYzNjNiNGI2
NzM0MzA1NzVhMTI0MzM5ZmQ5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJs
ZS1saWZldGltZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQ
RSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291
cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLWZsb2F0IGFzc2ln
blRvUHRyKHRocmVhZCBmbG9hdCogcHRyLCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiAqcHRy
ID0gdmFsdWU7Ci19Ci0KLXRocmVhZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gJnZhbHVlOwotfQotCi10aHJlYWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVl
KSB7Ci0gICAgcmV0dXJuIHJlYWxQdHIodmFsdWUpOwotfQotCi10aHJlYWQgZmxvYXQqIHNlY29u
ZFB0cihmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiBmaXJzdFB0cih2YWx1ZSk7Ci19Ci0KLXZl
cnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgw
KSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0Owot
Ci0gICAgdGhyZWFkIGZsb2F0KiBwdHJUb1NoYWRlID0gZmlyc3RQdHIoc2hhZGUpOwotICAgIHRo
cmVhZCBmbG9hdCogcHRyVG9TaGFkZTIgPSBzZWNvbmRQdHIoMS4wKTsKLQotICAgIGZsb2F0IGR1
bW15OwotICAgIHRocmVhZCBmbG9hdCogZHVtbXlQdHIgPSAmZHVtbXk7Ci0KLSAgICBkdW1teSA9
IGFzc2lnblRvUHRyKHB0clRvU2hhZGUyLCAwLjApOwotICAgIGR1bW15ID0gYXNzaWduVG9QdHIo
cHRyVG9TaGFkZSwgc2hhZGUpOwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0K
LSAgICByZXN1bHQuc2hhZGUgPSAqcHRyVG9TaGFkZTI7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBz
aGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0g
ICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0
In07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAi
ZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAs
IGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVT
ZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0
IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5k
R3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxp
dHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5
b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2
aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50
U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVz
LCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6
IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVh
dGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qg
dmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
QXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhC
dWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAt
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwot
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFd
ID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVd
ID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
LSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VC
dWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0g
YXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5
QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVz
b3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVy
OiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9
IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdy
b3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5k
R3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMu
Z2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZp
Y2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0
LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRw
dXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0
cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAg
ICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAv
LyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25z
dCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVz
b2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVh
ckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsK
LSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1h
bmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRl
clBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5k
UGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2go
KTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51
bS1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVt
LXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
ZDI0NjRlOTk3N2RmNjUwOGMyODZkNzA4OGNkOTg0ZTA5NjI4ZGVhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1l
bnVtLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBA
Ci0KLVBBU1MgZW51bUR1cGxpY2F0ZXMgCi1QQVNTIGRlZmF1bHRFbnVtQ29uc3RydWN0b3IgCi1Q
QVNTIGVudW1BcnJheVJlZkJhc2UgCi1QQVNTIGVudW1GbG9hdEJhc2UgCi1QQVNTIGVudW1QdHJC
YXNlIAotUEFTUyBlbnVtU3RydWN0QmFzZSAKLVBBU1MgZW51bU5vTWVtYmVycyAKLQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNTZhYjliZDA1MTMyMGJhMzBkM2VhM2FkMTQxMGVhMmE2YzNhZjUw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1lbnVtLXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDg5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04
PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCB0aGUg
V0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3Rz
LmVudW1EdXBsaWNhdGVzID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0g
ICAgICAgICAgICBlbnVtIEZvbyB7Ci0gICAgICAgICAgICAgICAgV2FyID0gNDIsCi0gICAgICAg
ICAgICAgICAgRmFtaW5lID0gMCwKLSAgICAgICAgICAgICAgICBQZXN0aWxlbmNlID0gMjMsCi0g
ICAgICAgICAgICAgICAgRGVhdGggPSA0MgotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX07
Ci0KLXdobHNsVGVzdHMuZGVmYXVsdEVudW1Db25zdHJ1Y3RvciA9IGFzeW5jICgpID0+IHsKLSAg
ICBjb25zdCBwcm9ncmFtID0gYAotICAgICAgICBlbnVtIFdlZWtkYXkgewotICAgICAgICAgICAg
TW9uZGF5LAotICAgICAgICAgICAgVHVlc2RheSwKLSAgICAgICAgICAgIFdlZG5lc2RheSwKLSAg
ICAgICAgICAgIFRodXJzZGF5LAotICAgICAgICAgICAgUGl6emFkYXkKLSAgICAgICAgfQotICAg
ICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgV2Vla2RheSB4ID0gV2Vla2Rh
eSgpOwotICAgICAgICAgICAgcmV0dXJuIDQyOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQy
KTsKLX07Ci0KLXdobHNsVGVzdHMuZW51bUFycmF5UmVmQmFzZSA9IGFzeW5jICgpID0+IHsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGVudW0gRm9vIDogdGhy
ZWFkIGludFtdIHsKLSAgICAgICAgICAgICAgICBCYXIKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci19Ci0KLXdobHNsVGVzdHMuZW51bUZsb2F0QmFzZSA9IGFzeW5jICgpID0+IHsKLSAgICBh
d2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGVudW0gRm9vIDogZmxvYXQg
ewotICAgICAgICAgICAgICAgIEJhcgotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQot
d2hsc2xUZXN0cy5lbnVtUHRyQmFzZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGVudW0gRm9vIDogdGhyZWFkIGludCogewotICAg
ICAgICAgICAgICAgIEJhcgotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xU
ZXN0cy5lbnVtU3RydWN0QmFzZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwo
Ci0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBUaGluZ3kgeyB9Ci0gICAgICAgICAgICBl
bnVtIEZvbyA6IFRoaW5neSB7Ci0gICAgICAgICAgICAgICAgQmFyCi0gICAgICAgICAgICB9Ci0g
ICAgICAgIGApOwotfTsKLQotd2hsc2xUZXN0cy5lbnVtTm9NZW1iZXJzID0gYXN5bmMgKCkgPT4g
ewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgZW51bSBGb28g
eyB9Ci0gICAgICAgIGApOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lcXVhbGl0eS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXF1YWxpdHktZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM4NDc4M2Y0ODUxMGYzNTNjMTUz
Mjc0NTQ3ZTVhN2U5ZGUwNmNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lcXVhbGl0eS1leHBlY3RlZC50eHQK
KysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0KLVBBU1MgZXF1YWxpdHkgCi1QQVNTIG5v
dEVxdWFsaXR5IAotUEFTUyBlcXVhbGl0eVR5cGVGYWlsdXJlIAotUEFTUyBlcXVhbHNXcm9uZ0Fy
Z3VtZW50TGVuZ3RoIAotUEFTUyBlcXVhbHNXcm9uZ1JldHVyblR5cGUgCi1QQVNTIGxlc3NFcXVh
bFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGxlc3NFcXVhbFdyb25nUmV0dXJuVHlwZSAKLVBB
U1MgbGVzc1RoYW5Xcm9uZ0FyZ3VtZW50TGVuZ3RoIAotUEFTUyBsZXNzVGhhbldyb25nUmV0dXJu
VHlwZSAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVxdWFsaXR5Lmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXF1YWxpdHkuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggN2I3ZmE3Mzk5MzUyM2VlNjI0MWFhZTdhZjRlYWM1N2VkZDU2MDM4
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtZXF1YWxpdHkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExOSAr
MCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxt
ZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhlIFdITFNM
IHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVz
cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5lcXVh
bGl0eSA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9ICJib29sIGZvbyh1aW50IHgs
IHVpbnQgeSkgeyByZXR1cm4geCA9PSB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQoNSld
KSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg3KV0pLCB0cnVlKTsKLSAgICBwcm9n
cmFtID0gImJvb2wgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCA9PSB5OyB9IjsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDcpLCBtYWtlSW50KDUpXSksIGZhbHNlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtlSW50KDcpXSks
IHRydWUpOwotICAgIHByb2dyYW0gPSAiYm9vbCBmb28oYm9vbCB4LCBib29sIHkpIHsgcmV0dXJu
IHggPT0geTsgfSI7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbCh0cnVlKV0pLCBmYWxzZSk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wo
ZmFsc2UpLCBtYWtlQm9vbChmYWxzZSldKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VC
b29sKHRydWUpXSksIHRydWUpOwotfQotCi13aGxzbFRlc3RzLm5vdEVxdWFsaXR5ID0gYXN5bmMg
KCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gImJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJl
dHVybiB4ICE9IHk7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCB0cnVlKTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlVWludCg3KSwgbWFrZVVpbnQoNyldKSwgZmFsc2UpOwotICAgIHByb2dyYW0gPSAiYm9vbCBm
b28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICE9IHk7IH0iOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJ
bnQoNSldKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KSwgbWFrZUludCg3KV0pLCBmYWxzZSk7Ci0gICAg
cHJvZ3JhbSA9ICJib29sIGZvbyhib29sIHgsIGJvb2wgeSkgeyByZXR1cm4geCAhPSB5OyB9IjsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSksIHRydWUpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRy
dWUpLCBtYWtlQm9vbChmYWxzZSldKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9v
bChmYWxzZSldKSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pLCBm
YWxzZSk7Ci19OwotCi13aGxzbFRlc3RzLmVxdWFsaXR5VHlwZUZhaWx1cmUgPSBhc3luYyAoKSA9
PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKCJib29sIGZvbyhpbnQgeCwgdWludCB5KSB7IHJldHVy
biB4ID09IHk7IH0iKTsKLX07Ci0KLXdobHNsVGVzdHMuZXF1YWxzV3JvbmdBcmd1bWVudExlbmd0
aCA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0K
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShpbnQpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCwg
aW50KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIGApOwotfTsKLQotd2hsc2xUZXN0cy5lcXVh
bHNXcm9uZ1JldHVyblR5cGUgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAot
ICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9w
ZXJhdG9yPT0oRm9vLCBGb28pIHsgcmV0dXJuIDQyOyB9Ci0gICAgICAgIGApOwotfQotCi13aGxz
bFRlc3RzLmxlc3NFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PiB7Ci0gICAg
YXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPD0o
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcjw9KGludCkgeyByZXR1cm4gdHJ1ZTsg
fQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvcjw9KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMubGVzc0VxdWFsV3JvbmdSZXR1cm5UeXBlID0gYXN5
bmMgKCkgPT4gewotICAgIGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0
IEZvbyB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvcjw9KEZvbywgRm9vKSB7IHJldHVybiA0
MjsgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5sZXNzVGhhbldyb25nQXJndW1lbnRM
ZW5ndGggPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0g
ICAgICAgICAgICBib29sIG9wZXJhdG9yPCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJh
dG9yPChpbnQpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgYXdhaXQgY2hlY2tG
YWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPChpbnQsIGludCwgaW50
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLmxlc3NUaGFu
V3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGludCBvcGVy
YXRvcjwoRm9vLCBGb28pIHsgcmV0dXJuIDQyOyB9Ci0gICAgICAgIGApOwotfQotCi1ydW5UZXN0
cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIx
ZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0LW1hdGgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0LW1hdGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2NGVkYTMwZjY0YjZlODRkZDMwYzBlZDhjN2ZlOTE0YTUzYTRjZjI3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1mbG9hdC1tYXRoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBA
IC0xLDMgKzAsMCBAQAotCi1QQVNTIGZsb2F0TWF0aCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWZsb2F0LW1hdGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1mbG9hdC1tYXRoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjBhM2Mz
ZWEzMzc2MWMzMGMyMDAyNDhiODgzMzlmNGVlOGIwMTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0LW1h
dGguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMg
PSB7fTsKLQotd2hsc2xUZXN0cy5mbG9hdE1hdGggPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIGJvb2wgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIDQyLjUgPT0gNDIuNTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBiYXIoZmxvYXQgeCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICAgICAgZmxv
YXQgZm9vNigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiYXIoNy41KTsKLSAgICAg
ICAgfQotICAgICAgICBmbG9hdCBmb285KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZsb2F0KDcuNSk7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMTIoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZmxvYXQoNyk7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQg
Zm9vMTMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCB4ID0gNy41OwotICAgICAgICAg
ICAgcmV0dXJuIGZsb2F0KHgpOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbyIsIFtdKSwgdHJ1ZSk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNiIs
IFtdKSwgNy41KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHBy
b2dyYW0sICJmb285IiwgW10pLCA3LjUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZs
b2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEyIiwgW10pLCA3KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28xMyIsIFtdKSwgNy41KTsKLQot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IGJhcihpbnQg
eCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJhcig0LjApOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IGJhcihpbnQgeCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGludCBmb28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhcig0LjBmKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAg
IGAKLSAgICAgICAgICAgIHVpbnQgYmFyKHVpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBmb28oKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhcig0LjApOwotICAgICAgICAgICAgfQot
ICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAg
ICAgdWludCBiYXIodWludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biB4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGZvbygpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYmFyKDQuMGYpOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsK
LX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1nZXR0ZXItc2V0dGVyLXR5cGUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWdldHRlci1zZXR0ZXItdHlwZS1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNTdlYzdiN2E5MDRlMTBkMmU0
MWJiMzZhZmY1NjZjYTgzMDFhNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWdldHRlci1zZXR0ZXItdHlwZS1l
eHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotUEFTUyBnZXR0ZXJU
eXBlIAotUEFTUyBzZXR0ZXJUeXBlIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtZ2V0dGVyLXNldHRlci10eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Z2V0dGVyLXNldHRlci10eXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYy
MWYwNDE2MjQyNDY5YzEzODEzOTBmYTQ4Nzk4Y2Y5M2Y4NmY3NmMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWdl
dHRlci1zZXR0ZXItdHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgotPHNj
cmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNs
VGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5nZXR0ZXJUeXBlID0gYXN5bmMgKCkgPT4gewotICAg
IGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludCBvcGVyYXRvci54KHRocmVhZCBpbnRbXSBm
b28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmb29bMF07Ci0gICAgICAgIH0KLSAg
ICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgaW50IG9wZXJhdG9yLngoaW50
WzNdIGZvbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZvb1swXTsKLSAgICAgICAg
fQotICAgIGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgb3BlcmF0b3Jb
XSh0aHJlYWQgaW50W10gZm9vLCBpbnQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmb29baW5kZXhdOwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFp
bChgCi0gICAgICAgIGludCBvcGVyYXRvci54KGludFszXSBmb28pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmb29bMF07Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAg
ICAgfQotICAgICAgICBpbnQgb3BlcmF0b3JbXShGb28gZm9vLCB1aW50NCBpbmRleCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZvb1tpbmRleC54XTsKLSAgICAgICAgfQotICAgIGAp
OyAKLX07Ci0KLXdobHNsVGVzdHMuc2V0dGVyVHlwZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoYAotICAgICAgICB0aHJlYWQgaW50W10gb3BlcmF0b3IueD0odGhyZWFkIGlu
dFtdIGZvbywgdWludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vOwotICAg
ICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludFszXSBv
cGVyYXRvci54PShpbnRbM10gZm9vLCB1aW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmb287Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAg
ICAgICAgdGhyZWFkIGludFtdIG9wZXJhdG9yW109KHRocmVhZCBpbnRbXSBmb28sIHVpbnQgeCwg
dWludCB5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vOwotICAgICAgICB9Ci0g
ICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludFszXSBvcGVyYXRvci54
PShpbnRbM10gZm9vLCB1aW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmb287
Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgc3Ry
dWN0IEZvbyB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgfQotICAgICAgICBGb28gb3Bl
cmF0b3JbXT0oRm9vIGZvbywgZmxvYXQ0IHksIHVpbnQgeikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZvby54OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFp
bChgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgIH0K
LSAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZvbykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZvby54OwotICAgICAgICB9Ci0gICAgICAgIEZvbyBvcGVyYXRvci55PShGb28gZm9v
LCBpbnQ0IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyByZXN1bHQ7Ci0gICAgICAgICAg
ICBmb28ueCA9IHgueDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICBgKTsgCi19OwotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVnZS1hcnJheS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVnZS1hcnJheS1leHBlY3RlZC50eHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXktZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1QQVNTIAotUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1odWdlLWFycmF5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVn
ZS1hcnJheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDhhMmZmMjJlYmE1
NWVmNjZlNzRiMjlmNGUyM2E5OWYwMmFiOTMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0
bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRt
bD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08
L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi12b2lkIGZp
bGwodGhyZWFkIGZsb2F0W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7Ci0gICAgZm9yICh1aW50IGkg
PSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsK
LSAgICB9Ci19Ci0KLVtudW10aHJlYWRzKDEsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVT
aGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElE
IDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIGZsb2F0WzEwMDBdIGFycmF5OwotICAgIGlm
IChhcnJheS5sZW5ndGggIT0gMTAwMCkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAodWludCBp
ID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhcnJheVtpXSAhPSAw
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFycmF5WzBdID0gMC4xMzM3Owot
ICAgIGlmIChhcnJheVswXSAhPSAwLjEzMzcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRocmVh
ZCBmbG9hdFtdIGFycmF5UHRyID0gQGFycmF5OwotICAgIGlmIChhcnJheVB0ci5sZW5ndGggIT0g
MTAwMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbChhcnJheVB0ciwgMC4xMDEwKTsKLSAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheVB0ci5sZW5ndGg7ICsraSkgewotICAgICAgICBp
ZiAoYXJyYXlQdHJbaV0gIT0gMC4xMDEwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAoYXJyYXlbaV0gIT0gMC4xMDEwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGZpbGwoQGFycmF5LCAwLjAxMDEpOwotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhcnJheVB0cltpXSAhPSAwLjAxMDEpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhcnJheVtpXSAhPSAwLjAxMDEpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYnVmZmVyWzBdID0gMTsKLX0KLWA7Ci1hc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdl
LWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0g
ICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShj
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBJbnQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKLQotICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZm
ZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IElu
dDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IDA7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3Jp
cHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVz
YWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCBy
ZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwg
c2l6ZX07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1
ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NF
bmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29k
ZXIuZGlzcGF0Y2goMSwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsK
LSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAg
ZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCBy
ZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwot
ICAgIGxldCByZXN1bHRzSW50MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KHJlc3VsdHNBcnJheUJ1
ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNJbnQzMkFycmF5WzBdID09PSAxKQotICAgICAgICB0ZXN0
UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgIHJlc3Vs
dHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLWdldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0sIGZ1bmN0aW9u
KCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0g
ICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBmaW5pc2hK
U1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtaWYtc3RhdGVtZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1pZi1zdGF0ZW1lbnQtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyMTM4M2U3ZmFkNDZmZTM1N2QxOWUxMTBhZDU2Y2Q4NDUyMWE2YmEw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1pZi1zdGF0ZW1lbnQtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwK
QEAgLTEsNiArMCwwIEBACi0KLVBBU1MgaWZTdGF0ZW1lbnQgCi1QQVNTIGlmRWxzZVN0YXRlbWVu
dCAKLVBBU1MgaWZFbHNlSWZTdGF0ZW1lbnQgCi1QQVNTIGlmRWxzZUlmRWxzZVN0YXRlbWVudCAK
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVudC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVudC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjNDI2NDhjZDVkYzEzYTMwMjM1YWEyZGQ5NWRjNWJjOWY4NTYx
ZjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1pZi1zdGF0ZW1lbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDEwNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYt
OD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgaW50
IGJpdCBtYXRoLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmlmU3RhdGVt
ZW50ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZv
byhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkgPSA2OwotICAgICAgICAgICAg
aWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgIHkgPSA4OwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzKV0pLCA2KTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNCldKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2KV0pLCA2KTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNyldKSwgOCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDgpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg5KV0pLCA2KTsK
LX0KLQotd2hsc2xUZXN0cy5pZkVsc2VTdGF0ZW1lbnQgPSBhc3luYyAoKSA9PgotewotICAgIGxl
dCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAg
ICAgeSA9IDg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHkgPSA5Owot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIH0KLSAgICBgOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCgzKV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNCldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDkpOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCg2KV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyldKSwgOCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDgpXSksIDkpOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCg5KV0pLCA5KTsKLX0KLQotd2hsc2xUZXN0cy5pZkVsc2VJZlN0YXRlbWVudCA9IGFz
eW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgIGlmICh4ID09
IDcpIHsKLSAgICAgICAgICAgICAgICB5ID0gODsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9
PSA4KSB7Ci0gICAgICAgICAgICAgICAgeSA9IDk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4geTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDMpXSksIDYpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCg0KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNSldKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDYpXSksIDYpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCg3KV0pLCA4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoOCldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDYpOwotfQotCi13
aGxzbFRlc3RzLmlmRWxzZUlmRWxzZVN0YXRlbWVudCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgIGlmICh4ID09IDcpIHsKLSAgICAgICAgICAgICAg
ICB5ID0gODsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSA4KSB7Ci0gICAgICAgICAgICAg
ICAgeSA9IDk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHkgPSAxMDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICB9Ci0gICAgYDsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoMyldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDEw
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoNildKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCldKSwg
OSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KDkpXSksIDEwKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3Nj
cmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmNy
ZW1lbnQtZGVjcmVtZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bmNyZW1lbnQtZGVjcmVtZW50LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjI4ZTUwZTcxNDc1MGI2Y2VhYzc2MjIyZjA1Y2ViYTYyZDFhNTBjMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtaW5jcmVtZW50LWRlY3JlbWVudC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwzICswLDAgQEAKLQotUEFTUyBpbmNyZW1lbnRBbmREZWNyZW1lbnQgCi0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmNyZW1lbnQtZGVjcmVtZW50Lmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtaW5jcmVtZW50LWRlY3JlbWVudC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNjY2NTlhNzNmZGQ3NzhmOWQxY2E2ZGY4YTliMjkyYWQyODQ1
MWVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1pbmNyZW1lbnQtZGVjcmVtZW50Lmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwzNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNl
dD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkNv
cHlpbmcuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuaW5jcmVtZW50QW5k
RGVjcmVtZW50ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBp
bnQgZm9vMSgpIHsgaW50IHggPSAwOyByZXR1cm4geCsrOyB9Ci0gICAgICAgIGludCBmb28yKCkg
eyBpbnQgeCA9IDA7IHgrKzsgcmV0dXJuIHg7IH0KLSAgICAgICAgaW50IGZvbzMoKSB7IGludCB4
ID0gMDsgcmV0dXJuICsreDsgfQotICAgICAgICBpbnQgZm9vNCgpIHsgaW50IHggPSAwOyArK3g7
IHJldHVybiB4OyB9Ci0gICAgICAgIGludCBmb281KCkgeyBpbnQgeCA9IDA7IHJldHVybiB4LS07
IH0KLSAgICAgICAgaW50IGZvbzYoKSB7IGludCB4ID0gMDsgeC0tOyByZXR1cm4geDsgfQotICAg
ICAgICBpbnQgZm9vNygpIHsgaW50IHggPSAwOyByZXR1cm4gLS14OyB9Ci0gICAgICAgIGludCBm
b284KCkgeyBpbnQgeCA9IDA7IC0teDsgcmV0dXJuIHg7IH0KLSAgICBgOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28xIiwgW10pLCAwKTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtd
KSwgMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzMiLCBbXSksIDEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb280IiwgW10pLCAxKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzYiLCBbXSksIC0xKTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFtdKSwgLTEp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284
IiwgW10pLCAtMSk7Ci19OwotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9o
dG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWFuZGVyLWV4cGVj
dGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjYjQ5NDRlY2I4MzU5Y2M1
NDdkMjliMTUyYmIyMTEwMDcxZjM2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXItZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLVBBU1MgaW5kZXhBbmRlcldp
dGhOb3RoaW5nV3JvbmcgCi1QQVNTIGluZGV4QW5kZXJXaXRoV3JvbmdOdW1iZXJPZkFyZ3VtZW50
cyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWFuZGVyLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXIuaHRtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3Mjg3OGJhZjFhNDVhZDQyNzI1ZjY1MmY2NGE1NmJhOTRi
YTAxYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDY5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04
PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBzdHJ1
Y3RzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmluZGV4QW5kZXJXaXRo
Tm90aGluZ1dyb25nID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAg
ICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgfQotICAgICAgICB0
aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb28o
KQotICAgICAgICB7Ci0gICAgICAgICAgICBGb28geDsKLSAgICAgICAgICAgIHgueCA9IDEzOwot
ICAgICAgICAgICAgcmV0dXJuIHhbNjY2XTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMTMpOwot
fQotCi13aGxzbFRlc3RzLmluZGV4QW5kZXJXaXRoV3JvbmdOdW1iZXJPZkFyZ3VtZW50cyA9IGFz
eW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaW50IHg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ4OwotICAgICAgICAgICAgfQotICAg
ICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAg
ICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQg
Rm9vKiBmb28sIHVpbnQsIHVpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICZmb28tPng7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi1ydW5UZXN0cyh3
aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWluZGV4LWdldHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWluZGV4LWdldHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWJiZmYxMTM0MzljMzEwZmI3NDZhYTUyZjQ5NDhmMjBm
NmY3YzU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dAor
KysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIHBvaW50ZXJJbmRleEdldHRlciAK
LVBBU1MgcG9pbnRlckdldHRlciAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWluZGV4LWdldHRlci1zZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bmRleC1nZXR0ZXItc2V0dGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRh
MDc5ZmE1N2QxODVjNWFkZjI2OGNlNWQyZGNmZmIxNDRiZTMyZmQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlu
ZGV4LWdldHRlci1zZXR0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJu
ZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLnBvaW50ZXJJbmRleEdl
dHRlciA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIGludCBvcGVyYXRvcltdKGRldmljZSBpbnQqLCB1aW50KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGAp
OwotCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3Bl
cmF0b3JbXSh0aHJlYWQgaW50KiwgdWludCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW10odGhyZWFkZ3Jv
dXAgaW50KiwgdWludCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTQz
OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oY29uc3RhbnQgaW50KiwgdWludCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTQzOwotICAgICAgICAgICAg
fQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5wb2ludGVyR2V0dGVyID0gYXN5bmMgKCkg
PT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9w
ZXJhdG9yLmZvbyhkZXZpY2UgaW50KikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28odGhyZWFkIGludCop
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgYCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAg
ICAgICBpbnQgb3BlcmF0b3IuZm9vKHRocmVhZGdyb3VwIGludCopCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3Iu
Zm9vKGNvbnN0YW50IGludCopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDU0MzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLQotcnVuVGVzdHMod2hsc2xU
ZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1pbmRleC1zZXR0ZXItZ2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1pbmRleC1zZXR0ZXItZ2V0dGVyLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjM2MzlkMDVhNmIzNDJmOGZlY2E0N2Y4MTU0MzI0ODY3ZjEwZWU0
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtc2V0dGVyLWdldHRlci1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotUEFTUyBpbmRleFNldHRlcldpdGhOb0dldHRlck92
ZXJsb2FkIAotUEFTUyBpbmRleFNldHRlcldpdGhOb0dldHRlck92ZXJsb2FkRml4ZWQgCi1QQVNT
IG5vdExvbmVJbmRleFNldHRlciAKLVBBU1MgbG9uZUluZGV4U2V0dGVyIAotUEFTUyBsb25lSW5k
ZXhTZXR0ZXJQb2ludGVyIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
aW5kZXgtc2V0dGVyLWdldHRlci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4
LXNldHRlci1nZXR0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhhMTVh
YTc0NjRjN2E3ZTI2MjE4YWY2MWUyNzhhN2I1Y2RhYmUwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgt
c2V0dGVyLWdldHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Ci08c2Ny
aXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xU
ZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmluZGV4U2V0dGVyV2l0aE5vR2V0dGVyT3ZlcmxvYWQg
PSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAg
ICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIHN0cnVjdCBCYXIgeyB9Ci0gICAgICAg
ICAgICBpbnQgb3BlcmF0b3JbXShGb28sIHVpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDUzNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJhciBvcGVyYXRv
cltdPShCYXIsIHVpbnQsIGludCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gQmFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX07Ci0KLXdo
bHNsVGVzdHMuaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkID0gYXN5bmMgKCkg
PT4KLXsKLSAgICBjb25zdCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgQmFyIHsgfQotICAg
ICAgICBpbnQgb3BlcmF0b3JbXShCYXIsIHVpbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiA1MzQ7Ci0gICAgICAgIH0KLSAgICAgICAgQmFyIG9wZXJhdG9yW109KEJhciwgdWludCwg
aW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQmFyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaW50IGZvbygpIHsgcmV0dXJuIEJhcigpWzBdOyB9Ci0gICAgICAgIGludCBiYXIoKSB7
Ci0gICAgICAgICAgICBCYXIgYjsKLSAgICAgICAgICAgIGJbMF0gPSA0MDA7Ci0gICAgICAgICAg
ICByZXR1cm4gYlswXTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTM0KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCA1MzQpOwot
fTsKLQotd2hsc2xUZXN0cy5ub3RMb25lSW5kZXhTZXR0ZXIgPSBhc3luYyAoKSA9PgotewotICAg
IGNvbnN0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBvcGVyYXRvcltdKGludCwgdWludCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDY1OwotICAgICAgICB9Ci0gICAgICAgIGludCBv
cGVyYXRvcltdPShpbnQsIHVpbnQsIGludCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IDU0MzsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkgewotICAgICAgICAgICAgaW50IHg7
Ci0gICAgICAgICAgICByZXR1cm4geFswXTsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKCkg
ewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICB4WzBdID0gNDI7Ci0gICAgICAgICAg
ICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNjUpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDU0Myk7Ci19Owot
Ci13aGxzbFRlc3RzLmxvbmVJbmRleFNldHRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQg
Y2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCB1
aW50LCBpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfTsKLQotd2hsc2xUZXN0cy5sb25l
SW5kZXhTZXR0ZXJQb2ludGVyID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwo
Ci0gICAgICAgIGAKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yW109KHRocmVhZCBp
bnQqIHB0ciwgdWludCwgaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX07Ci0KLXJ1blRl
c3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtaW50LWJpdC1tYXRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzNzFiNmM1M2UxZGNjMGNkYjU3ZjY1NmZjMjY1ZGI5ZjIwMTI1ZmQzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAg
LTEsOSArMCwwIEBACi0KLVBBU1MgaW50Qml0QW5kIAotUEFTUyBpbnRCaXRPciAKLVBBU1MgaW50
Qml0WG9yIAotUEFTUyBpbnRCaXROb3QgCi1QQVNTIGludExTaGlmdCAKLVBBU1MgaW50UlNoaWZ0
IAotUEFTUyBpbnRTaW1wbGVNYXRoIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtaW50LWJpdC1tYXRoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWJp
dC1tYXRoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxN2FmNGQ4OGU3ODNh
YmRmNjQ1YjI4MWQxODI0YTNmODkzNGRkZmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1iaXQtbWF0aC5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0i
bG9uZyI+Ci08dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJq
cy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMuaW50Qml0QW5kID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3Jh
bSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgYSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhICYgYjsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlSW50
KDcpXSksIDEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg2NTUzNSksIG1ha2VJbnQoNDIpXSksIDQyKTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQo
LTEpLCBtYWtlSW50KC03KV0pLCAtNyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApLCBtYWtlSW50KDg1NzMyKV0pLCAw
KTsKLX0KLQotd2hsc2xUZXN0cy5pbnRCaXRPciA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYSB8IGI7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKSwgbWFr
ZUludCg3KV0pLCA3KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUpLCBtYWtlSW50KDQyKV0pLCA2NTUzNSk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KC0xKSwgbWFrZUludCgtNyldKSwgLTEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKSwgbWFrZUludCg4NTcz
MildKSwgODU3MzIpOwotfQotCi13aGxzbFRlc3RzLmludEJpdFhvciA9IGFzeW5jICgpID0+Ci17
Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSBeIGI7Ci0gICAgICAgIH0KLSAgICBgOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCgxKSwgbWFrZUludCg3KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUpLCBtYWtlSW50KDQyKV0p
LCA2NTQ5Myk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZUludCgtNyldKSwgNik7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApLCBt
YWtlSW50KDg1NzMyKV0pLCA4NTczMik7Ci19Ci0KLXdobHNsVGVzdHMuaW50Qml0Tm90ID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgYSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIH5hOwotICAgICAgICB9Ci0gICAgYDsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoMSldKSwgLTIpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NTUzNSldKSwgLTY1NTM2KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoLTEp
XSksIDApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCgwKV0pLCAtMSk7Ci19Ci0KLXdobHNsVGVzdHMuaW50TFNoaWZ0ID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQg
YSwgdWludCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSA8PCBiOwotICAgICAg
ICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoMSksIG1ha2VVaW50KDcpXSksIDEyOCk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1
NTM1KSwgbWFrZVVpbnQoMildKSwgMjYyMTQwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoLTEpLCBtYWtlVWludCg1KV0p
LCAtMzIpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCgwKSwgbWFrZVVpbnQoMyldKSwgMCk7Ci19Ci0KLXdobHNsVGVzdHMu
aW50UlNoaWZ0ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAg
aW50IGZvbyhpbnQgYSwgdWludCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSA+
PiBiOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMSksIG1ha2VVaW50KDcpXSksIDApOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCg2NTUzNSksIG1ha2VVaW50KDIpXSksIDE2MzgzKTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoLTEpLCBtYWtl
VWludCg1KV0pLCAtMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApLCBtYWtlVWludCgzKV0pLCAwKTsKLX0KLQotd2hs
c2xUZXN0cy5pbnRTaW1wbGVNYXRoID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0g
ImludCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICsgeTsgfSI7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBt
YWtlSW50KDUpXSksIDEyKTsKLSAgICBwcm9ncmFtID0gImludCBmb28oaW50IHgsIGludCB5KSB7
IHJldHVybiB4IC0geTsgfSI7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtlSW50KDUpXSksIDIpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCg1KSwgbWFrZUludCg3KV0pLCAtMik7Ci0gICAgcHJvZ3JhbSA9ICJpbnQgZm9vKGludCB4LCBp
bnQgeSkgeyByZXR1cm4geCAqIHk7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCAzNSk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDcpLCBtYWtlSW50KC01KV0pLCAtMzUpOwotfQotCi1ydW5UZXN0cyh3aGxzbFRl
c3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWludC1saXRlcmFsLWNvbXBhcmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWludC1saXRlcmFsLWNvbXBhcmUtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiYmRhZDY1OTNiNjEyN2E2MmYyZTc0YzE4MDRiOTJmMmQzMDkxY2I5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1pbnQtbGl0ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIHR3b0ludExpdGVyYWxzIAotCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxpdGVyYWwtY29tcGFyZS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1saXRlcmFsLWNvbXBhcmUuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRmNDJlODJlYjdhOWE2YmJkZDg2MDMyNDkwZDU3ZmE3
ZWUxYzkyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxpdGVyYWwtY29tcGFyZS5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3Rz
ID0ge307Ci0KLXdobHNsVGVzdHMudHdvSW50TGl0ZXJhbHMgPSBhc3luYyAoKSA9PiB7Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGJvb2wgZm9vKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIDQyID09IDQyOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7Ci19Ci0K
LXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9naWNhbC1uZWdhdGlvbi1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9naWNhbC1uZWdhdGlvbi1leHBlY3RlZC50eHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzOTgxNDA1MzNkNDVjZTQ1NDM2MWQ1NjY1Yjg3
NDdhMjQwNTAwM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvZ2ljYWwtbmVnYXRpb24tZXhwZWN0ZWQudHh0
CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgbG9naWNhbE5lZ2F0aW9uIAot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9naWNhbC1uZWdhdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvZ2ljYWwtbmVnYXRpb24uaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIyMTQ1ZmU1ZDBlODBhZTlhNDQwZDNkZWJkODc3
YjcwMTgzNjY4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9naWNhbC1uZWdhdGlvbi5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5MdmFsdWVzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmxvZ2ljYWxO
ZWdhdGlvbiA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSAiYm9vbCBmb28oYm9v
bCB4KSB7IHJldHVybiAheDsgfSI7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSldKSwgZmFsc2UpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VC
b29sKGZhbHNlKV0pLCB0cnVlKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3Njcmlw
dD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1i
cmVhay1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFr
LWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2
ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFr
LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdCbGFja1NxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1icmVhay5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM4MjM4MmRhYzBlMTkwYTJhMjQ4YzU3M2I2NGQxZDU4ZjY1MGZhZDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+
Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQg
cG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsK
LX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0
cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCBy
ZXN1bHQ7Ci0KLSAgICBib29sIGIgPSB0cnVlOwotICAgIGZvciAodWludCBpID0gMDsgaSA8IDEw
OyAoaSA9IGkgKyAxLCBzaGFkZSA9IHNoYWRlICsgMS4wKSkgewotICAgICAgICBpZiAoYikgewot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc2hhZGUgPSBzaGFkZSArIDEu
MDsKLSAgICB9Ci0KLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQu
c2hhZGUgPSBzaGFkZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQg
MCB7Ci0gICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsK
LQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1h
c3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9k
dWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNv
bnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0
ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAg
ICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAg
IGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwg
Y29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUw
ID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAg
IGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwg
b2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1
dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRy
aWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJ
bnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0
eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFti
aW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVh
dGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBw
cmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhT
dGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGlu
ZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVy
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2
ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVm
ZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFy
cmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKLQotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29u
c3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJl
c291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7
Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVm
ZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3Vy
Y2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGlu
ZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2Ny
aXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmlu
ZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmlu
ZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAg
ICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JB
dHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJn
ZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjog
cmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29u
c3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2ls
QXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsK
LSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAg
ZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0Rl
dmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRp
bnVlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtY29udGlu
dWUtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmODY5YTk3
OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtY29u
dGludWUtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd0JsYWNrU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRpbnVl
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNiNGU5MDE4ZTNhZDNlNDQxYmYzMzIyYjViOTQz
ZTZmNjFhOGFhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQg
ewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQg
cG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0g
ICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRydWU7Ci0gICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgMTA7IGkgPSBpICsgMSkgewotICAgICAgICBpZiAoYikgewotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc2hhZGUgPSBzaGFkZSArIDEuMDsKLSAg
ICB9Ci0KLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUg
PSBzaGFkZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFn
bWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0g
ICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBm
dW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2Uu
Y3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsK
LSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHBy
aW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0
aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25z
dCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0
IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JC
bGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25z
dCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3No
YWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0
IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0
OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsK
LSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVz
fTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9
IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAi
dW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29u
c3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3Jv
dXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBl
bGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRp
dmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2ls
U3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91
dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxp
bmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhC
dWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0g
YXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVm
ZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbOV0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEw
XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0g
PSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3Ig
PSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNl
QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVu
bWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZm
ZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwg
cmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3Ig
PSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119
OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3Vw
RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdw
dSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJi
Z3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2Fw
Q2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3
YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3
ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFu
ZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25z
dCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2ht
ZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51
bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07
Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
blJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRC
aW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhC
dWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5k
cmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgp
LnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAg
fSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5k
SW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWV4cGVjdGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIz
M2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5
PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
LTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWxvb3BzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWxvb3BzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmZmQyODA1Y2I2MDgyNjNkYzkxOWVhMTM2NDcwMWM0N2JhNDMxYTAxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1sb29wcy1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxs
CkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIGRvV2hpbGUgCi1QQVNTIHNpbXBsZVdoaWxlIAotCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0cy5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLXNwZWMtdGVzdHMuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhOTg0ZDUxMjAzNGFhODE2NjM3MDIyYTU1MzcxNGMx
YmE1ZDQ0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0cy5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNjkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5U
ZXN0IGxvb3BzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmRvV2hpbGUg
PSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vMShp
bnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkgPSA3OwotICAgICAgICAgICAgZG8g
ewotICAgICAgICAgICAgICAgIHkgPSA4OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfSB3aGlsZSAoeCA8IDEwKTsKLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICB9
Ci0gICAgICAgIGludCBmb28yKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeSA9
IDc7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgeSA9IDg7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IHdoaWxlICh5ID09IDcpOwotICAgICAgICAgICAg
cmV0dXJuIHk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbzMoaW50IHgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBzdW0gPSAwOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg
ICAgIGlmICh4ID09IDExKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAxNTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHN1bSA9IHN1bSArIHg7Ci0gICAgICAgICAgICAgICAgeCA9IHggKyAxOwotICAgICAgICAgICAg
fSB3aGlsZSAoeCA8IDEzKTsKLSAgICAgICAgICAgIHJldHVybiBzdW07Ci0gICAgICAgIH0KLSAg
ICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28xIiwgW21ha2VJbnQoMSldKSwgOCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFrZUludCgxMSldKSwgOCk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbbWFrZUludCgx
KV0pLCA4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vMyIsIFttYWtlSW50KDkpXSksIDE5KTsKLX0KLQotd2hsc2xUZXN0cy5zaW1wbGVXaGls
ZSA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28o
aW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICh4IDwgMTMpCi0gICAgICAgICAg
ICAgICAgeCA9IHggKiAyOwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICBg
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgxKV0pLCAxNik7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3Jp
cHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4MmZiNzY3NWMwNmM3ZDhiOTQ5ZDcwNTlhMjllNTM2NDI5MmI5Mjhk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29u
c3Qgc2hhZGVyU291cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0
aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0K
LXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0
ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0
OwotCi0gICAgZm9yICh1aW50IGkgPSAwOyBpIDwgMTA7IGkgPSBpICsgMSkgewotICAgICAgICBz
aGFkZSA9IHNoYWRlICsgMC4xOwotICAgIH0KLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0
aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hh
ZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0
IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNv
dXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJh
Z21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50
U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAi
OwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxN
b2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xv
ckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5v
cm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9y
V3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAg
IGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIs
IG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwg
Zm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0
dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBh
dHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwot
ICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAs
IHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2Us
IGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNv
bG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAx
LCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMo
KTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41Owot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRd
ID0gMC4xOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMTsKLQotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMTsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTldID0gMC4xOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJl
c291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7
Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcg
PSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3Vw
QmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29u
c3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGlu
Z3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQg
PSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRv
ciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4g
PSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3
KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsK
LSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJl
VmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3Rv
cmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1l
bnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2Rl
ciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7
Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFy
dChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0
ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9z
Y3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtbG90cy1vZi1sb2NhbC12YXJpYWJsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWxvdHMtb2YtbG9jYWwtdmFyaWFibGVzLWV4cGVjdGVkLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0MDc4MWE0YWVjN2JiMmMzZWM3MGU3YjUyZmYxOGZk
Y2U2YTI4ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJpYWJsZXMtZXhwZWN0ZWQu
dHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgbG90c09mTG9jYWxWYXJp
YWJsZXMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb3RzLW9mLWxv
Y2FsLXZhcmlhYmxlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvdHMtb2YtbG9j
YWwtdmFyaWFibGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MTA0YjQx
Njk0ZjU1YWM0NWI5YTgxMDJkMTgxNDQyOGYwODY5NGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvdHMtb2Yt
bG9jYWwtdmFyaWFibGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRp
bWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkxvdHMgb2YgbG9jYWwgdmFyaWFibGVzLjwv
dGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0Pgot
Y29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmxvdHNPZkxvY2FsVmFyaWFibGVz
ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgc3JjID0gImludCBzdW0oKSB7XG4iOwotICAgIHNy
YyArPSAiICAgIGludCBpID0gMDtcbiI7Ci0gICAgbGV0IHRhcmdldCA9IDA7Ci0gICAgY29uc3Qg
bnVtVmFycyA9IDUwOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFyczsgaSsrKSB7Ci0g
ICAgICAgIHNyYyArPSBgICAgaSA9ICR7aX07XG5gOwotICAgICAgICBzcmMgKz0gYCAgIGludCBW
JHtpfSA9IChpICsgMykgKiAoaSArIDMpO1xuYDsKLSAgICAgICAgdGFyZ2V0ICs9IChpICsgMykg
KiAoaSArIDMpOwotICAgIH0KLSAgICBzcmMgKz0gIiAgICBpbnQgcmVzdWx0ID0gMDtcbiI7Ci0g
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYXJzOyBpKyspIHsKLSAgICAgICAgc3JjICs9IGAg
ICAgcmVzdWx0ICs9IFYke2l9O1xuYDsKLSAgICB9Ci0gICAgc3JjICs9ICIgICAgcmV0dXJuIHJl
c3VsdDtcbiI7Ci0gICAgc3JjICs9ICJ9IjsKLSAgICBsZXQgcHJvZ3JhbSA9IHNyYzsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAic3VtIiwgW10pLCB0
YXJnZXQpOwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbHZhbHVlcy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbHZhbHVlcy1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMDIyMzFjNGU1NDdlYjJkNTNjZWQxZjg1YjQxYzAx
ZTIyNzVlNDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251
bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgbFZhbHVlcyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1sdmFsdWVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNTk3MzczMjg1
YzM2NTc2YmM2NDczZTgyZjAwMDA2YjUyODE2OTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgotPHRpdGxlPkx2YWx1ZXMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0
LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVz
dHMubFZhbHVlcyA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAg
ICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHggPSAwOwotICAgICAgICAg
ICAgdGhyZWFkIGludCogeSA9ICYoeCsrKTsKLSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAg
ICAgfQotICAgIGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgZm9vKCkK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IHggPSAwOwotICAgICAgICAgICAgdGhyZWFkIGlu
dCogeSA9ICYoKyt4KTsKLSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAgIGAp
OyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IHggPSAwOwotICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYoeCA9
IDMpOwotICAgICAgICAgICAgcmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3
YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJjM7Ci0gICAgICAgICAg
ICByZXR1cm4gKnk7Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAK
LSAgICAgICAgaW50IGJhcihpbnQgeCkgewotICAgICAgICAgICAgcmV0dXJuIHggKyAxOwotICAg
ICAgICB9Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCA9
IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJmJhcigzKTsKLSAgICAgICAgICAgIHJl
dHVybiAqeTsKLSAgICAgICAgfQotICAgIGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAg
ICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHggPSAwOwotICAgICAg
ICAgICAgdGhyZWFkIGludCogeSA9ICYoNywgeCk7Ci0gICAgICAgICAgICByZXR1cm4gKnk7Ci0g
ICAgICAgIH0KLSAgICBgKTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBlbnVtIERh
eXMgewotICAgICAgICAgICAgTW9uZGF5LAotICAgICAgICAgICAgVHVlc2RheQotICAgICAgICB9
Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCA9IDA7Ci0g
ICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJihEYXlzLk1vbmRheSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gKnk7Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAg
ICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocmVhZCBib29sKiB5ID0g
Jih0cnVlICYmIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAg
IGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhyZWFkIGJvb2wqIHkgPSAmKCF0cnVlKTsKLSAgICAgICAgICAgIHJl
dHVybiAqeTsKLSAgICAgICAgfQotICAgIGApOyAKLSAgICBjb25zdCBwcm9ncmFtID0gYAotICAg
ICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHggPSAzOwotICAgICAg
ICAgICAgdGhyZWFkIGludCogeSA9ICZ4OwotICAgICAgICAgICAgcmV0dXJuICp5OwotICAgICAg
ICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCAzKTsKLX07Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3Jp
cHQ+Ci08L2h0bWw+Ci0KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1h
a2UtYXJyYXktcmVmLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLW1ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhYzRjYTQ5MjM2Nzk4MzdiZjFiNmNlMzRiOGUyNDMxYzU4ZDVj
NWY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZi1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotCi1QQVNTIG1ha2VBcnJheVJlZkZyb21B
cnJheVJlZiAKLVBBU1MgbWFrZUFycmF5UmVmRnJvbUxvY2FsIAotUEFTUyBtYWtlQXJyYXlSZWZG
cm9tUG9pbnRlciAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2Ut
YXJyYXktcmVmLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYWtl
LWFycmF5LXJlZi1zcGVjLXRlc3RzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFkZGJmNDVhMGQ4YzVkMmViZWM4OTkyZmExMDczN2RlMzVjZjgxYjQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW1ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1l
dGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCB0aGUgV0hMU0wg
dGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNz
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLm1ha2VB
cnJheVJlZkZyb21BcnJheVJlZiA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwo
Ci0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBiYXIodGhyZWFkIGludFtdIHJlZikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVmWzBdOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaW50IGJheih0aHJlYWQgaW50W10gcHRyKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBiYXIoQHB0cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbnQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IDQ4Owot
ICAgICAgICAgICAgICAgIHJldHVybiBiYXooQHgpOwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLX0KLQotd2hsc2xUZXN0cy5tYWtlQXJyYXlSZWZGcm9tTG9jYWwgPSBhc3luYyAoKSA9Pgot
ewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgYmFyKHRocmVhZCBpbnRbXSByZWYp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWZbMF07Ci0gICAgICAgIH0KLSAgICAg
ICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gNDg7Ci0gICAgICAg
ICAgICByZXR1cm4gYmFyKEB4KTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDgpOwotfQotCi13
aGxzbFRlc3RzLm1ha2VBcnJheVJlZkZyb21Qb2ludGVyID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGJhcih0aHJlYWQgaW50W10gcmVmKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gcmVmWzBdOwotICAgICAgICB9Ci0gICAgICAgIGludCBi
YXoodGhyZWFkIGludCogcHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYmFyKEBw
dHIpOwotICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnQgeCA9IDQ4OwotICAgICAgICAgICAgcmV0dXJuIGJheigmeCk7Ci0gICAgICAgIH0KLSAg
ICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSksIDQ4KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5LXJl
ZmVyZW5jZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJh
eS1yZWZlcmVuY2UtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1t
YWtlLWFycmF5LXJlZmVyZW5jZS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICsw
LDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09N
UExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXkt
cmVmZXJlbmNlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZl
cmVuY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiM2IzZWM3MTk0ZjVj
ZTBkZWFhMWEwZTdiMDkxOWU0NThkYWI1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZl
cmVuY2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAK
LWJvb2wgdGVzdDEoKSB7Ci0gICAgaW50IHZhbHVlID0gNDI7Ci0gICAgdGhyZWFkIGludFtdIGFy
cmF5ID0gQHZhbHVlOwotICAgIGlmIChhcnJheS5sZW5ndGggIT0gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhcnJheVswXSAhPSA0MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChhcnJheVsxMjAyMTNdICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGFycmF5WzBdID0gMTMzNzsKLSAgICBpZiAodmFsdWUgIT0gMTMzNykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdGVzdDIoKSB7Ci0gICAgaW50
IHZhbHVlID0gNDI7Ci0gICAgdGhyZWFkIGludCogcHRyID0gJnZhbHVlOwotICAgIGlmICgqcHRy
ICE9IDQyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0aHJlYWQgaW50W10gYXJyYXkg
PSBAcHRyOwotICAgIGlmIChhcnJheS5sZW5ndGggIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChhcnJheVswXSAhPSA0MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChhcnJheVsxMjM3NDIxN10gIT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
ICpwdHIgPSA2NjY7Ci0gICAgaWYgKCpwdHIgIT0gNjY2KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHZhbHVlICE9IDY2NikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChh
cnJheS5sZW5ndGggIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhcnJheVsw
XSAhPSA2NjYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFycmF5WzBdID0gNDI0MjsK
LSAgICBpZiAoKnB0ciAhPSA0MjQyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHZh
bHVlICE9IDQyNDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYXJyYXlbMF0gIT0g
NDI0MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhcnJheS5sZW5ndGggIT0gMSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdGVz
dDMoKSB7Ci0gICAgaW50WzQyXSB4OwotICAgIHRocmVhZCBpbnRbNDJdKiBhcnJheVB0ciA9ICZ4
OwotICAgIGlmIChhcnJheVB0ci0+bGVuZ3RoICE9IDQyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB4WzQxXSA9IDY2NjsKLSAgICBpZiAoKCphcnJheVB0cilbNDFdICE9IDY2NikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgoKmFycmF5UHRyKVswXSAhPSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0aHJlYWQgaW50W10gYXJyYXkgPSBAeDsKLSAgICBpZiAo
YXJyYXkubGVuZ3RoICE9IDQyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhcnJheVsw
XSA9IDEzMzc7Ci0gICAgaWYgKHhbMF0gIT0gMTMzNykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICgoKmFycmF5UHRyKVswXSAhPSAxMzM3KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB0ZXN0NCgpIHsKLSAgICB0aHJlYWQgaW50KiBw
dHIgPSBudWxsOwotCi0gICAgdGhyZWFkIGludFtdIGFycmF5ID0gQHB0cjsKLSAgICBpZiAoYXJy
YXkubGVuZ3RoICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhcnJheVsw
XSAhPSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXJyYXlbMTAwMDAwXSAh
PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotW251
bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgaW50
W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRo
cmVhZElEKSB7Ci0gICAgaWYgKCF0ZXN0MSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IXRlc3QyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdGVzdDMoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCF0ZXN0NCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBidWZm
ZXJbMF0gPSAxOwotfQotYDsKLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNv
bnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwg
dmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5k
R3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdl
LCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3Qgc2l6ZSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxOwotCi0g
ICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZm
ZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25z
dCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQot
ICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRp
bmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVu
Y29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5k
RW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBz
aXplKTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
bkNvbXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1
dGVQaXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBj
b21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJl
c3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgbGV0IHJlc3VsdHNJbnQzMkFycmF5ID0g
bmV3IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0ludDMy
QXJyYXlbMF0gPT09IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAg
ICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRl
dmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmlu
aXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIp
OwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAg
IHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaWNl
cy1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRy
aWNlcy1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzU4NTU5NjIzNWMyYTQxOGMxNGUyNzYwY2FmOWY3MDIxMWNmOTNkOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtbWF0cmljZXMtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0
ICswLDAgQEAKLQotUEFTUyBidWlsdGluTWF0cmljZXMgCi1QQVNTIG1hdHJpeE11bHRpcGxpY2F0
aW9uIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cmljZXMtc3Bl
Yy10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpY2VzLXNwZWMtdGVz
dHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZmMmJkOTk2OWJhYzgwMTMw
YzBlZGFhMzZiZjljODg5NDMwOTBhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cmljZXMtc3BlYy10ZXN0
cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Ci08dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08
c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hs
c2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmJ1aWx0aW5NYXRyaWNlcyA9IGFzeW5jICgpID0+
IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgZmxvYXQgZm9vKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZmxvYXQyeDIgYTsKLSAgICAgICAgICAgIGFbMF1bMF0gPSAxOwotICAgICAg
ICAgICAgYVswXVsxXSA9IDI7Ci0gICAgICAgICAgICBhWzFdWzBdID0gMzsKLSAgICAgICAgICAg
IGFbMV1bMV0gPSA0OwotICAgICAgICAgICAgcmV0dXJuIGFbMF1bMF07Ci0gICAgICAgIH0KLSAg
ICAgICAgZmxvYXQgZm9vMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0MngzIGE7Ci0g
ICAgICAgICAgICBhWzBdWzBdID0gMTsKLSAgICAgICAgICAgIGFbMF1bMV0gPSAyOwotICAgICAg
ICAgICAgYVswXVsyXSA9IDM7Ci0gICAgICAgICAgICBhWzFdWzBdID0gNDsKLSAgICAgICAgICAg
IGFbMV1bMV0gPSA1OwotICAgICAgICAgICAgYVsxXVsyXSA9IDY7Ci0gICAgICAgICAgICByZXR1
cm4gYVsxXVsyXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28zKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZmxvYXQyeDIgYTsKLSAgICAgICAgICAgIHJldHVybiBhWzBdWzBdOwotICAg
ICAgICB9Ci0gICAgICAgIGJvb2wgZm9vNCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0
MngyIGE7Ci0gICAgICAgICAgICBhWzBdWzBdID0gMTsKLSAgICAgICAgICAgIGFbMF1bMV0gPSAy
OwotICAgICAgICAgICAgYVsxXVswXSA9IDM7Ci0gICAgICAgICAgICBhWzFdWzFdID0gNDsKLSAg
ICAgICAgICAgIGZsb2F0MngyIGI7Ci0gICAgICAgICAgICBiWzBdWzBdID0gNTsKLSAgICAgICAg
ICAgIGJbMF1bMV0gPSA2OwotICAgICAgICAgICAgYlsxXVswXSA9IDc7Ci0gICAgICAgICAgICBi
WzFdWzFdID0gODsKLSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDI7ICsraSkgewot
ICAgICAgICAgICAgICAgIGZvciAodWludCBqID0gMDsgaiA8IDI7ICsraikgewotICAgICAgICAg
ICAgICAgICAgICBhW2ldW2pdICs9IDQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgfQotICAgICAgICBib29sIGZv
bzUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDJ4MiBhOwotICAgICAgICAgICAgYVsw
XSA9IGZsb2F0MigxLCAyKTsKLSAgICAgICAgICAgIGFbMV0gPSBmbG9hdDIoMywgNCk7Ci0gICAg
ICAgICAgICBmbG9hdDJ4MiBiOwotICAgICAgICAgICAgYlswXVswXSA9IDE7Ci0gICAgICAgICAg
ICBiWzBdWzFdID0gMjsKLSAgICAgICAgICAgIGJbMV1bMF0gPSAzOwotICAgICAgICAgICAgYlsx
XVsxXSA9IDQ7Ci0gICAgICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgICAgICB9Ci0gICAgICAg
IGJvb2wgZm9vNigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0MngyIGE7Ci0gICAgICAg
ICAgICBhWzBdWzBdID0gMTsKLSAgICAgICAgICAgIGFbMF1bMV0gPSAyOwotICAgICAgICAgICAg
YVsxXVswXSA9IDM7Ci0gICAgICAgICAgICBhWzFdWzFdID0gNDsKLSAgICAgICAgICAgIGZsb2F0
MngyIGI7Ci0gICAgICAgICAgICBiWzBdWzBdID0gNTsKLSAgICAgICAgICAgIGJbMF1bMV0gPSAx
MDsKLSAgICAgICAgICAgIGJbMV1bMF0gPSAxODsKLSAgICAgICAgICAgIGJbMV1bMV0gPSAyNDsK
LSAgICAgICAgICAgIGFbMF0gKj0gNTsKLSAgICAgICAgICAgIGFbMV0gKj0gNjsKLSAgICAgICAg
ICAgIHJldHVybiBhID09IGI7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZsb2F0MngzIGEgPSBmbG9hdDJ4MyhmbG9hdDMoMywgNCwgNSks
IGZsb2F0Myg2LCA3LCA4KSk7Ci0gICAgICAgICAgICByZXR1cm4gYVswXVsyXTsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCAxKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1
bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW10pLCAwKTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb280IiwgW10pLCB0cnVl
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJm
b281IiwgW10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24ocHJvZ3JhbSwgICJmb282IiwgW10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW10pLCA1KTsKLX07Ci0KLXdobHNs
VGVzdHMubWF0cml4TXVsdGlwbGljYXRpb24gPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dy
YW0gPSBgCi0gICAgICAgIGZsb2F0Mng0IG11bHRpcGx5KGZsb2F0MngzIHgsIGZsb2F0M3g0IHkp
IHsKLSAgICAgICAgICAgIC8vIENvcGllZCBhbmQgcGFzdGVkIGZyb20gdGhlIHN0YW5kYXJkIGxp
YnJhcnkKLSAgICAgICAgICAgIGZsb2F0Mng0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdFsw
XVswXSA9IDA7Ci0gICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVswXSAqIHlbMF1bMF07
Ci0gICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsxXSAqIHlbMV1bMF07Ci0gICAgICAg
ICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsyXSAqIHlbMl1bMF07Ci0gICAgICAgICAgICByZXN1
bHRbMF1bMV0gPSAwOwotICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMF0gKiB5WzBd
WzFdOwotICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMV0gKiB5WzFdWzFdOwotICAg
ICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMl0gKiB5WzJdWzFdOwotICAgICAgICAgICAg
cmVzdWx0WzBdWzJdID0gMDsKLSAgICAgICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzBdICog
eVswXVsyXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzFdICogeVsxXVsyXTsK
LSAgICAgICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzJdICogeVsyXVsyXTsKLSAgICAgICAg
ICAgIHJlc3VsdFswXVszXSA9IDA7Ci0gICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFswXVsw
XSAqIHlbMF1bM107Ci0gICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFswXVsxXSAqIHlbMV1b
M107Ci0gICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFswXVsyXSAqIHlbMl1bM107Ci0gICAg
ICAgICAgICByZXN1bHRbMV1bMF0gPSAwOwotICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9IHhb
MV1bMF0gKiB5WzBdWzBdOwotICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9IHhbMV1bMV0gKiB5
WzFdWzBdOwotICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9IHhbMV1bMl0gKiB5WzJdWzBdOwot
ICAgICAgICAgICAgcmVzdWx0WzFdWzFdID0gMDsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsxXSAr
PSB4WzFdWzBdICogeVswXVsxXTsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsxXSArPSB4WzFdWzFd
ICogeVsxXVsxXTsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsxXSArPSB4WzFdWzJdICogeVsyXVsx
XTsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsyXSA9IDA7Ci0gICAgICAgICAgICByZXN1bHRbMV1b
Ml0gKz0geFsxXVswXSAqIHlbMF1bMl07Ci0gICAgICAgICAgICByZXN1bHRbMV1bMl0gKz0geFsx
XVsxXSAqIHlbMV1bMl07Ci0gICAgICAgICAgICByZXN1bHRbMV1bMl0gKz0geFsxXVsyXSAqIHlb
Ml1bMl07Ci0gICAgICAgICAgICByZXN1bHRbMV1bM10gPSAwOwotICAgICAgICAgICAgcmVzdWx0
WzFdWzNdICs9IHhbMV1bMF0gKiB5WzBdWzNdOwotICAgICAgICAgICAgcmVzdWx0WzFdWzNdICs9
IHhbMV1bMV0gKiB5WzFdWzNdOwotICAgICAgICAgICAgcmVzdWx0WzFdWzNdICs9IHhbMV1bMl0g
KiB5WzJdWzNdOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAg
ICBmbG9hdDJ4MyBtYXRyaXgxKCkgewotICAgICAgICAgICAgZmxvYXQyeDMgeDsKLSAgICAgICAg
ICAgIHhbMF1bMF0gPSAyOwotICAgICAgICAgICAgeFswXVsxXSA9IDM7Ci0gICAgICAgICAgICB4
WzBdWzJdID0gNTsKLSAgICAgICAgICAgIHhbMV1bMF0gPSA3OwotICAgICAgICAgICAgeFsxXVsx
XSA9IDExOwotICAgICAgICAgICAgeFsxXVsyXSA9IDEzOwotICAgICAgICAgICAgcmV0dXJuIHg7
Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQzeDQgbWF0cml4MigpIHsKLSAgICAgICAgICAgIGZs
b2F0M3g0IHk7Ci0gICAgICAgICAgICB5WzBdWzBdID0gMTc7Ci0gICAgICAgICAgICB5WzBdWzFd
ID0gMTk7Ci0gICAgICAgICAgICB5WzBdWzJdID0gMjM7Ci0gICAgICAgICAgICB5WzBdWzNdID0g
Mjk7Ci0gICAgICAgICAgICB5WzFdWzBdID0gMzE7Ci0gICAgICAgICAgICB5WzFdWzFdID0gMzc7
Ci0gICAgICAgICAgICB5WzFdWzJdID0gNDE7Ci0gICAgICAgICAgICB5WzFdWzNdID0gNDM7Ci0g
ICAgICAgICAgICB5WzJdWzBdID0gNDc7Ci0gICAgICAgICAgICB5WzJdWzFdID0gNTM7Ci0gICAg
ICAgICAgICB5WzJdWzJdID0gNTk7Ci0gICAgICAgICAgICB5WzJdWzNdID0gNjE7Ci0gICAgICAg
ICAgICByZXR1cm4geTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28wMCgpIHsKLSAgICAg
ICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMF1bMF07Ci0gICAg
ICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMDEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbXVsdGlw
bHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzBdWzFdOwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0
IGZvbzAyKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0cml4
MigpKVswXVsyXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28wMygpIHsKLSAgICAgICAg
ICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMF1bM107Ci0gICAgICAg
IH0KLSAgICAgICAgZmxvYXQgZm9vMTAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbXVsdGlwbHko
bWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzBdOwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZv
bzExKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0cml4Migp
KVsxXVsxXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMigpIHsKLSAgICAgICAgICAg
IHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bMl07Ci0gICAgICAgIH0K
LSAgICAgICAgZmxvYXQgZm9vMTMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbXVsdGlwbHkobWF0
cml4MSgpLCBtYXRyaXgyKCkpWzFdWzNdOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMCIsIFtdKSwgMTcg
KiAyICsgMzEgKiAzICsgNDcgKiA1KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9h
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMSIsIFtdKSwgMTkgKiAyICsgMzcgKiAzICsgNTMgKiA1
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJm
b28wMiIsIFtdKSwgMjMgKiAyICsgNDEgKiAzICsgNTkgKiA1KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMyIsIFtdKSwgMjkgKiAyICsg
NDMgKiAzICsgNjEgKiA1KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0
aW9uKHByb2dyYW0sICJmb28xMCIsIFtdKSwgMTcgKiA3ICsgMzEgKiAxMSArIDQ3ICogMTMpOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEx
IiwgW10pLCAxOSAqIDcgKyAzNyAqIDExICsgNTMgKiAxMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTIiLCBbXSksIDIzICogNyArIDQx
ICogMTEgKyA1OSAqIDEzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0
aW9uKHByb2dyYW0sICJmb28xMyIsIFtdKSwgMjkgKiA3ICsgNDMgKiAxMSArIDYxICogMTMpOwot
fTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtMi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTItZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtMi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRF
U1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJp
eC0yLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ1NmY5NTMzZGQ1YzdmZTkyNzYzZDhjMWRlMTgyZWIz
NGVkNTdjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDE1NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlw
dD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLWJvb2wgYWxsRXF1YWwoZmxvYXQ0eDQgbWF0LCBm
bG9hdCB2YWx1ZSkKLXsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpIHsK
LSAgICAgICAgZm9yICh1aW50IGogPSAwOyBqIDwgNDsgaiA9IGogKyAxKSB7Ci0gICAgICAgICAg
ICBpZiAobWF0W2ldW2pdICE9IHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBmaWxsKHRocmVh
ZCBmbG9hdDR4NCogbWF0LCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBmbG9hdDR4NCByZXN1bHQ7Ci0g
ICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7Ci0gICAgICAgICAgICByZXN1
bHRbaV0gPSBmbG9hdDQodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpOwotICAgIH0KLSAgICAq
bWF0ID0gcmVzdWx0OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGZpbGwodGhyZWFkIGZs
b2F0NCogdmVjLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBmbG9hdDQgcmVzdWx0OwotICAgIGZvciAo
dWludCBpID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkgewotICAgICAgICByZXN1bHRbaV0gPSB2YWx1
ZTsKLSAgICB9Ci0gICAgKnZlYyA9IHJlc3VsdDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBhbGxFcXVhbChmbG9hdDQgdmVjLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBmb3IgKHVpbnQgaSA9
IDA7IGkgPCA0OyBpID0gaSArIDEpIHsKLSAgICAgICAgaWYgKHZlY1tpXSAhPSB2YWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVtu
dW10aHJlYWRzKDEsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZs
b2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRj
aFRocmVhZElEKSB7Ci0gICAgZmxvYXQ0eDQgbWF0OwotICAgIGZpbGwoJm1hdCwgMSk7Ci0gICAg
aWYgKCFhbGxFcXVhbChtYXQsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdDQgdmVj
OwotICAgIGZpbGwoJnZlYywgMSk7Ci0gICAgaWYgKCFhbGxFcXVhbCh2ZWMsIDEpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmbG9hdDQgdmVjMiA9IG11bChtYXQsIHZlYyk7Ci0gICAgaWYgKCFh
bGxFcXVhbCh2ZWMyLCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQ0eDQgbWF0MiA9
IG11bChtYXQsIG1hdCk7Ci0gICAgaWYgKCFhbGxFcXVhbChtYXQyLCA0KSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbWF0MiA9IG11bChtYXQyLCBtYXQyKTsKLSAgICBpZiAoIWFsbEVxdWFsKG1h
dDIsIDY0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCld
ID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOwotfQotYDsKLQotYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogODsKLQotICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZm
ZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gMTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOwotICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDM7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKLSAgICBidWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSA1OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7Ci0gICAg
YnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4
OwotICAgIGJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDQsIDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0g
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAg
ICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJy
YXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKLSAgICAgICAg
JiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMy
QXJyYXlbMl0gPT0gNgotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgKLSAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1Ci0gICAgICAgICYmIHJlc3VsdHNG
bG9hdDMyQXJyYXlbNV0gPT0gNgotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09
IDcKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQotICAgICAgICB0ZXN0
UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgIHJlc3Vs
dHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLWdldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0sIGZ1bmN0aW9u
KCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0g
ICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBmaW5pc2hK
U1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYXRyaXgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYXRyaXgtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1Q
QVNTIAotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LW1lbW9yeS1s
YXlvdXQtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgyZjkw
NDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgt
bWVtb3J5LWxheW91dC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAK
LVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUK
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5
b3V0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQu
aHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIwODE0ODVjN2JkNWIwMmM1Yjcz
NGU0MGIyMjE3MmNjZDI5NjE3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLVtudW10
aHJlYWRzKDEsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0
NHg0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRj
aFRocmVhZElEKSB7Ci0gICAgZmxvYXQ0eDQgcmVzdWx0OwotICAgIHJlc3VsdFswXSA9IGZsb2F0
NCgxLCAyLCAzLCA0KTsKLSAgICByZXN1bHRbMV0gPSBmbG9hdDQoNSwgNiwgNywgOCk7Ci0gICAg
cmVzdWx0WzJdID0gZmxvYXQ0KDksIDEwLCAxMSwgMTIpOwotICAgIHJlc3VsdFszXSA9IGZsb2F0
NCgxMywgMTQsIDE1LCAxNik7Ci0KLSAgICBmbG9hdDR4NCBtYXQgPSBidWZmZXJbMF07Ci0KLSAg
ICBpZiAobWF0WzBdWzBdID09IDAKLSAgICAgICAgJiYgbWF0WzBdWzFdID09IDEKLSAgICAgICAg
JiYgbWF0WzBdWzJdID09IDIKLSAgICAgICAgJiYgbWF0WzBdWzNdID09IDMKLQotICAgICAgICAm
JiBtYXRbMV1bMF0gPT0gNAotICAgICAgICAmJiBtYXRbMV1bMV0gPT0gNQotICAgICAgICAmJiBt
YXRbMV1bMl0gPT0gNgotICAgICAgICAmJiBtYXRbMV1bM10gPT0gNwotCi0gICAgICAgICYmIG1h
dFsyXVswXSA9PSA4Ci0gICAgICAgICYmIG1hdFsyXVsxXSA9PSA5Ci0gICAgICAgICYmIG1hdFsy
XVsyXSA9PSAxMAotICAgICAgICAmJiBtYXRbMl1bM10gPT0gMTEKLQotICAgICAgICAmJiBtYXRb
M11bMF0gPT0gMTIKLSAgICAgICAgJiYgbWF0WzNdWzFdID09IDEzCi0gICAgICAgICYmIG1hdFsz
XVsyXSA9PSAxNAotICAgICAgICAmJiBtYXRbM11bM10gPT0gMTUpIHsKLSAgICAgICAgYnVmZmVy
WzBdID0gcmVzdWx0OwotICAgIH0KLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmlj
ZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIi
fTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7
Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRl
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCAqIDE2OwotCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsK
LSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3Ip
OwotICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKLSAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1
ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOwotICAgIGJ1
ZmZlckZsb2F0MzJBcnJheVsxXSA9IDQ7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gODsK
LSAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxMjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlb
NF0gPSAxOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQz
MkFycmF5WzZdID0gOTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxMzsKLSAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbOF0gPSAyOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IDY7Ci0g
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEwOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsx
MV0gPSAxNDsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMzsKLSAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMTNdID0gNzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMTE7Ci0gICAg
YnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE1OwotICAgIGJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRp
bmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJp
bmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBb
YmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNv
ZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUp
OwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29t
cHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOwotICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0
c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRzRmxv
YXQzMkFycmF5WzBdID09PSAxCi0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT09
IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PT0gOQotICAgICAgICAmJiBy
ZXN1bHRzRmxvYXQzMkFycmF5WzNdID09PSAxMwotCi0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMy
QXJyYXlbNF0gPT09IDIKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9PT0gNgot
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09PSAxMAotICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzddID09PSAxNAotCi0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJy
YXlbOF0gPT09IDMKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs5XSA9PT0gNwotICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzEwXSA9PT0gMTEKLSAgICAgICAgJiYgcmVzdWx0
c0Zsb2F0MzJBcnJheVsxMV0gPT09IDE1Ci0KLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVsxMl0gPT09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxM10gPT09IDgKLSAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxNF0gPT09IDEyCi0gICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbMTVdID09PSAxNikKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAg
ZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7
Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewot
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVz
dEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rp
b24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLW1hdHJpeC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzNiNjVjMjg2YjNkNTExOTA3YzhmOTc3YzZi
NzcyOGRlMjE1MWQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXguaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDE2NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNj
cmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLWJvb2wgYWxsRXF1YWwoZmxvYXQyeDMgbWF0
LCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyOyBpID0gaSArIDEp
IHsKLSAgICAgICAgZm9yICh1aW50IGogPSAwOyBqIDwgMzsgaiA9IGogKyAxKSB7Ci0gICAgICAg
ICAgICBpZiAobWF0W2ldW2pdICE9IHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMo
MSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZm
ZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQp
IHsKLSAgICBmbG9hdDJ4MyBmb287Ci0gICAgaWYgKCFhbGxFcXVhbChmb28sIDApKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmb28gPSBmb28gKyBmbG9hdDJ4MyhmbG9hdDMoMS4wLCAxLjAsIDEu
MCksIGZsb2F0MygxLjAsIDEuMCwgMS4wKSk7Ci0gICAgaWYgKCFhbGxFcXVhbChmb28sIDEpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBmb28gPSBmb28gKiBmbG9hdDJ4MyhmbG9hdDMoOC41LCA4
LjUsIDguNSksIGZsb2F0Myg4LjUsIDguNSwgOC41KSk7Ci0gICAgaWYgKCFhbGxFcXVhbChmb28s
IDguNSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvbyA9IGZvbyAtIGZsb2F0MngzKGZsb2F0
Myg3LjUsIDcuNSwgNy41KSwgZmxvYXQzKDcuNSwgNy41LCA3LjUpKTsKLSAgICBpZiAoIWFsbEVx
dWFsKGZvbywgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvbyA9IGZvbyArIGZsb2F0Mngz
KGZsb2F0MygxLjAsIDEuMCwgMS4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsKLSAgICBpZiAo
IWFsbEVxdWFsKGZvbywgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvbyA9IGZvbyArIGZv
bzsKLSAgICBpZiAoIWFsbEVxdWFsKGZvbywgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
byA9IGZvbyArIGZvbzsKLSAgICBpZiAoIWFsbEVxdWFsKGZvbywgOCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGZsb2F0MyBmb3VydHlUd287Ci0gICAgZm91cnR5VHdvLnggPSA0MjsKLSAgICBm
b3VydHlUd28ueSA9IDQyOwotICAgIGZvdXJ0eVR3by56ID0gNDI7Ci0KLSAgICBmb29bMF0gPSBm
b3VydHlUd287Ci0gICAgZm9vWzFdID0gZm91cnR5VHdvOwotICAgIGlmICghYWxsRXF1YWwoZm9v
LCA0MikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvb1sxMzM3XSA9IGZvdXJ0eVR3bzsKLSAg
ICBpZiAoIWFsbEVxdWFsKGZvbywgNDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb29bMTAw
MDAwMF0gPSBmb3VydHlUd287Ci0gICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZm91cnR5VHdvWzEzMzddID0gNTA7Ci0gICAgZm9vWzFdID0gZm91cnR5
VHdvOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvdXJ0eVR3b1sxMDAwMDAwXSA9IDUwOwotICAgIGZvb1sxXSA9IGZvdXJ0eVR3bzsKLSAgICBp
ZiAoIWFsbEVxdWFsKGZvbywgNDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdDMgc2hv
dWxkQmVaZXJvID0gZm9vWzEwMDAwMF07Ci0gICAgaWYgKHNob3VsZEJlWmVyby54ICE9IDAgfHwg
c2hvdWxkQmVaZXJvLnkgIT0gMCB8fCBzaG91bGRCZVplcm8ueiAhPSAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoZm91cnR5VHdvWzEwMDAwMDAwXSAhPSAwKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54
KV0gKiAyLjA7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBj
b25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFk
ZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9k
dWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAs
IHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFn
ZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4Owot
Ci0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKLSAgICBjb25zdCBi
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0
IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBj
b25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVm
ZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVsxXSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKLSAgICBidWZmZXJG
bG9hdDMyQXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7Ci0gICAg
YnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3
OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0K
LSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZl
clVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5k
aW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07Ci0gICAgY29uc3QgYmluZEdyb3Vw
QmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29u
c3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGlu
Z3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbW1hbmRF
bmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFu
ZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwg
c2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVn
aW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21w
dXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goNCwgMSwgMSk7Ci0gICAg
Y29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCBy
ZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7Ci0gICAgaWYgKHJlc3Vs
dHNGbG9hdDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFd
ID09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PSA2Ci0gICAgICAgICYm
IHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFy
cmF5WzRdID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9PSA2Ci0gICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNwotICAgICAgICAmJiByZXN1bHRzRmxv
YXQzMkFycmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAg
ICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAg
ZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQo
IiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewot
ICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwv
Ym9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0
ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNk
YjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLWV4
cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtZG90LWV4cHJlc3Npb24t
cnZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWRvdC1leHByZXNz
aW9uLXJ2YWx1ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDVmMThjMzRk
MjFmYWE1MWNmYWEyNzdjYTFmMGMxNjhjNzhiNGE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtZG90
LWV4cHJlc3Npb24tcnZhbHVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAot
PCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBz
aGFkZXJTb3VyY2UgPSBgCi0KLXN0cnVjdCBCYXIgewotICAgIGZsb2F0IHNoYWRlOwotfQotc3Ry
dWN0IEZvbyB7Ci0gICAgQmFyIGJhcjsKLX0KLQotc3RydWN0IFdyYXBwZXIgewotICAgIEZvbyBm
b287Ci19Ci0KLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVy
dGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0
IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgV3JhcHBlciB3cmFwcGVyOwotICAgIHdyYXBw
ZXIuZm9vLmJhci5zaGFkZSA9IHNoYWRlOwotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0gICAgcmVz
dWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gd3JhcHBlci5mb28u
YmFyLnNoYWRlOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFn
bWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0g
ICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBm
dW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2Uu
Y3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsK
LSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHBy
aW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0
aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25z
dCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0
IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JC
bGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25z
dCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3No
YWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKLSAgICBjb25zdCBhdHRyaWJ1dGUx
ID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAg
IGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3Qg
aW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVm
ZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29u
c3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRl
eEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotCi0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
N10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51
bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZP
Uk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0g
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0
fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBi
dWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25z
dCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtbG9vcC1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLWV4cGVjdGVkLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJm
YjlmZDIyZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLWV4cGVjdGVkLmh0bWwKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+
Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLWRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLW5lc3RlZC1sb29wLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YjEx
ODE4MjM0ZjE3NzE3OGMwMzAyYzcxNWU4NWIwYTllMjMwNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3Rl
ZC1sb29wLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotPCFET0NUWVBFIGh0
bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2Ug
PSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlv
bjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91
dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBib29sIGIg
PSB0cnVlOwotICAgIGZvciAodWludCBpID0gMDsgaSA8IDEwOyBpID0gaSArIDEpIHsKLSAgICAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzaGFkZSA9IDEuMDsKLSAgICAgICAg
fQotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IDEuMCwgZmFs
c2UpKTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoYikgewotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlICgoc2hhZGUgPSBz
aGFkZSArIDEuMCwgZmFsc2UpKTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoYikg
ewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IHdo
aWxlICgoc2hhZGUgPSBzaGFkZSAtIDEuMCwgZmFsc2UpKTsKLQotICAgICAgICB3aGlsZSAoKHNo
YWRlID0gc2hhZGUgKyAxLjAsIHRydWUpKSB7Ci0gICAgICAgICAgICBpZiAoYikgewotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgd2hp
bGUgKChzaGFkZSA9IHNoYWRlIC0gMS4wLCB0cnVlKSkgewotICAgICAgICAgICAgaWYgKGIpIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNo
YWRlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50
U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICBy
ZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
dmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0
cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2
fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAg
IGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9Owot
ICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlm
b3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExh
eW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
LSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owot
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
cjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIp
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2
XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs5XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAu
MDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4wOwotICAgIHZlcnRleEJ1
ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsK
LSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZm
ZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAo
KTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwg
c2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNv
dXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0g
ICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNj
cmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7
Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4
dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFp
bihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENo
YWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBv
dXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJl
ZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRz
ID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwg
bG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQ
YXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVu
ZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRH
cm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZl
cnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXco
NCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0
IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0
UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7
Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsK
LX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1hcmctZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLWV4cGVjdGVkLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhMGNmMzllOGEwZmVjYzhmMzM0YWMxODYzYTFlM2Rm
OGNhOWZkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1hcmctZXhwZWN0ZWQudHh0CisrKyAvZGV2L251
bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgcGFzc051bGxUb1B0ck1vbm9tb3JwaGljIAotCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1hcmcuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWFyZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMWIyZWVhYjEyMGZlZGI0MmMwNzFmODc5YTRlN2E0MDc2MDU1ZmEzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1udWxsLWFyZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPCFE
T0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxz
bFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMucGFzc051bGxUb1B0ck1vbm9tb3JwaGljID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyh0aHJlYWQg
aW50KiBwdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcHRyOwotICAgICAgICB9
Ci0gICAgICAgIGludCBiYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vKG51
bGwpOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAwKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLW51bGwtYXJyYXktcmVmLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVs
bC1hcnJheS1yZWYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5Yzk0Njk0
YzhhZjEwZDllMGZmOWI2YzRlOGVhYjVhOWZmMzUxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1hcnJh
eS1yZWYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1s
PgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29u
dGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5kZXJlZmVyZW5jZURlZmF1bHROdWxsQXJyYXlSZWYgPSBhc3luYyAoKSA9
PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdGhyZWFkIGludFtdIHA7Ci0gICAgICAgICAgICByZXR1cm4gcFswXTsKLSAg
ICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgMCk7Ci19Ci0KLXdobHNsVGVzdHMuZGVmYXVsdEluaXRpYWxp
emVkTnVsbEFycmF5UmVmSW50TGl0ZXJhbCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dy
YW0gPSBgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJlYWQg
aW50W10gcCA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gcFswXTsKLSAgICAgICAgfQotICAg
IGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdKSwgMCk7Ci19Ci0KLXdobHNsVGVzdHMucGFzc051bGxUb1B0ck1vbm9tb3JwaGljQXJy
YXlSZWYgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQg
Zm9vKHRocmVhZCBpbnRbXSBwdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwdHJb
MHVdOwotICAgICAgICB9Ci0gICAgICAgIGludCBiYXIoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZm9vKG51bGwpOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAwKTsKLX0KLQotd2hs
c2xUZXN0cy5sb2FkTnVsbCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAot
ICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIHNpbmsodGhyZWFkIGludCogeCkgeyB9Ci0gICAg
ICAgICAgICB2b2lkIGZvbygpIHsgc2luaygqbnVsbCk7IH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1
blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLWV4cGVjdGVkLnR4dApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3Zjhm
NmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQK
KysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYzMGE3ZWM1ODM4NmQzYjM1YmI2MjdhMjBmZTEzZDhhZDYzODJkMmYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW51bGwtZGVyZWZlcmVuY2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRl
clNvdXJjZSA9IGAKLXR5cGVkZWYgRm9vID0gdGhyZWFkIGludCo7Ci1Gb28gZ2V0TnVsbFB0cigp
Ci17Ci0gICAgcmV0dXJuIG51bGw7Ci19Ci0KLXN0cnVjdCBYWVogewotICAgIGZsb2F0IHg7Ci0g
ICAgZmxvYXQgeTsKLSAgICBmbG9hdCB6OwotfQotCi1bbnVtdGhyZWFkcygyLCAxLCAxKV0KLWNv
bXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVy
KHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIEZvbyBw
dHIgPSBudWxsOwotICAgICpwdHIgPSA0MjsKLSAgICAqZ2V0TnVsbFB0cigpID0gNDI7Ci0gICAg
aWYgKCpwdHIgPT0gMCkgewotICAgICAgICBpZiAocHRyID09IGdldE51bGxQdHIoKSkgewotICAg
ICAgICAgICAgaWYgKCpnZXROdWxsUHRyKCkgPT0gMCkgewotICAgICAgICAgICAgICAgIHRocmVh
ZCBYWVoqIHh5elB0ciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgWFlaIHh5ejsKLSAgICAgICAg
ICAgICAgICB4eXoueCA9IDE7Ci0gICAgICAgICAgICAgICAgeHl6LnkgPSAxOwotICAgICAgICAg
ICAgICAgIHh5ei56ID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoeHl6LnogPT0gMS4wICYmIHh5
ei55ID09IDEuMCAmJiB4eXoueiA9PSAxLjApIHsKLSAgICAgICAgICAgICAgICAgICAgKnh5elB0
ciA9IHh5ejsKLSAgICAgICAgICAgICAgICAgICAgeHl6ID0gKnh5elB0cjsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHh5ei56ID09IDAuMCAmJiB4eXoueSA9PSAwLjAgJiYgeHl6LnogPT0gMC4w
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJipnZXROdWxsUHRyKCkgPT0gbnVsbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmKigmKmdldE51bGxQdHIoKSkgPT0g
bnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbdWludCh0aHJl
YWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsKLQotICAg
IGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
YnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlb
MV0gPSAyOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7Ci0gICAgYnVmZmVyRmxvYXQz
MkFycmF5WzNdID0gNDsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OwotICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVs1XSA9IDY7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKLSAg
ICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OwotICAgIGJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRp
bmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJp
bmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBb
YmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNv
ZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUp
OwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29t
cHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOwotICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0
c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRzRmxv
YXQzMkFycmF5WzBdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0
Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gPT0gNgotICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzNdID09IDgKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0
XSA9PSA1Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gPT0gNgotICAgICAgICAm
JiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09IDcKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJB
cnJheVs3XSA9PSA4KQotICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAg
IHRlc3RGYWlsZWQoIiIpOwotICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlz
aEpTVGVzdCgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsK
LSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0
ZXN0UGFzc2VkKCIiKTsKLSAgICBmaW5pc2hKU1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+
Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFjY2Vz
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1
ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1QQVNTIAotUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtb29iLWFjY2Vzcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmIy
NjI5NDZhYzgzZGUwNTA5OWQwZTQyZGZhOGNlNTA4MzAzNWI3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2It
YWNjZXNzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAK
LVtudW10aHJlYWRzKDIsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNl
IGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7Ci0gICAgYnVmZmVyWzEzMzddID0gMC4wOwotICAgIGJ1ZmZlcls0MjQy
NDI0Ml0gPSAwLjA7Ci0gICAgaWYgKGJ1ZmZlclsxMDAwMDBdID09IDAuMCkKLSAgICAgICAgYnVm
ZmVyW3VpbnQodGhyZWFkSUQueCldID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOwot
fQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBp
c1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5
OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91
dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDog
cGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVh
dGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25z
dCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsKLQotICAgIGNvbnN0
IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVy
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAg
YnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAy
OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5
WzNdID0gNDsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OwotICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVs1XSA9IDY7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKLSAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbN10gPSA4OwotICAgIGJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3Qg
cmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNU
T1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBf
UkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVz
dWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZm
ZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7
YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91
cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdy
b3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3Jv
dXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRl
dmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNvZGVyLmNv
cHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwotICAg
IGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBh
c3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5l
KTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0g
ICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOwotICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZl
ci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRzRmxvYXQzMkFy
cmF5WzBdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0Ci0gICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gPT0gNgotICAgICAgICAmJiByZXN1bHRzRmxv
YXQzMkFycmF5WzNdID09IDgKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1
Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gPT0gNgotICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzZdID09IDcKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3
XSA9PSA4KQotICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RG
YWlsZWQoIiIpOwotICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5qc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsK
LSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVz
dCgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICAg
ICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0ZXN0UGFz
c2VkKCIiKTsKLSAgICBmaW5pc2hKU1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3BlcmF0b3Itb3Zlcmxv
YWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9yLW92ZXJs
b2FkLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQwZjNkMTdl
NmJiMWI5ODAwMDExYTgzZmE0OTAxYzIwZWNhZTM1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3BlcmF0b3It
b3ZlcmxvYWQtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBB
U1Mgb3BlcmF0b3JXaXRob3V0VW5pbmZlcnJhYmxlVHlwZVZhcmlhYmxlIAotCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3BlcmF0b3Itb3ZlcmxvYWQuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9hZC5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzN2ZjZWM2ODMzZGYyYmVhMDMzZjBjZGY1N2FkZWYxYzNmN2ZhNmM0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9hZC5odG1sCisrKyAvZGV2L251bGwKQEAg
LTEsMzggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRm
LTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5PcGVyYXRv
cisgb3ZlcmxvYWQuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMub3BlcmF0
b3JXaXRob3V0VW5pbmZlcnJhYmxlVHlwZVZhcmlhYmxlID0gYXN5bmMgKCkgPT4gewotICAgIGxl
dCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGludCB4Owot
ICAgICAgICB9Ci0gICAgICAgIEZvbyBvcGVyYXRvcisoRm9vIGEsIEZvbyBiKQotICAgICAgICB7
Ci0gICAgICAgICAgICBGb28gcmVzdWx0OwotICAgICAgICAgICAgcmVzdWx0LnggPSBhLnggKyBi
Lng7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGludCBm
b28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBGb28gYTsKLSAgICAgICAgICAgIGEueCA9IDY0
NTsKLSAgICAgICAgICAgIEZvbyBiOwotICAgICAgICAgICAgYi54ID0gLTM1OwotICAgICAgICAg
ICAgcmV0dXJuIChhICsgYikueDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNjQ1IC0gMzUpOwot
fQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVybG9hZC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFkYjYxMDZiMDg2NGU1NmQ2M2EzYTU3MDQxZjQ2ZmZkYjYxMGY0OTYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDUgKzAsMCBAQAotCi1QQVNTIGludE92ZXJsb2FkUmVzb2x1dGlvbiAKLVBBU1MgaW50T3Zlcmxv
YWRSZXNvbHV0aW9uUmV2ZXJzZU9yZGVyIAotUEFTUyBub3RFcXVhbHNPdmVybG9hZCAKLQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtb3ZlcmxvYWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggM2U1NDcyYmIyYTRkZTE2N2U5MTdlYThlNjlkYjFlMTM5M2Q2ZWNiMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtb3ZlcmxvYWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+T3ZlcmxvYWQuPC90aXRsZT4KLTxzY3JpcHQg
c3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3Rz
ID0ge307Ci0KLXdobHNsVGVzdHMuaW50T3ZlcmxvYWRSZXNvbHV0aW9uID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQpIHsgcmV0dXJuIDE7
IH0KLSAgICAgICAgaW50IGZvbyh1aW50KSB7IHJldHVybiAyOyB9Ci0gICAgICAgIGludCBmb28o
ZmxvYXQpIHsgcmV0dXJuIDM7IH0KLSAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7
IH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJiYXIiLCBbXSksIDEpOwotfQotCi13aGxzbFRlc3RzLmludE92ZXJsb2FkUmVzb2x1dGlv
blJldmVyc2VPcmRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAg
ICAgIGludCBmb28oZmxvYXQpIHsgcmV0dXJuIDM7IH0KLSAgICAgICAgaW50IGZvbyh1aW50KSB7
IHJldHVybiAyOyB9Ci0gICAgICAgIGludCBmb28oaW50KSB7IHJldHVybiAxOyB9Ci0gICAgICAg
IGludCBiYXIoKSB7IHJldHVybiBmb28oNDIpOyB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAxKTsKLX0KLQotd2hs
c2xUZXN0cy5ub3RFcXVhbHNPdmVybG9hZCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KEZvbywgRm9vKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIGAp
OwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJyaWRlLXN1YnNjcmlwdC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVj
dGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2NDAwOTVmNzMxZWY3M2Fh
Y2U5ZTM2OGFhMTA2MmE2MWQwYmI3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0
LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotCi1QQVNTIG92ZXJy
aWRlU3Vic2NyaXB0U3RydWN0IAotUEFTUyBvdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZERvU3Rv
cmVzIAotUEFTUyBvdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJzIAotUEFTUyBv
dmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJzSW5jb3JyZWN0bHkgCi0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVycmlkZS1zdWJzY3JpcHQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVycmlkZS1zdWJzY3JpcHQuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmN2FhYzc1ZGI0ODQyOGVlMmJiMjAyNjdmNThjMjRj
OWRiNTYzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IG92ZXJyaWRlIHN1YnNjcmlwdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxz
bC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdo
bHNsVGVzdHMub3ZlcnJpZGVTdWJzY3JpcHRTdHJ1Y3QgPSBhc3luYyAoKSA9PgotewotICAgIGxl
dCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGludCB4Owot
ICAgICAgICAgICAgaW50IHk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyZWFkIGludCogb3BlcmF0
b3ImW10odGhyZWFkIEZvbyogZm9vLCB1aW50IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaW5kZXggPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKLSAgICAg
ICAgICAgIGlmIChpbmRleCA9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT55Owot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICBmb28ueCA9IDQ5ODsK
LSAgICAgICAgICAgIGZvby55ID0gMTk7Ci0gICAgICAgICAgICByZXR1cm4gZm9vWzBdICsgZm9v
WzFdICogMzsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDk4ICsgMTkgKiAzKTsKLX0KLQotd2hs
c2xUZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZERvU3RvcmVzID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAg
ICBpbnQgeDsKLSAgICAgICAgICAgIGludCB5OwotICAgICAgICB9Ci0gICAgICAgIHRocmVhZCBp
bnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywgdWludCBpbmRleCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICZmb28t
Png7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
JmZvby0+eTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlu
dCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBGb28gZm9vOwotICAgICAgICAgICAgZm9v
WzBdID0gNDk4OwotICAgICAgICAgICAgZm9vWzFdID0gMTk7Ci0gICAgICAgICAgICByZXR1cm4g
Zm9vLnggKyBmb28ueTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDk4ICsgMTkpOwotfQotCi13
aGxzbFRlc3RzLm92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kVXNlUG9pbnRlcnMgPSBhc3luYyAo
KSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAg
ICAgICAgIGludCB4OwotICAgICAgICAgICAgaW50IHk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhy
ZWFkIGludCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZm9vLCB1aW50IGluZGV4KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
JmZvby0+eDsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAxKQotICAgICAgICAgICAgICAgIHJl
dHVybiAmZm9vLT55OwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAg
ICAgaW50IGJhcih0aHJlYWQgRm9vKiBmb28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAoKmZvbylbMF0gKyAoKmZvbylbMV07Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICBmb28ueCA9IDQ5ODsK
LSAgICAgICAgICAgIGZvby55ID0gMTk7Ci0gICAgICAgICAgICByZXR1cm4gYmFyKCZmb28pOwot
ICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10pLCA0OTggKyAxOSk7Ci19Ci0KLXdobHNsVGVzdHMub3ZlcnJp
ZGVTdWJzY3JpcHRTdHJ1Y3RBbmRVc2VQb2ludGVyc0luY29ycmVjdGx5ID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28gewot
ICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAgIGludCB5OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZm9v
LCB1aW50IGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpbmRleCA9
PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKLSAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPnk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
bnQgYmFyKHRocmVhZCBGb28qIGZvbykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZm9vWzBdICsgZm9vWzFdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGZv
bygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRm9vIGZvbzsKLSAgICAgICAgICAg
ICAgICBmb28ueCA9IDQ5ODsKLSAgICAgICAgICAgICAgICBmb28ueSA9IDE5OwotICAgICAgICAg
ICAgICAgIHJldHVybiBiYXIoJmZvbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQot
Ci1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgotCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBsdXMtZXF1YWxzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmMDljYzY1ZjYyMTcxOTk1ZDZkZTU4ZjYwODUzMjI5MjY1
MzFjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251
bGwKQEAgLTEsNCArMCwwIEBACi0KLVBBU1MgcGx1c0VxdWFscyAKLVBBU1MgcGx1c0VxdWFsc1Jl
c3VsdCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBsdXMtZXF1YWxz
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmNWVjYjQxNDYyOTU4YmQ4NzU5OWNjYjg1MjE4Yzg5
NWUxZjM5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDM5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0
Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBv
dmVycmlkZSBzdWJzY3JpcHRzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3Rz
LnBsdXNFcXVhbHMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICB4ICs9IDQyOwotICAgICAg
ICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzODUpXSksIDM4NSAr
IDQyKTsKLX0KLQotd2hsc2xUZXN0cy5wbHVzRXF1YWxzUmVzdWx0ID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHggKz0gNDI7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgz
ODUpXSksIDM4NSArIDQyKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvaW50ZXIt
c3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcG9pbnRl
ci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzJjNWQ4YWM1NDgyOGIwYmFkODAxMDkwM2UzNTFhM2RhNzI1ZTAzNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
cG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAs
MCBAQAotCi1QQVNTIHBvaW50ZXJUb1BvaW50ZXIgCi1QQVNTIHBvaW50ZXJUb01lbWJlciAKLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvaW50ZXItc3BlYy10ZXN0cy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvaW50ZXItc3BlYy10ZXN0cy5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmJiMjk3YzgzODk5ZGM3ZjI2Njk1NWYxYjJk
YmNkNjYyOWQ4YTU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMuaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0
YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08
dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0i
anMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9
OwotCi13aGxzbFRlc3RzLnBvaW50ZXJUb1BvaW50ZXIgPSBhc3luYyAoKSA9PgotewotICAgIGxl
dCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IHg7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiBwID0gJng7Ci0gICAgICAgICAgICB0aHJl
YWQgaW50KiogcHAgPSAmcDsKLSAgICAgICAgICAgIGludCp0aHJlYWQqdGhyZWFkIHFxID0gcHA7
Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIHggPSA0MjsKLSAgICAg
ICAgICAgICpwID0gNzY7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAgICAgICAgICAgICoq
cHAgPSAzOTsKLSAgICAgICAgICAgIHJlc3VsdCArPSB4OwotICAgICAgICAgICAgKipxcSA9IDgz
OwotICAgICAgICAgICAgcmVzdWx0ICs9IHg7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgYDs7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzYgKyAzOSArIDgzKTsKLX0KLQotd2hsc2xUZXN0cy5w
b2ludGVyVG9NZW1iZXIgPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgdm9pZCBmb28oKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZsb2F0MyB4OwotICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdCogeSA9ICZ4WzFd
OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgdm9pZCBmb28oKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZsb2F0M3gzIHg7Ci0gICAgICAgICAgICAgICAgdGhyZWFkIGZsb2F0MyogeSA9ICZ4
WzFdOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1wb3N0Zml4LXByZWZpeC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhNzViZGYxMGY2MWI0ZTgzZTFhMjY0Y2I3YzhhNmY2YTU5NDFjNDlkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1wb3N0Zml4LXByZWZpeC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiAr
MCwwIEBACi0KLVBBU1MgcHJlZml4UGx1c1BsdXMgCi1QQVNTIHByZWZpeFBsdXNQbHVzUmVzdWx0
IAotUEFTUyBwb3N0Zml4UGx1c1BsdXMgCi1QQVNTIHBvc3RmaXhQbHVzUGx1c1Jlc3VsdCAKLVBB
U1MgcHJlZml4TWludXNNaW51cyAKLVBBU1MgcHJlZml4TWludXNNaW51c1Jlc3VsdCAKLVBBU1Mg
cG9zdGZpeE1pbnVzTWludXMgCi1QQVNTIHBvc3RmaXhNaW51c01pbnVzUmVzdWx0IAotUEFTUyBw
bHVzRXF1YWxzIAotUEFTUyBwbHVzRXF1YWxzUmVzdWx0IAotUEFTUyBtaW51c0VxdWFscyAKLVBB
U1MgbWludXNFcXVhbHNSZXN1bHQgCi1QQVNTIHRpbWVzRXF1YWxzIAotUEFTUyB0aW1lc0VxdWFs
c1Jlc3VsdCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgt
cHJlZml4Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcG9zdGZpeC1wcmVmaXguaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4ZGNmNjQ4YWUyNTA4NWI3NGQ4Njhl
ZmFmMmUzMTUzMDA1Mjc3ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcG9zdGZpeC1wcmVmaXguaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1l
dGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgot
PHRpdGxlPlRlc3QgcHJlZml4L3Bvc3RmaXguPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxz
bC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdo
bHNsVGVzdHMucHJlZml4UGx1c1BsdXMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFt
ID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICArK3g7
Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0p
LCA2NSk7Ci19Ci0KLXdobHNsVGVzdHMucHJlZml4UGx1c1BsdXNSZXN1bHQgPSBhc3luYyAoKSA9
PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gKyt4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQo
NjQpXSksIDY1KTsKLX0KLQotd2hsc2xUZXN0cy5wb3N0Zml4UGx1c1BsdXMgPSBhc3luYyAoKSA9
PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAg
ICB7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQot
ICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDY0KV0pLCA2NSk7Ci19Ci0KLXdobHNsVGVzdHMucG9zdGZpeFBsdXNQ
bHVzUmVzdWx0ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAg
aW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHgrKzsKLSAgICAg
ICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2NCk7Ci19Ci0KLXdobHNsVGVzdHMucHJlZml4
TWludXNNaW51cyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAg
IGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC0teDsKLSAgICAgICAgICAg
IHJldHVybiB4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDYzKTsKLX0KLQot
d2hsc2xUZXN0cy5wcmVmaXhNaW51c01pbnVzUmVzdWx0ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIC0teDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2Myk7
Ci19Ci0KLXdobHNsVGVzdHMucG9zdGZpeE1pbnVzTWludXMgPSBhc3luYyAoKSA9PgotewotICAg
IGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAg
ICAgICAgICB4LS07Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KDY0KV0pLCA2Myk7Ci19Ci0KLXdobHNsVGVzdHMucG9zdGZpeE1pbnVzTWludXNSZXN1
bHQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9v
KGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geC0tOwotICAgICAgICB9Ci0g
ICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNjQpXSksIDY0KTsKLX0KLQotd2hsc2xUZXN0cy5wbHVzRXF1YWxzID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQg
eCkKLSAgICAgICAgewotICAgICAgICAgICAgeCArPSA0MjsKLSAgICAgICAgICAgIHJldHVybiB4
OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUgKyA0Mik7Ci19Ci0KLXdo
bHNsVGVzdHMucGx1c0VxdWFsc1Jlc3VsdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dy
YW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiB4ICs9IDQyOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUgKyA0
Mik7Ci19Ci0KLXdobHNsVGVzdHMubWludXNFcXVhbHMgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHggLT0gNDI7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KDM4NSldKSwgMzg1IC0gNDIpOwotfQotCi13aGxzbFRlc3RzLm1pbnVzRXF1YWxzUmVz
dWx0ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9v
KGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geCAtPSA0MjsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1IC0gNDIpOwotfQotCi13aGxzbFRlc3RzLnRp
bWVzRXF1YWxzID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBp
bnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICB4ICo9IDQyOwotICAgICAgICAg
ICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzODUpXSksIDM4NSAqIDQy
KTsKLX0KLQotd2hsc2xUZXN0cy50aW1lc0VxdWFsc1Jlc3VsdCA9IGFzeW5jICgpID0+IHsKLSAg
ICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIHggKj0gNDI7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzODUp
XSksIDM4NSAqIDQyKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13
cml0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnkt
d3JpdGUtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgyZjkw
NDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1v
ZGlmeS13cml0ZS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBB
U1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWhp
Z2gtem9tYmllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1t
b2RpZnktd3JpdGUtaGlnaC16b21iaWVzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLWV4cGVjdGVkLnR4dAor
KysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YTc1NjEzZGM4NWY2MjIwMWE1MmVkNDBjMzMz
MTllMjk0ZTQwNDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmll
cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08
aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1ib29s
IGZpbGwodGhyZWFkIGZsb2F0NHg0KiBtYXQsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0NHg0
IHJlc3VsdDsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpIHsKLSAgICAg
ICAgICAgIHJlc3VsdFtpXSA9IGZsb2F0NCh2YWx1ZSwgdmFsdWUsIHZhbHVlLCB2YWx1ZSk7Ci0g
ICAgfQotICAgICptYXQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVtudW10aHJl
YWRzKDEsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10g
YnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVh
ZElEKSB7Ci0gICAgZmxvYXQ0eDQgbWF0OwotICAgIGZpbGwoJm1hdCwgNCk7Ci0KLSAgICBmbG9h
dDQgdmVjOwotICAgIHZlY1swXSArPSBtYXRbMF1bMF0gKyBtYXRbMF1bMV0gKyBtYXRbM11bMl07
Ci0KLSAgICBmbG9hdCB2YWx1ZSA9IDQyOwotICAgIHZhbHVlICs9IHZlY1swXTsKLQotICAgIG1h
dFswXVswXSArPSAobWF0WzBdWzBdICs9ICh2YWx1ZSArPSBtYXRbMF1bMF0pKTsKLQotICAgIGJ1
ZmZlclt1aW50KHRocmVhZElELngpXSA9IG1hdFswXVswXTsKLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAg
IGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ig
PSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2Ut
YnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAg
ICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5U
UkFOU0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVm
ZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZm
ZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsw
XSA9IDA7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZl
clVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25z
dCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3Jp
cHRvcik7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZl
ciwgc2l6ZX07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNv
dXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0g
ICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNj
cmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1h
bmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVy
KGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBh
c3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuZGlzcGF0Y2goMSwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3Mo
KTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0g
ICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25z
dCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygp
OwotICAgIGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3Vs
dHNBcnJheUJ1ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gNjYpCi0g
ICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7
Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAg
fSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwot
ICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZjFiMTFmYjMxYTExZmJmMThkYjc5ZDlhM2E3MDUzOTU3
MGQ4YTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4K
LTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0K
LWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rl
cih1MCkpIHsKLSAgICBidWZmZXJbMF0gPSAxOwotICAgIGJ1ZmZlclsxXSA9IGJ1ZmZlclswXSsr
OwotCi0gICAgYnVmZmVyWzJdID0gMTsKLSAgICBidWZmZXJbM10gPSArK2J1ZmZlclsyXTsKLQot
ICAgIGJ1ZmZlcls0XSA9IDE7Ci0gICAgYnVmZmVyWzRdICs9IDU7Ci0KLSAgICBidWZmZXJbNV0g
PSAxOwotICAgIGJ1ZmZlcls1XSAqPSA3OwotCi0gICAgaW50IHRvdGFsID0gMTQ7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDsgaSArPSAyKSB7Ci0gICAgICAgIHRvdGFsICs9IGk7Ci0gICAg
fQotICAgIGJ1ZmZlcls2XSA9IHRvdGFsOwotCi0gICAgdG90YWwgPSAxNDsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAgICAgdG90YWwgKz0gaTsKLSAgICB9Ci0gICAg
YnVmZmVyWzddID0gdG90YWw7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKLSAg
ICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOwot
ICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOwotCi0gICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3Rh
Z2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7
Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7Ci0K
LSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IGJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBidWZm
ZXJCaW5kaW5nID0ge2J1ZmZlcjogYnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVu
Y29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCBj
b21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7Ci0g
ICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7Ci0gICAg
Y29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIu
ZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5p
c2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLQot
ICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBSZWFkQXN5bmMo
KTsKLSAgICBjb25zdCByZXN1bHRzID0gbmV3IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVy
KTsKLSAgICBpZiAocmVzdWx0c1swXSA9PSAyCi0gICAgICAgICYmIHJlc3VsdHNbMV0gPT0gMQot
ICAgICAgICAmJiByZXN1bHRzWzJdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c1szXSA9PSAyCi0g
ICAgICAgICYmIHJlc3VsdHNbNF0gPT0gNgotICAgICAgICAmJiByZXN1bHRzWzVdID09IDcKLSAg
ICAgICAgJiYgcmVzdWx0c1s2XSA9PSAzNAotICAgICAgICAmJiByZXN1bHRzWzddID09IDU5KQot
ICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoIiIp
OwotICAgIGJ1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwot
Z2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmlj
ZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZp
bmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1cnNpdmUtc3RydWN0cy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVjdXJzaXZlLXN0cnVjdHMtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWI1MzQ4ZDAzM2MwMzQ4ODhlMWJiMTAz
N2ZjZDRlMTAzZDNhMTk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1cnNpdmUtc3RydWN0cy1leHBlY3Rl
ZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotUEFTUyBtdXR1YWxseVJlY3Vy
c2l2ZVN0cnVjdCAKLVBBU1MgbXV0dWFsbHlSZWN1cnNpdmVTdHJ1Y3RXaXRoUG9pbnRlcnNCcm9r
ZW4gCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1cnNpdmUtc3Ry
dWN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlY3Vyc2l2ZS1zdHJ1Y3RzLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZjA4ZDRhZTk5OGM1YWE4YjE2ZTZi
MjUwMTA0N2NmYmM4MzRmMGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxvbmci
PgotPHRpdGxlPlRlc3QgbG9vcHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0
LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVz
dHMubXV0dWFsbHlSZWN1cnNpdmVTdHJ1Y3QgPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAg
ICAgICAgQmFyIGJhcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cnVjdCBCYXIgewot
ICAgICAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAg
ICAgICAKLX0KLQotd2hsc2xUZXN0cy5tdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdFdpdGhQb2ludGVy
c0Jyb2tlbiA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0
cnVjdCBGb28gewotICAgICAgICAgICAgdGhyZWFkIEJhciogYmFyOwotICAgICAgICAgICAgaW50
IGZvbzsKLSAgICAgICAgfQotICAgICAgICBzdHJ1Y3QgQmFyIHsKLSAgICAgICAgICAgIHRocmVh
ZCBGb28qIGZvbzsKLSAgICAgICAgICAgIGludCBiYXI7Ci0gICAgICAgIH0KLSAgICAgICAgaW50
IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICBCYXIg
YmFyOwotICAgICAgICAgICAgZm9vLmZvbyA9IDU2NDsKLSAgICAgICAgICAgIGJhci5iYXIgPSA1
MzsKLSAgICAgICAgICAgIHJldHVybiBmb28uYmFyLT5iYXIgLSBiYXIuZm9vLT5mb287Ci0gICAg
ICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDApOwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2Ny
aXB0PgotPC9odG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0
dXJuLWxvY2FsLXZhcmlhYmxlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtcmV0dXJuLWxvY2FsLXZhcmlhYmxlLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJldHVybi1sb2NhbC12YXJpYWJsZS1leHBlY3RlZC5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgot
PGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7Ci1kcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2FsLXZhcmlhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2FsLXZhcmlhYmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDhjM2UzNTY3YjY4YzZkNmNlZDQ2M2Y3NzY3Y2E2YTM4ZjE4NTUwZTcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJldHVybi1sb2NhbC12YXJpYWJsZS5odG1sCisrKyAvZGV2L251bGwKQEAg
LTEsMTQwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5Pgot
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08
c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAg
ZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMCk7Ci19Ci0KLWZsb2F0IGNvcHkoZmxvYXQgdikgewotICAgIGZsb2F0IGxvY2FsID0gdjsK
LSAgICByZXR1cm4gbG9jYWw7Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkp
IHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0OwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247Ci0gICAgcmVzdWx0LnNoYWRlID0gY29weShzaGFkZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRl
LCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9k
dWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25z
dCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJh
Z21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1z
dHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3Iiwg
Y3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0
IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdi
YTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BV
Q29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwot
Ci0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxv
YXQ0In07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0
OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0
ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1
dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNv
bnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdt
ZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3Rh
dGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5j
cmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29u
c3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0g
PSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4w
OwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTld
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3Vy
Y2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAg
cmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0K
LSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJl
bmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIu
ZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5p
c2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0K
LWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
LWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZp
Y2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewot
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
cmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXJldHVybi1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2NkZTdiYWUzMWI3NmMwNDg2MjA0MzBkZTY3NGVlNmJhYzc0YzQ3OS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEs
MTAgKzAsMCBAQAotCi1QQVNTIHJldHVybklmIAotUEFTUyByZXR1cm5SZWZlcmVuY2VUb1NhbWVQ
YXJhbWV0ZXIgCi1QQVNTIHJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyV2l0aERpZmZlcmVudEZ1
bmN0aW9ucyAKLVBBU1MgcmV0dXJuUmVmZXJlbmNlVG9QYXJhbWV0ZXIgCi1QQVNTIHJldHVyblJl
ZmVyZW5jZVRvTG9jYWxWYXJpYWJsZVdpdGhOZXN0aW5nIAotUEFTUyByZXR1cm5SZWZlcmVuY2VU
b0xvY2FsVmFyaWFibGUgCi1QQVNTIHJldHVybkludExpdGVyYWxVaW50IAotUEFTUyByZXR1cm5J
bnRMaXRlcmFsRmxvYXQgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1y
ZXR1cm4tc3BlYy10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVybi1z
cGVjLXRlc3RzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjFhNDBkNTkx
NWZhZDY4MDAxN2EzZDg2Njc2NWQ4NTRjNzdiZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVybi1zcGVj
LXRlc3RzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotPCFET0NUWVBFIGh0
bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBj
b250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRs
ZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25z
dCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMucmV0dXJuSWYgPSBhc3luYyAoKSA9PiB7
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9vKGlu
dCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAg
ICAgICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB5OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHkgPSA2OwotICAgICAgICAgICAgICAgIGlmICh4
ID09IDcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgeSA9IDg7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAg
ICAgYAotICAgICAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gNykgewotICAgICAg
ICAgICAgICAgICAgICB5ID0gODsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIGApOwotCi0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgIGlmICh4ID09
IDcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gODsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIDEwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoMyldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSks
IDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNildKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCld
KSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCg5KV0pLCAxMCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaW50IHkgPSA2OwotICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09
IDkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0gICAgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50
IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkgPSA2OwotICAgICAgICAg
ICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgIHJldHVybiA4OwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICB5ID0gOTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMyldKSwgOSk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDQpXSksIDkpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCg1KV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNildKSwgOSk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDcpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOSldKSwgOSk7Ci0gICAg
YXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9vKGludCB4KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgICAg
ICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiA4OwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxMDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDExOwotICAgICAgICAgICAgfQotICAg
ICAgICBgKTsKLQotICAgIHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgIGlmICh4ID09IDcpCi0g
ICAgICAgICAgICAgICAgaW50IHkgPSA4OwotICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAg
IH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA2KTsKLX07Ci0KLXdobHNsVGVzdHMucmV0dXJuUmVm
ZXJlbmNlVG9TYW1lUGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0g
YAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBsdXMo
YmFyKDUpLCBiYXIoNykpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHBsdXModGhyZWFkIGlu
dCogeCwgdGhyZWFkIGludCogeSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICp4ICsg
Knk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50KiBiYXIoaW50IHgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAgfQotICAgIGA7Ci0KLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxNCk7
Ci19OwotCi13aGxzbFRlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyV2l0aERpZmZlcmVu
dEZ1bmN0aW9ucyA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAg
aW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqYmFyKDEwKSArICpiYXoo
MjApOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gJng7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQg
aW50KiBiYXooaW50IHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmeTsKLSAgICAg
ICAgfQotICAgIGA7Ci0KLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7Ci19OwotCi13aGxzbFRlc3RzLnJldHVyblJlZmVyZW5j
ZVRvUGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBpbnQgZm9vKGJvb2wgY29uZGl0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
KmJhcihjb25kaXRpb24sIDEsIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGludCog
YmFyKGJvb2wgY29uZGl0aW9uLCBpbnQgYSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBjb25kaXRpb24gPyAmYSA6ICZiOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJv
b2wodHJ1ZSldKSwgMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKSwgMik7Ci19OwotCi13aGxzbFRlc3Rz
LnJldHVyblJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZVdpdGhOZXN0aW5nID0gYXN5bmMgKCkgPT4g
ewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuICpiYXIoKSArICpiYXooKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRo
cmVhZCBpbnQqIGJhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBhID0gMjA7Ci0gICAg
ICAgICAgICByZXR1cm4gJmE7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50KiBiYXoo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYSA9IDIyOwotICAgICAgICAgICAgcmV0dXJu
ICZhOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKLX07Ci0KLXdobHNsVGVzdHMucmV0
dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9n
cmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpiYXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZCBpbnQqIGJhcigpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBhID0gNDI7Ci0gICAgICAgICAgICByZXR1cm4gJmE7Ci0gICAg
ICAgIH0KLSAgICBgOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRl
cmFsVWludCA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9ICJ1aW50IGZvbygpIHsg
cmV0dXJuIDQyOyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRl
cmFsRmxvYXQgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSAiZmxvYXQgZm9vKCkg
eyByZXR1cm4gNDI7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7
Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1zZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtc2V0dGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkMWYyZDZjMzQxYWI1MGI2NmYyYjlhZTc4NDI3YTcyNzFiMDY4OThhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1zZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSw4ICswLDAgQEAKLQotUEFTUyBzZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgCi1QQVNTIHNldHRlcldp
dGhOb0dldHRlck92ZXJsb2FkIAotUEFTUyBzZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVk
IAotUEFTUyByZWN1cnNpdmVTZXR0ZXJzIAotUEFTUyBsb25lU2V0dGVyIAotUEFTUyBsb25lU2V0
dGVyUG9pbnRlciAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNldHRl
ci1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMt
dGVzdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYwMGQ2YTdjODFjZDQ0
ZDgyNDk0NzExMmY2MDc1NDc5ZWFkNjQ5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVz
dHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5zZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgPSBhc3luYyAoKSA9PgotewotICAg
IGNvbnN0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBvcGVyYXRvci5mb28oaW50KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gNTsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0
b3IuZm9vPShpbnQsIGludCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAg
ICAgICAgfQotICAgICAgICBpbnQgZm9vKCkgewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAg
ICAgICB4LmZvbyA9IDQyOwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICAg
ICAgaW50IGJhcigpIHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgcmV0dXJuIHgu
Zm9vOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDU0Myk7Ci0gICAgLy9hc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCA1KTsKLX0KLQotd2hs
c2xUZXN0cy5zZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZCA9IGFzeW5jICgpID0+Ci17Ci0gICAg
YXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQot
ICAgICAgICAgICAgc3RydWN0IEJhciB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28o
Rm9vKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1MzQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBCYXIgb3BlcmF0b3IuZm9vPShCYXIsIGludCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGApOwotICAgICAgICAKLX0KLQotd2hsc2xUZXN0cy5zZXR0ZXJXaXRoTm9HZXR0ZXJPdmVy
bG9hZEZpeGVkID0gYXN5bmMgKCkgPT4KLXsKLSAgICBjb25zdCBwcm9ncmFtID1gCi0gICAgICAg
IHN0cnVjdCBCYXIgeyB9Ci0gICAgICAgIGludCBvcGVyYXRvci5mb28oQmFyKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gNTM0OwotICAgICAgICB9Ci0gICAgICAgIEJhciBvcGVyYXRv
ci5mb289KEJhciwgaW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQmFyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpIHsKLSAgICAgICAgICAgIEJhciBiYXI7Ci0gICAg
ICAgICAgICByZXR1cm4gYmFyLmZvbzsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKCkgewot
ICAgICAgICAgICAgQmFyIGJhcjsKLSAgICAgICAgICAgIGJhci5mb28gPSA1MjsKLSAgICAgICAg
ICAgIHJldHVybiBiYXIuZm9vOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA1MzQpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDUz
NCk7Ci19Ci0KLXdobHNsVGVzdHMucmVjdXJzaXZlU2V0dGVycyA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50
IHg7Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAgICAgfQotICAgICAgICBzdHJ1Y3QgQmFyIHsK
LSAgICAgICAgICAgIGludCBhOwotICAgICAgICAgICAgaW50IGI7Ci0gICAgICAgIH0KLSAgICAg
ICAgaW50IG9wZXJhdG9yLmMoQmFyIGJhcikgeyByZXR1cm4gYmFyLmE7IH0KLSAgICAgICAgQmFy
IG9wZXJhdG9yLmJhcihGb28gZm9vKSB7IEJhciBiOyBiLmEgPSBmb28ueDsgYi5iID0gZm9vLnk7
IHJldHVybiBiOyB9Ci0gICAgICAgIEJhciBvcGVyYXRvci5jPShCYXIgYmFyLCBpbnQgbmV3dmFs
KSB7IGJhci5hID0gbmV3dmFsOyByZXR1cm4gYmFyOyB9Ci0gICAgICAgIEZvbyBvcGVyYXRvci5i
YXI9KEZvbyBmb28sIEJhciBuZXd2YWwpIHsgZm9vLnggPSBuZXd2YWwuYTsgZm9vLnkgPSBuZXd2
YWwuYjsgcmV0dXJuIGZvbzsgfQotICAgICAgICBpbnQgZigpIHsKLSAgICAgICAgICAgIEZvbyBm
b287Ci0gICAgICAgICAgICBmb28ueCA9IGZvby55ID0gMzsKLSAgICAgICAgICAgIGZvby5iYXIu
YyA9IDg7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLngqMTAgKyBmb28ueTsKLSAgICAgICAgfQot
ICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImYiLCBbXSksIDgzKTsKLX0KLQotd2hsc2xUZXN0cy5sb25lU2V0dGVyID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVy
YXRvci5mb289KGludCwgaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLQotd2hsc2xU
ZXN0cy5sb25lU2V0dGVyUG9pbnRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tG
YWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvci5mb289KHRo
cmVhZCBpbnQqIHB0ciwgaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLQotcnVuVGVz
dHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0K
LVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNp
bXBsZS1hcnJheXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlz
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmY5MTgyOTYzOTI5ZjExMGVm
ZGJiYWUwNDk5NTdkOWU4YTNkN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJheXMuaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVh
ZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXZvaWQgZmlsbCh0
aHJlYWQgaW50W10gYXJyYXksIGludCB2YWx1ZSkgewotICAgIGZvciAodWludCBpID0gMDsgaSA8
IGFycmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGFycmF5W2ldID0gdmFsdWU7Ci0gICAgfQot
fQotCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRl
dmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rp
c3BhdGNoVGhyZWFkSUQpIHsKLSAgICBpbnRbNDJdIGFycmF5OwotICAgIGlmIChhcnJheS5sZW5n
dGggIT0gNDIpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJh
eS5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBhcnJheVswXSA9IDUxNzsKLSAgICBpZiAoYXJyYXlbMF0g
IT0gNTE3KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0aHJlYWQgaW50W10gYXJyYXlQdHIgPSBA
YXJyYXk7Ci0gICAgaWYgKGFycmF5UHRyLmxlbmd0aCAhPSA0MikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW50WzQyXSBhcnJheTI7Ci0gICAgYXJyYXkyID0gYXJyYXk7Ci0gICAgaWYgKGFycmF5
Mi5sZW5ndGggIT0gNDIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoYXJyYXkyWzBdICE9IDUx
NykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbChhcnJheVB0ciwgMTMzNyk7Ci0gICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFy
cmF5UHRyW2ldICE9IDEzMzcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhcnJh
eVtpXSAhPSAxMzM3KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChhcnJh
eTJbMF0gIT0gNTE3KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGFycmF5Mi5sZW5ndGggIT0g
NDIpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVpbnQgaSA9IDE7IGkgPCBhcnJheTIubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFycmF5MltpXSAhPSAwKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29u
c3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29t
cHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZm
ZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3Jv
dXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsK
LSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChw
aXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVz
Y3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNv
bnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0
ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZF
Ul9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFw
V3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFy
cmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOwot
ICAgIGJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ig
PSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5U
UkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0
c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9
OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1
ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBi
aW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0
IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7
Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rl
cigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIs
IDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2Rl
ciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29k
ZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRp
c3BhdGNoKDEsIDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAg
Y29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmlj
ZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0
c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBs
ZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIp
OwotICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBhc3Nl
ZCgiIik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVm
ZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0Rl
dmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1
bmN0aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsK
LSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0p
OwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0
KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMjc5Yzk4ZTRjNzRjMGI4Y2MwNjY2ZDMzZGE4
N2JkODE3NzUwZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIHNpbXBsZUdldHRlciAK
LVBBU1Mgc2ltcGxlU2V0dGVyIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtc2ltcGxlLWdldHRlci1zZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1z
aW1wbGUtZ2V0dGVyLXNldHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
Y2MyNjIyYmJhNzAwZmFmM2Y0OWQ2YjFkNDY3MmMzMDYwYzk3NzYzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1z
aW1wbGUtZ2V0dGVyLXNldHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAot
PCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1l
PSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhh
cm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuc2ltcGxlR2V0dGVy
ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9v
IHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIGludCBvcGVyYXRvci55
KEZvbyBmb28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmb28ueDsKLSAgICAgICAg
fQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIGZvbzsKLSAg
ICAgICAgICAgIGZvby54ID0gNzgwNDsKLSAgICAgICAgICAgIHJldHVybiBmb28ueTsKLSAgICAg
ICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgNzgwNCk7Ci19OwotCi13aGxzbFRlc3RzLnNpbXBsZVNldHRlciA9
IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgc3RydWN0IEZvbyB7
Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0b3IueShG
b28gZm9vKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAgICAgIH0K
LSAgICAgICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludCB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9vLnggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBmb287Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyBmb287
Ci0gICAgICAgICAgICBmb28ueSA9IDc4MDQ7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0g
ICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDc4MDQpOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7
Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNp
bXBsZS10ZXN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNi
NzY2M2QwNjlkNGQ1N2RkOWI5MzA1YjA2Yzg4YjQzM2NkOGY2NDAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNp
bXBsZS10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQot
UEFTUyBzaW1wbGVVbnJlYWNoYWJsZUNvZGUgCi1QQVNTIHNpbXBsZU5vUmV0dXJuIAotUEFTUyBz
aW1wbGVSZWN1cnNpdmVTdHJ1Y3QgCi1QQVNTIHNpbXBsZVJlY3Vyc2lvbiAKLVBBU1Mgc2ltcGxl
UmVjdXJzaW9uMiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBs
ZS10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS10ZXN0cy5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTM3MTNjNTE3ZThlNjFiYjQ4YTQwNmQ4
NGRlZGUzZTVhYjFiMjkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDYzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBj
aGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0
bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owot
Ci13aGxzbFRlc3RzLnNpbXBsZVVucmVhY2hhYmxlQ29kZSA9IGFzeW5jICgpID0+IHsKLSAgICBh
d2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaW50IHg7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnNpbXBsZU5vUmV0
dXJuID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgiaW50IGZvbygpIHsgfSIp
OwotfQotCi13aGxzbFRlc3RzLnNpbXBsZVJlY3Vyc2l2ZVN0cnVjdCA9IGFzeW5jICgpID0+IHsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28g
ewotICAgICAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwot
fQotCi13aGxzbFRlc3RzLnNpbXBsZVJlY3Vyc2lvbiA9IGFzeW5jICgpID0+IHsKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKGludCB4KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvbyh4KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMuc2ltcGxlUmVjdXJzaW9uMiA9IGFzeW5jICgpID0+IHsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBiYXIoaW50
IHgpIHsKLSAgICAgICAgICAgICAgICBmb28oeCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHg7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb28oYmFyKHgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLWV4cGVj
dGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjZTAyOGI0MDQyZTc5ZGE5
MmE1YWQ3ZjI1NGU3YjljMWMyOGQ4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLXdoaWxlLWxvb3At
ZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mgc2ltcGxl
V2hpbGUgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtd2hp
bGUtbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29w
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyY2VhY2U4NTNmYjJiMGZiMmY4
NmEwZmNlZWVkZDljOGM2ZjU4N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLmh0
bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVz
dHMgPSB7fTsKLQotd2hsc2xUZXN0cy5zaW1wbGVXaGlsZSA9IGFzeW5jICgpID0+IHsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAg
ICAgICAgd2hpbGUgKHggPCAxMykKLSAgICAgICAgICAgICAgICB4ID0geCAqIDI7Ci0gICAgICAg
ICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIDE2KTsKLX0K
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjcyYzFjYWJlMDdiNjAyNGY5ZWI3NWQzZTY4OTEwMWMwODFiYjJl
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtc3RvcmUtbnVsbC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSwzICswLDAgQEAKLQotUEFTUyBzdG9yZU51bGwgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtc3RvcmUtbnVsbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjQ0YjMy
YzVlZDZkZTc2ZjI1YTlkMDc3NDNhN2E3YmNjMTYxY2RiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1u
dWxsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5zdG9yZU51bGwgPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdm9pZCBmb28oKSB7ICpudWxsID0gNDI7IH0K
LSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0
bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9w
ZXJ0eS11cGRhdGVzLXByb3Blcmx5LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtc3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZm
MDNkYjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0eS11cGRhdGVzLXBy
b3Blcmx5LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9w
ZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc3Rv
cmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwZTRkNTVjNTE1YTY3MTZhZTU0Mzg5ZmFlMzEwZGY4Y2ZlNjI3NmRmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFk
PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4
T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotc3RydWN0IEJhciB7Ci0gICAgaW50IHg7Ci0gICAgZmxv
YXQgeTsKLSAgICBpbnQgejsKLX0KLQotc3RydWN0IEZvbyB7Ci0gICAgQmFyIGJhcjsKLSAgICBC
YXIgYmFyMjsKLX0KLQotdGhyZWFkIEZvbyogcHRyKCkgewotICAgIEZvbyBsb2NhbDsKLSAgICBy
ZXR1cm4gJmxvY2FsOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQg
cG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0g
ICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIHRocmVhZCBGb28qIHAgPSBwdHIoKTsKLSAgICBw
LT5iYXIyLnkgPSAxLjA7Ci0gICAgZmxvYXQgdmFsdWUgPSBwLT5iYXIyLnk7Ci0KLSAgICByZXN1
bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSB2YWx1ZTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0
NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChk
ZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9Owot
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0g
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlv
bigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXN0cnVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtc3RydWN0LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzYyMGVlMWIyODU4NDZjOGE2ZmUyZmNmNDQ1Y2E2M2ZjZGE3ZGE1My4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtc3RydWN0LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBA
QAotCi1QQVNTIGVtcHR5U3RydWN0IAotUEFTUyBzZXR0aW5nQW5BcnJheUluc2lkZUFTdHJ1Y3Qg
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzAxMDdjOGRlMWNiNDMxYzBkOTc2MmUzOTA2NGY2ODRhMWY5YTgxZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtc3RydWN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRp
bWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNj
cmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNs
VGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5lbXB0eVN0cnVjdCA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBUaGluZ3kgeyB9Ci0gICAgICAgIGlu
dCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBUaGluZ3kgdGhpbmd5OwotICAgICAgICAg
ICAgcmV0dXJuIDQ2OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Nik7Ci19OwotCi13aGxzbFRl
c3RzLnNldHRpbmdBbkFycmF5SW5zaWRlQVN0cnVjdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50WzFdIGFy
cmF5OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBGb28gZm9vOwotICAgICAgICAgICAgdGhyZWFkIEZvbyogYmFyID0gJmZvbzsKLSAgICAgICAg
ICAgIGJhci0+YXJyYXlbMF0gPSAyMTsKLSAgICAgICAgICAgIHJldHVybiBmb28uYXJyYXlbMF07
Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDIxKTsKLX07Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMp
OwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtc3dpdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gt
ZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNiZjUxM2M2OWZj
NmE2M2ZjODMxMjRmMzFiYjgzZGZlNDUxMzAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mgc3dpdGNoQnJlYWsg
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDQ3MDYxYjE1YTA4ZWM1M2UxMTRhNjcyNzhkNjZjYzRmZTFhMDY1Yy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtc3dpdGNoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRp
bWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgcHJlZml4L3Bvc3RmaXguPC90aXRs
ZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25z
dCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuc3dpdGNoQnJlYWsgPSBhc3luYyAoKSA9
PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIHN3aXRjaCAoeCkg
ewotICAgICAgICAgICAgY2FzZSA3Njc6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IDI3Owot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA2OToKLSAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gNzYyNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IDQ5OwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDc2NyldKSwgMjcpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2OSldKSwgNzYyNCk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDApXSksIDQ5KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3Njcmlw
dD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXJuYXJ5
LXNwZWMtdGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGVybmFy
eS1zcGVjLXRlc3QtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
MmI4ODY0ZjExMDE1ZjJmNGM1ZTZhN2IwZjA4NTFkOWEyN2M3NDcxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10
ZXJuYXJ5LXNwZWMtdGVzdC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAg
QEAKLQotUEFTUyB0ZXJuYXJ5RXhwcmVzc2lvbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXRlcm5hcnktc3BlYy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtdGVybmFyeS1zcGVjLXRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDkwYWE4MzhlNzQzZDY4MDJmZDAyYmFiMzA4YjFiYTc5NzVmYWM0My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdGVybmFyeS1zcGVjLXRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAK
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90
aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1j
b25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMudGVybmFyeUV4cHJlc3Npb24gPSBh
c3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4IDwgMyA/IDQgOiA1OwotICAgICAgICB9
Ci0gICAgICAgIGludCBiYXIoaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4
IDwgMTAgPyAxMSA6IHggPCAxMiA/IDE0IDogMTU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJh
eihpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDMgPCA0ID8geCA6IDU7Ci0g
ICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3NjcpXSksIDUpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgyKV0pLCA0KTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwg
W21ha2VJbnQoOCldKSwgMTEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJiYXIiLCBbbWFrZUludCg5KV0pLCAxMSk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEwKV0pLCAx
NCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJh
ciIsIFttYWtlSW50KDExKV0pLCAxNCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEyKV0pLCAxNSk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEz
KV0pLCAxNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImJheiIsIFttYWtlSW50KDE0KV0pLCAxNCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpbnQgeDsKLSAgICAgICAgICAgICAgICAoNCA8IDUgPyB4IDogNykgPSA4OwotICAgICAg
ICAgICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4
OwotICAgICAgICAgICAgICAgIGludCB5OwotICAgICAgICAgICAgICAgICgwIDwgMSA/IHggOiB5
KSA9IDQyOwotICAgICAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICAgICAgfQotICAgICAg
ICBgKTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBm
b28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAg
ICAgIGludCB5OwotICAgICAgICAgICAgICAgIHRocmVhZCBpbnQqIHogPSAmKDAgPCAxID8geCA6
IHkpOwotICAgICAgICAgICAgICAgIHJldHVybiAqejsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9v
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgICAg
ICBpbnQgeTsKLSAgICAgICAgICAgICAgICB0aHJlYWQgaW50W10geiA9IEAoMCA8IDEgPyB4IDog
eSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp6OwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28o
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAg
IGZsb2F0IHk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDQgPCA1ID8geCA6IHk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAg
ICAgICAgICAgaW50IGZvbygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDQgPCA1ID8gNiA6IDcuMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRl
c3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0LWV4cGVjdGVkLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA3NTc3ZDUwNGQ5NmQ3N2RiYzU2MjMxNDQ5MTYxZTA1
MmUxNWM2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotCi1QQVNTIFJldHVybiBhIGxpdGVyYWwgb2Yg
dHlwZSBib29sLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCi1QQVNT
IFJldHVybiBhbiBleHBlY3RlZCBpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQg
dWludCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCi1QQVNT
IFVwbG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3Rl
ZCBmbG9hdDQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVlLiAKLVBB
U1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0
ZWQgZmxvYXQgdmFsdWUuIAotUEFTUyBVcGxvYWQgbWFueSBib29sIHZhbHVlcyBhbmQgcmV0dXJu
IGEgY2FsY3VsYXRlZCByZXN1bHQuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0IHZh
bHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGludCB2YWx1ZS4gCi1QQVNTIFJldHVybiBh
biBleHBlY3RlZCB1aW50IHZhbHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0IHZh
bHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCi1QQVNTIFJldHVy
biBhbiBleHBlY3RlZCBpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWludCB2
YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCi1QQVNTIFJldHVy
biBhbiBleHBlY3RlZCBmbG9hdDQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50
IHZhbHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAotUEFTUyBSZXR1
cm4gYW4gZXhwZWN0ZWQgZmxvYXQgdmFsdWUuIAotUEFTUyBVcGxvYWQgYW5kIGNhbGN1bGF0ZSBh
IHJlc3VsdCBmcm9tIHZhcmllZCBhcmd1bWVudCB0eXBlcy4gCi1QQVNTIFN0b3JlIGludG8gYSBm
bG9hdDRbXS4gCi1QQVNTIFVwbG9hZCBhIGludFtdIGFuZCBzdG9yZSBpbnRvIGEgaW50W10uIAot
UEFTUyBVcGxvYWQgYSBmbG9hdDR4NFtdIGFuZCBzdG9yZSBpbnRvIGEgZmxvYXQ0eDRbXS4gCi1Q
QVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBl
eHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4
NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3MtdGVzdC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MjkxNDYyMDcyZWIyMmY1NjliZjYzZTNiZjZiYTc5
NTc2ZTVkNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwyNjcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCBlcHNpbG9uID0g
MC4wMDAxOwotCi0vLyBGSVhNRTogQWRkICJ1Y2hhciIgYmFjayBpbiB3aGVuIG9wZXJhdG9yKyh1
Y2hhciwgdWNoYXIpIGlzIGF2YWlsYWJsZS4KLWNvbnN0IG51bWVyaWNTY2FsYXJUeXBlcyA9IFsi
aW50IiwgInVpbnQiLCAiZmxvYXQiXTsKLQotY29uc3QgbnVtZXJpY1NjYWxhckZ1bmNzID0gewot
ICAgICJpbnQiOiBjYWxsSW50RnVuY3Rpb24sCi0gICAgInVjaGFyIjogY2FsbFVjaGFyRnVuY3Rp
b24sCi0gICAgInVpbnQiOiBjYWxsVWludEZ1bmN0aW9uLAotICAgICJmbG9hdCI6IGNhbGxGbG9h
dEZ1bmN0aW9uCi19OwotCi1jb25zdCBzY2FsYXJBcmdNYWtlcnMgPSB7Ci0gICAgImJvb2wiOiBt
YWtlQm9vbCwKLSAgICAiaW50IjogbWFrZUludCwKLSAgICAidWNoYXIiOiBtYWtlVWNoYXIsCi0g
ICAgInVpbnQiOiBtYWtlVWludCwKLSAgICAiZmxvYXQiOiBtYWtlRmxvYXQKLX07Ci0KLWNvbnN0
IGFycmF5VHlwZUxlbmd0aHMgPSB7Ci0gICAgImZsb2F0NCI6IDQsCi0gICAgImZsb2F0NHg0Ijog
MTYKLX07Ci0KLWNvbnN0IGFycmF5RnVuY3MgPSB7Ci0gICAgImZsb2F0NCI6IGNhbGxGbG9hdDRG
dW5jdGlvbiwKLSAgICAiZmxvYXQ0eDQiOiBjYWxsRmxvYXQ0eDRGdW5jdGlvbiwKLX07Ci0KLWNv
bnN0IGFycmF5QXJnTWFrZXJzID0gewotICAgICJmbG9hdDQiOiBtYWtlRmxvYXQ0LAotICAgICJm
bG9hdDR4NCI6IG1ha2VGbG9hdDR4NAotfTsKLQotY29uc3QgZmxvYXQ0eDRleHBlY3RlZCA9IFsw
LCA0LCA4LCAxMiwgMSwgNSwgOSwgMTMsIDIsIDYsIDEwLCAxNCwgMywgNywgMTEsIDE1XTsKLWNv
bnN0IGZsb2F0NHg0Q29sdW1uRXhwZWN0ZWQgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNV07Ci1jb25zdCBmbG9hdDRleHBlY3RlZCA9IFswLCAx
LCAyLCAzXTsKLQotbGV0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5saXRlcmFscyA9
ICgpID0+IHsKLSAgICBjaGVja0Jvb2xzKCJSZXR1cm4gYSBsaXRlcmFsIG9mIHR5cGUgYm9vbC4i
LCAicmV0dXJuIHRydWU7Iik7Ci0gICAgY2hlY2tBcnJheXMoImZsb2F0NCIsICJyZXR1cm4gZmxv
YXQ0KDAsIDEsIDIsIDMpOyIsIFtdLCBmbG9hdDRleHBlY3RlZCk7Ci0gICAgY2hlY2tOdW1lcmlj
U2NhbGFycygicmV0dXJuIDQyOyIsIFtdLCA0Mik7Ci19OwotCi13aGxzbFRlc3RzLnNpbmdsZUFy
Z3VtZW50ID0gKCkgPT4gewotICAgIGNoZWNrQm9vbHMoIlVwbG9hZCBhbmQgcmV0dXJuIGEgYm9v
bCB2YWx1ZS4iLCAicmV0dXJuIGluMDsiLCBbdHJ1ZV0pOwotICAgIGNoZWNrQXJyYXlzKCJmbG9h
dDQiLCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0ZXhwZWN0ZWRdLCBmbG9hdDRleHBlY3RlZCk7Ci0g
ICAgY2hlY2tOdW1lcmljU2NhbGFycygicmV0dXJuIGluMDsiLCBbNDJdLCA0Mik7Ci19OwotCi13
aGxzbFRlc3RzLm1hbnlBcmd1bWVudHMgPSAoKSA9PiB7Ci0gICAgY2hlY2tCb29scygiVXBsb2Fk
IG1hbnkgYm9vbCB2YWx1ZXMgYW5kIHJldHVybiBhIGNhbGN1bGF0ZWQgcmVzdWx0LiIsCi0gICAg
ICAgICJyZXR1cm4gaW4wICYgaW4xICYgaW4yICYgaW4zICYgaW40ICYgaW41ICYgaW42ICYgaW43
OyIsCi0gICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0
cnVlXSk7Ci0KLSAgICBsZXQgYm9keSA9ICJyZXR1cm4gZmxvYXQ0KGluMC54LCBpbjEueSwgaW4y
LnosIGluMy53KTsiCi0gICAgbGV0IGFyZ3MgPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDQ7ICsraSkKLSAgICAgICAgYXJncy5wdXNoKGZsb2F0NGV4cGVjdGVkKTsKLSAgICBjaGVja0Fy
cmF5cygiZmxvYXQ0IiwgYm9keSwgYXJncywgZmxvYXQ0ZXhwZWN0ZWQpOwotCi0gICAgYm9keSA9
IGByZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsgaW40ICsgaW41ICsgaW42ICsgaW43O2A7
Ci0gICAgY2hlY2tOdW1lcmljU2NhbGFycyhib2R5LCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgN10s
IDI4KTsKLX07Ci0KLXdobHNsVGVzdHMuYnVmZmVyc1dpdGhPbmVWYWx1ZSA9ICgpID0+IHsKLSAg
ICBjb25zdCBib2R5ID0gYHJldHVybiBpbjBbMF07YAotICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQi
LCBib2R5LCBbW2Zsb2F0NGV4cGVjdGVkXV0sIGZsb2F0NGV4cGVjdGVkKTsKLSAgICBjaGVja051
bWVyaWNTY2FsYXJzKGJvZHksIFtbNDJdXSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5tdWx0aXBs
ZUJ1ZmZlckFyZ3VtZW50cyA9ICgpID0+IHsKLSAgICBsZXQgYm9keSA9IGAKLSAgICBmbG9hdCB4
ID0gaW4wWzBdLnggKyBpbjBbMV0ueCArIGluMFsyXS54ICsgaW4xLnggKyBpbjJbMF0ueDsKLSAg
ICBmbG9hdCB5ID0gaW4wWzBdLnkgKyBpbjBbMV0ueSArIGluMFsyXS55ICsgaW4xLnkgKyBpbjJb
MF0ueTsKLSAgICBmbG9hdCB6ID0gaW4wWzBdLnogKyBpbjBbMV0ueiArIGluMFsyXS56ICsgaW4x
LnogKyBpbjJbMF0uejsKLSAgICBmbG9hdCB3ID0gaW4wWzBdLncgKyBpbjBbMV0udyArIGluMFsy
XS53ICsgaW4xLncgKyBpbjJbMF0udzsKLQotICAgIHJldHVybiBmbG9hdDQoeCwgeSwgeiwgdyk7
YDsKLSAgICBjaGVja0FycmF5cygiZmxvYXQ0IiwgYm9keSwgW1tmbG9hdDRleHBlY3RlZCwgZmxv
YXQ0ZXhwZWN0ZWQsIGZsb2F0NGV4cGVjdGVkXSwgZmxvYXQ0ZXhwZWN0ZWQsIFtmbG9hdDRleHBl
Y3RlZF1dLCBbMCwgNSwgMTAsIDE1XSk7Ci0KLSAgICBib2R5ID0gYHJldHVybiBpbjBbMF0gKyBp
bjBbMV0gKyBpbjBbMl0gKyBpbjEgKyBpbjJbMF07YDsKLSAgICBjaGVja051bWVyaWNTY2FsYXJz
KGJvZHksIFtbMCwgMSwgMl0sIDMsIFs0XV0sIDEwKTsKLX07Ci0KLXdobHNsVGVzdHMubXVsdGlw
bGVBcmd1bWVudFR5cGVzID0gKCkgPT4gewotICAgIGNvbnN0IHNyYyA9IGBmbG9hdCB0ZXN0KGlu
dCBpLCB1Y2hhciBjLCBmbG9hdDQgZjQsIGRldmljZSB1aW50W10gdSwgZGV2aWNlIGZsb2F0W10g
ZnMpCi0gICAgewotICAgICAgICByZXR1cm4gZmxvYXQoaSkgKyBmbG9hdChjKSArIGY0LnggKyBm
NC55ICsgZjQueiArIGY0LncgKyBmbG9hdCh1WzBdKSArIGZzWzBdICsgZnNbMV07Ci0gICAgfWA7
Ci0gICAgY29uc3QgaSA9IG1ha2VJbnQoMSk7Ci0gICAgY29uc3QgYyA9IG1ha2VVY2hhcigyKTsK
LSAgICBjb25zdCBmNCA9IG1ha2VGbG9hdDQoWzQsIDUsIDYsIDddKTsKLSAgICBjb25zdCB1ID0g
bWFrZVVpbnQoWzNdKTsKLSAgICBjb25zdCBmcyA9IG1ha2VGbG9hdChbOCwgOV0pOwotICAgIHdl
YkdQVVByb21pc2VUZXN0KCgpID0+IHsKLSAgICAgICAgcmV0dXJuIGNhbGxGbG9hdEZ1bmN0aW9u
KHNyYywgInRlc3QiLCBbaSwgYywgZjQsIHUsIGZzXSkudGhlbihyZXN1bHQgPT4gewotICAgICAg
ICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0LCA0NSwgZXBzaWxvbiwgIlRlc3QgcmV0
dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgICAgIH0pOwotICAgIH0sICJVcGxvYWQgYW5k
IGNhbGN1bGF0ZSBhIHJlc3VsdCBmcm9tIHZhcmllZCBhcmd1bWVudCB0eXBlcy4iKTsKLX07Ci0K
LXdobHNsVGVzdHMuYnVmZmVyU3RvcmVzID0gKCkgPT4gewotICAgIGxldCBzcmMgPSBgdm9pZCB0
ZXN0KGRldmljZSBmbG9hdDRbXSBvdXQpIHsKLSAgICAgICAgb3V0WzBdID0gZmxvYXQ0KDAsIDEs
IDIsIDMpOwotICAgIH1gOwotICAgIGNvbnN0IGZsb2F0NE91dCA9IG1ha2VGbG9hdDQoW1swLCAw
LCAwLCAwXV0pOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIGZsb2F0NE91dCk7
Ci0KLSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7Ci0gICAgICAgIHJldHVybiBmbG9hdDRP
dXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKLSAgICAgICAgICAgIGNv
bnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIpOwotICAgICAgICAgICAg
Zm9yIChsZXQgaTsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hf
ZXF1YWxzKHJlc3VsdFtpXSwgaSwgIlRlc3Qgc3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSwgIlN0b3JlIGludG8gYSBmbG9hdDRbXS4i
KTsKLQotICAgIHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNlIGludFtdIGluLCBkZXZpY2UgaW50W10g
b3V0KSB7Ci0gICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDU7IGkgPSBpICsgMSkKLSAgICAg
ICAgICAgIG91dFtpXSA9IGluW2ldOwotICAgIH1gOwotICAgIGNvbnN0IGFycmF5ID0gWzAsIDEs
IDIsIDMsIDRdOwotICAgIGNvbnN0IGlucHV0ID0gbWFrZUludChhcnJheSk7Ci0gICAgY29uc3Qg
b3V0cHV0ID0gbWFrZUludChbMCwgMCwgMCwgMCwgMF0pOwotICAgIGNhbGxWb2lkRnVuY3Rpb24o
c3JjLCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7Ci0KLSAgICB3ZWJHUFVQcm9taXNlVGVzdCgo
KSA9PiB7Ci0gICAgICAgIHJldHVybiBvdXRwdXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5
QnVmZmVyID0+IHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50MzJBcnJheShh
cnJheUJ1ZmZlcik7Ci0gICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGFycmF5LCByZXN1
bHQsICJUZXN0IHN0b3JlZCBleHBlY3RlZCB2YWx1ZXMuIik7Ci0gICAgICAgIH0pOwotICAgIH0s
ICJVcGxvYWQgYSBpbnRbXSBhbmQgc3RvcmUgaW50byBhIGludFtdLiIpOwotfTsKLQotd2hsc2xU
ZXN0cy5mbG9hdDR4NHRlc3RzID0gKCkgPT4gewotICAgIGNvbnN0IHNyYyA9IGB2b2lkIHRlc3Qo
ZGV2aWNlIGZsb2F0NHg0W10gaW4sIGRldmljZSBmbG9hdDR4NFtdIG91dCkgewotICAgICAgICBm
b3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpCi0gICAgICAgICAgICBvdXRbaV0gPSBp
bltpXTsKLSAgICB9YDsKLSAgICBjb25zdCBpbnB1dCA9IG1ha2VGbG9hdDR4NChbZmxvYXQ0eDRl
eHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBl
Y3RlZF0pOwotICAgIGNvbnN0IG91dHB1dCA9IG1ha2VGbG9hdDR4NChuZXcgQXJyYXkoNjQpLmZp
bGwoMCkpOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0
XSk7Ci0KLSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7Ci0gICAgICAgIHJldHVybiBvdXRw
dXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKLSAgICAgICAgICAgIGNv
bnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIpOwotICAgICAgICAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBq
ID0gMDsgaiA8IDE2OyArK2opCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1
YWxzKHJlc3VsdFtpICogMTYgKyBqXSwgZmxvYXQ0eDRleHBlY3RlZFtqXSwgZXBzaWxvbiwgIlRl
c3Qgc3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0gICAgfSwgIlVwbG9hZCBhIGZsb2F0NHg0W10gYW5kIHN0b3JlIGludG8gYSBmbG9hdDR4NFtd
LiIpOwotCi0gICAgY2hlY2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBmbG9hdDR4NChmbG9h
dDQoMCwgMSwgMiwgMyksIGZsb2F0NCg0LCA1LCA2LCA3KSwgZmxvYXQ0KDgsIDksIDEwLCAxMSks
IGZsb2F0NCgxMiwgMTMsIDE0LCAxNSkpOyIsIFtdLCBmbG9hdDR4NGV4cGVjdGVkKTsKLSAgICBj
aGVja0FycmF5cygiZmxvYXQ0eDQiLCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0eDRleHBlY3RlZF0s
IGZsb2F0NHg0ZXhwZWN0ZWQpOwotICAgIGxldCBtdWx0aXBsZTR4NGFyZ3MgPSBbXTsKLSAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgICAgY29uc3QgYXJnID0gbmV3IEFy
cmF5KDE2KTsKLSAgICAgICAgYXJnLmZpbGwoMCk7Ci0gICAgICAgIGFyZ1tpXSA9IGk7Ci0gICAg
ICAgIG11bHRpcGxlNHg0YXJncy5wdXNoKGFyZyk7Ci0gICAgfQotICAgIGNoZWNrQXJyYXlzKCJm
bG9hdDR4NCIsICJyZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsgaW40ICsgaW41ICsgaW42
ICsgaW43ICsgaW44ICsgaW45ICsgaW4xMCArIGluMTEgKyBpbjEyICsgaW4xMyArIGluMTQgKyBp
bjE1OyIsIG11bHRpcGxlNHg0YXJncywgZmxvYXQ0eDRDb2x1bW5FeHBlY3RlZCk7Ci0gICAgY2hl
Y2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBpbjBbMF07IiwgW1tmbG9hdDR4NGV4cGVjdGVk
XV0sIGZsb2F0NHg0ZXhwZWN0ZWQpOwotfTsKLQotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCAoKSA9PiB7Ci0gICAgdHJ5IHsKLSAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHdobHNs
VGVzdHMpIHsKLSAgICAgICAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCJfIikpCi0gICAgICAg
ICAgICAgICAgd2hsc2xUZXN0c1tuYW1lXSgpOwotICAgICAgICB9Ci0gICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKLSAgICAgICAgCi0gICAgICAgIHRocm93IGU7Ci0gICAgfQotfSk7Ci0K
LS8qIEhlbHBlciBmdW5jdGlvbnMgKi8KLQotY29uc3QgY2hlY2tOdW1lcmljU2NhbGFycyA9IChi
b2R5LCBhcmdWYWx1ZXMsIGV4cGVjdGVkKSA9PiB7Ci0gICAgbGV0IGZ1bmN0aW9ucyA9IFtdOwot
ICAgIGxldCBzcmMgPSAiIjsKLSAgICBmb3IgKGxldCB0eXBlIG9mIG51bWVyaWNTY2FsYXJUeXBl
cykgewotICAgICAgICBsZXQgbmFtZSwgdmFsdWVzOwotICAgICAgICBbc3JjLCBuYW1lLCB2YWx1
ZXNdID0gYXBwZW5kU2NhbGFyRnVuY3Rpb25Ub1NvdXJjZShzcmMsIHR5cGUsIGJvZHksIGFyZ1Zh
bHVlcyk7Ci0gICAgICAgIGZ1bmN0aW9ucy5wdXNoKHsgdHlwZTogdHlwZSwgbmFtZTogbmFtZSwg
YXJnczogdmFsdWVzLCBleHBlY3RlZDogZXhwZWN0ZWQgfSk7Ci0gICAgfQotCi0gICAgZm9yIChj
b25zdCBmIG9mIGZ1bmN0aW9ucykgewotICAgICAgICBjb25zdCBjYWxsRnVuYyA9IG51bWVyaWNT
Y2FsYXJGdW5jc1tmLnR5cGVdOwotICAgICAgICB3ZWJHUFVQcm9taXNlVGVzdChhc3luYyAoKSA9
PiB7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbEZ1bmMoc3JjLCBmLm5hbWUsIGYuYXJncykudGhl
bihyZXN1bHQgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3Vs
dCwgZi5leHBlY3RlZCwgZXBzaWxvbiwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwgYFJldHVybiBhbiBleHBlY3RlZCAke2YudHlw
ZX0gdmFsdWUuYCk7Ci0gICAgfQotfTsKLQotY29uc3QgY2hlY2tCb29scyA9IChtc2cgPSAiUmV0
dXJuIGFuIGV4cGVjdGVkIGJvb2wgdmFsdWUuIiwgYm9keSwgYXJnVmFsdWVzID0gW10sIGV4cGVj
dGVkID0gdHJ1ZSkgPT4gewotICAgIGNvbnN0IFtzcmMsIG5hbWUsIHZhbHVlc10gPSBhcHBlbmRT
Y2FsYXJGdW5jdGlvblRvU291cmNlKCIiLCAiYm9vbCIsIGJvZHksIGFyZ1ZhbHVlcyk7IAotCi0g
ICAgd2ViR1BVUHJvbWlzZVRlc3QoYXN5bmMgKCkgPT4gewotICAgICAgICByZXR1cm4gY2FsbEJv
b2xGdW5jdGlvbihzcmMsIG5hbWUsIHZhbHVlcykudGhlbihyZXN1bHQgPT4gewotICAgICAgICAg
ICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGV4cGVjdGVkLCAiVGVzdCByZXR1cm5lZCBleHBlY3Rl
ZCB2YWx1ZS4iKTsKLSAgICAgICAgfSwgZSA9PiB7Ci0gICAgICAgICAgICBpZiAoIShlIGluc3Rh
bmNlb2YgV2ViR1BVVW5zdXBwb3J0ZWRFcnJvcikpCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsK
LSAgICAgICAgfSk7Ci0gICAgfSwgbXNnKTsKLX07Ci0KLWNvbnN0IGNoZWNrQXJyYXlzID0gKHR5
cGUsIGJvZHksIGFyZ1ZhbHVlcyA9IFtdLCBleHBlY3RlZCkgPT4gewotICAgIGxldCBpbnB1dEFy
Z3MgPSBbXTsKLSAgICBsZXQgdmFsdWVzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBh
cmdWYWx1ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgLy8gU3VwcG9ydCBhcnJheXMgb2YgZmxv
YXQ0LCBpbmNsdWRpbmcgb25lIHdpdGggYSBzaW5nbGUgZmxvYXQ0LgotICAgICAgICBjb25zdCB0
b3RhbExlbmd0aCA9IGFyZ1ZhbHVlc1tpXS5mbGF0KCkubGVuZ3RoOwotICAgICAgICBjb25zdCBp
c0J1ZmZlciA9IGFyZ1ZhbHVlc1tpXS5sZW5ndGggPT09IDEgfHwgdG90YWxMZW5ndGggPiBhcnJh
eVR5cGVMZW5ndGhzW3R5cGVdOwotICAgICAgICBpbnB1dEFyZ3MucHVzaChgJHtpc0J1ZmZlciA/
ICJkZXZpY2UgIiA6ICIifSR7dHlwZX0ke2lzQnVmZmVyID8gIltdIiA6ICIifSBpbiR7aX1gKTsK
LSAgICAgICAgdmFsdWVzLnB1c2goYXJyYXlBcmdNYWtlcnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7
Ci0gICAgfQotCi0gICAgY29uc3Qgc3JjID0gYCR7dHlwZX0gJHt0eXBlfVRlc3QoJHtpbnB1dEFy
Z3Muam9pbigiLCAiKX0pIHsgJHtib2R5fSB9Ci0gICAgYDsKLQotICAgIHdlYkdQVVByb21pc2VU
ZXN0KGFzeW5jICgpID0+IHsKLSAgICAgICAgcmV0dXJuIGFycmF5RnVuY3NbdHlwZV0oc3JjLCBg
JHt0eXBlfVRlc3RgLCB2YWx1ZXMpLnRoZW4ocmVzdWx0ID0+IHsKLSAgICAgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgYXJyYXlUeXBlTGVuZ3Roc1t0eXBlXTsgKytpKQotICAgICAgICAgICAg
ICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtpXSwgZXhwZWN0ZWRbaV0sIGVwc2lsb24s
ICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgICAgICB9KTsKLSAgICB9LCBg
UmV0dXJuIGFuIGV4cGVjdGVkICR7dHlwZX0gdmFsdWUuYCk7Ci19Ci0KLWNvbnN0IGFwcGVuZFNj
YWxhckZ1bmN0aW9uVG9Tb3VyY2UgPSAoc3JjLCB0eXBlLCBib2R5LCBhcmdWYWx1ZXMpID0+IHsK
LSAgICBjb25zdCBuYW1lID0gYCR7dHlwZX1UZXN0YDsKLQotICAgIGxldCBpbnB1dEFyZ3MgPSBb
XTsKLSAgICBsZXQgdmFsdWVzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdWYWx1
ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY29uc3QgaXNCdWZmZXIgPSBBcnJheS5pc0FycmF5
KGFyZ1ZhbHVlc1tpXSk7Ci0gICAgICAgIGlucHV0QXJncy5wdXNoKGAke2lzQnVmZmVyID8gImRl
dmljZSAiIDogIiJ9JHt0eXBlfSR7aXNCdWZmZXIgPyAiW10iIDogIiJ9IGluJHtpfWApOwotICAg
ICAgICB2YWx1ZXMucHVzaChzY2FsYXJBcmdNYWtlcnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7Ci0g
ICAgfQotCi0gICAgc3JjICs9IGAke3R5cGV9ICR7bmFtZX0oJHtpbnB1dEFyZ3Muam9pbigiLCAi
KX0pIHsgJHtib2R5fSB9Ci0gICAgYDsKLSAgICAKLSAgICByZXR1cm4gW3NyYywgbmFtZSwgdmFs
dWVzXTsKLX07Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLWV4cGVjdGVkLnR4dApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3Zjhm
NmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtZ2V0ZGltZW5zaW9ucy1leHBlY3Rl
ZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVuc2lvbnMuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE5ZjEyZjhhMWYzNmZiYThlOTNkM2E3MWFiYzA3ZmY0MDI2MjFm
ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVuc2lvbnMuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDgwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+
Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSld
Ci1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJl
IDogcmVnaXN0ZXIodDApLCBkZXZpY2UgdWludFtdIHRoZUJ1ZmZlciA6IHJlZ2lzdGVyKHUxKSkg
ewotICAgIHVpbnQgd2lkdGg7Ci0gICAgdWludCBoZWlnaHQ7Ci0gICAgdWludCBudW1iZXJPZkxl
dmVsczsKLSAgICBHZXREaW1lbnNpb25zKHRoZVRleHR1cmUsIDAsICZ3aWR0aCwgJmhlaWdodCwg
Jm51bWJlck9mTGV2ZWxzKTsKLSAgICB0aGVCdWZmZXJbMF0gPSB3aWR0aDsKLSAgICB0aGVCdWZm
ZXJbMV0gPSBoZWlnaHQ7Ci0gICAgdGhlQnVmZmVyWzJdID0gbnVtYmVyT2ZMZXZlbHM7Ci19Ci1g
OwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1
bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hM
U0w6IHRydWV9KTsKLSAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcs
IHR5cGU6ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5
cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2
aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2Jp
bmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBj
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGlu
ZUxheW91dH07Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1
dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHRleHR1
cmVEZXNjcmlwdG9yID0ge3NpemU6IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDogMX0sIGZv
cm1hdDogInJnYmE4dW5vcm0iLCB1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlNBTVBMRUR9OwotICAg
IGNvbnN0IHRleHR1cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7
Ci0gICAgY29uc3QgdGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0K
LSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDMsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplOiBVaW50MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDN9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmdzID0gW3tiaW5k
aW5nOiAwLCByZXNvdXJjZTogdGV4dHVyZVZpZXd9LCB7YmluZGluZzogMSwgcmVzb3VyY2U6IGJ1
ZmZlckJpbmRpbmd9XTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogYmluZEdyb3VwQmluZGluZ3N9OwotICAgIGNvbnN0
IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7
Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rl
cigpOyAvLyB7fQotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwot
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdh
aXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRzVWludDMy
QXJyYXkgPSBuZXcgVWludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVz
dWx0c1VpbnQzMkFycmF5WzBdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c1VpbnQzMkFycmF5WzFd
ID09IDIKLSAgICAgICAgJiYgcmVzdWx0c1VpbnQzMkFycmF5WzJdID09IDEpCi0gICAgICAgIHRl
c3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVz
dWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0
QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSku
dGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
LSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlz
aEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLWV4cGVjdGVkLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtbG9hZC1leHBlY3RlZC5odG1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMz
ZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLWV4cGVjdGVkLmh0bWwKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+
Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtdGV4dHVyZXMtbG9hZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MTRmZTBmYzg0ZTlkNDI2Nzc4YzI4MTE2YmVlMmFmM2E0YWI2ZjA0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10
ZXh0dXJlcy1sb2FkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJT
b3VyY2UgPSBgCi12ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQot
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKFRleHR1cmUyRDxmbG9hdDQ+IHRoZVRleHR1
cmUgOiByZWdpc3Rlcih0MCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBMb2FkKHRoZVRl
eHR1cmUsIGludDIoMCwgMCkpOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
LSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAg
IGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFu
Z2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAi
Y3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAg
Y29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6
ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAv
LyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51
bGw7Ci0gICAgCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0
ZVNldDogW2F0dHJpYnV0ZTBdfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBj
b25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic2FtcGxlZC10ZXh0dXJlIn1dfTsKLSAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3Jv
dXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJh
Z21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JT
dGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNf
UEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5j
cmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwot
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZl
cnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsw
XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzNdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs3XSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEwXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9
IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwot
ICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVy
RGVzY3JpcHRvciA9IHtzaXplOiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIg
KiAyLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIodGV4dHVyZURhdGFCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0
YUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3lu
YygpOwotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFy
cmF5KHRleHR1cmVEYXRhQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHRleHR1cmVEYXRhQnVmZmVy
VWludDhBcnJheVswXSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0g
PSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzJdID0gMjU1OwotICAgIHRl
eHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVszXSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZl
clVpbnQ4QXJyYXlbNF0gPSAxMjg7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVd
ID0gMTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs2XSA9IDEyODsKLSAgICB0
ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbN10gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZm
ZXJVaW50OEFycmF5WzhdID0gMTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5
XSA9IDEyODsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTBdID0gMTI4OwotICAg
IHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFC
dWZmZXJVaW50OEFycmF5WzEyXSA9IDEyODsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJy
YXlbMTNdID0gMTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAxMjg7
Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzE1XSA9IDI1NTsKLSAgICB0ZXh0dXJl
RGF0YUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6
ZToge3dpZHRoOiAyLCBoZWlnaHQ6IDIsIGRlcHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIs
IHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuU0FNUExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZF
Ul9EU1R9OwotICAgIGNvbnN0IHRleHR1cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJl
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5ncyA9IFt7YmluZGluZzogMCwg
cmVzb3VyY2U6IHRleHR1cmVWaWV3fV07Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9
IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IGJpbmRHcm91cEJpbmRpbmdzfTsK
LSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERl
c2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUi
KTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdy
YTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENo
YWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2Fw
Q2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9
IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRF
bmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0KLSAgICBjb25z
dCBidWZmZXJDb3B5VmlldyA9IHtidWZmZXI6IHRleHR1cmVEYXRhQnVmZmVyLCByb3dQaXRjaDog
VWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAyLCBpbWFnZUhlaWdodDogVWludDhB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAyICogMn07Ci0gICAgY29uc3QgdGV4dHVyZUNv
cHlWaWV3ID0ge3RleHR1cmU6IHRleHR1cmV9OwotICAgIGNvbnN0IGNvcHlTaXplID0ge3dpZHRo
OiAyLCBoZWlnaHQ6IDIsIGRlcHRoOiAxfTsKLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVy
VG9UZXh0dXJlKGJ1ZmZlckNvcHlWaWV3LCB0ZXh0dXJlQ29weVZpZXcsIGNvcHlTaXplKTsKLQot
ICAgIGNvbnN0IGNsZWFyQ29sb3IgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29u
c3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJl
c29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xl
YXJDb2xvcn1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAg
IGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVu
Y29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFz
c0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwot
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0K
LWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
LWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZp
Y2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewot
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGV4dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGV4dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXRleHR1cmVzLXNhbXBsZS1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+
Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3
V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGV4dHVyZXMtc2FtcGxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMt
c2FtcGxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDVlNDc3MDRmZjFh
MGFlZGU0NGIyNjFjNjA2MDliYWRkOWU2N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLXNhbXBs
ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAot
dmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
KSA6IFNWX1Bvc2l0aW9uIHsKLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLWZyYWdtZW50IGZs
b2F0NCBmcmFnbWVudFNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJlIDogcmVnaXN0
ZXIodDApLCBzYW1wbGVyIHRoZVNhbXBsZXIgOiByZWdpc3RlcihzMSkpIDogU1ZfVGFyZ2V0IDAg
ewotICAgIHJldHVybiBTYW1wbGUodGhlVGV4dHVyZSwgdGhlU2FtcGxlciwgZmxvYXQyKDAuNSwg
MC41KSk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwot
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLSAgICAKLSAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
fTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmli
dXRlMF19OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElu
cHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5
cGU6ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJzYW1wbGVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owot
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0g
ICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
MERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAo
KTsKLQotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50
OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAyLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB0
ZXh0dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodGV4dHVyZURhdGFCdWZmZXJE
ZXNjcmlwdG9yKTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgdGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHRleHR1cmVE
YXRhQnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KHRleHR1cmVEYXRhQnVmZmVyQXJy
YXlCdWZmZXIpOwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVswXSA9IDI1NTsKLSAg
ICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFC
dWZmZXJVaW50OEFycmF5WzJdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJh
eVszXSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbNF0gPSAyNTU7Ci0g
ICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVdID0gMjU1OwotICAgIHRleHR1cmVEYXRh
QnVmZmVyVWludDhBcnJheVs2XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJy
YXlbN10gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzhdID0gMjU1Owot
ICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0
YUJ1ZmZlclVpbnQ4QXJyYXlbMTBdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhB
cnJheVsxMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzEyXSA9IDI1
NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTNdID0gMjU1OwotICAgIHRleHR1
cmVEYXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJV
aW50OEFycmF5WzE1XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlci51bm1hcCgpOwotCi0g
ICAgY29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6ZToge3dpZHRoOiAyLCBoZWlnaHQ6IDIs
IGRlcHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIsIHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2Uu
U0FNUExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZFUl9EU1R9OwotICAgIGNvbnN0IHRleHR1
cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qg
dGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBz
YW1wbGVyRGVzY3JpcHRvciA9IHttYWdGaWx0ZXI6ICJsaW5lYXIiLCBtaW5GaWx0ZXI6ICJsaW5l
YXIifTsKLSAgICBjb25zdCBzYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoc2FtcGxlckRl
c2NyaXB0b3IpOwotCi0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZ3MgPSBbe2JpbmRpbmc6IDAs
IHJlc291cmNlOiB0ZXh0dXJlVmlld30sIHtiaW5kaW5nOiAxLCByZXNvdXJjZTogc2FtcGxlcn1d
OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlv
dXQsIGJpbmRpbmdzOiBiaW5kR3JvdXBCaW5kaW5nc307Ci0gICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQotCi0gICAgY29uc3QgYnVmZmVyQ29weVZpZXcgPSB7YnVm
ZmVyOiB0ZXh0dXJlRGF0YUJ1ZmZlciwgcm93UGl0Y2g6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA0ICogMiwgaW1hZ2VIZWlnaHQ6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogMiAqIDJ9OwotICAgIGNvbnN0IHRleHR1cmVDb3B5VmlldyA9IHt0ZXh0dXJlOiB0ZXh0
dXJlfTsKLSAgICBjb25zdCBjb3B5U2l6ZSA9IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDog
MX07Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShidWZmZXJDb3B5Vmll
dywgdGV4dHVyZUNvcHlWaWV3LCBjb3B5U2l6ZSk7Ci0KLSAgICBjb25zdCBjbGVhckNvbG9yID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3J9XTsKLSAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3Jp
cHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBj
b25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBi
aW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3Zl
cnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwg
MCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRC
dWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLQotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewot
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19
LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJheS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFy
cmF5LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1
OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVu
c2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAot
UEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFy
cmF5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTM1OWI2YzhmMjExY2IwODkx
NTZiN2JkYWUxZTk3OGZlYTRiMjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJh
eS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdm9p
ZCBmaWxsKHRocmVhZCBmbG9hdFsxMF1bXSBhcnJheSwgZmxvYXRbMTBdIHZhbHVlKSB7Ci0gICAg
Zm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAg
YXJyYXlbaV0gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBh
cnJheSwgZmxvYXQgdmFsdWUpIHsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5n
dGg7IGkgPSBpICsgMSkgewotICAgICAgICBhcnJheVtpXSA9IHZhbHVlOwotICAgIH0KLX0KLQot
Ym9vbCBjb250YWlucyh0aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0IHZhbHVlKSB7Ci0g
ICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAg
ICAgZm9yICh1aW50IGogPSAwOyBqIDwgYXJyYXlbal0ubGVuZ3RoOyBqID0gaiArIDEpIHsKLSAg
ICAgICAgICAgIGlmIChhcnJheVtpXVtqXSAhPSB2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
Y29udGFpbnModGhyZWFkIGZsb2F0W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7Ci0gICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgaWYgKGFy
cmF5W2ldICE9IHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29t
cHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhy
ZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Ci0gICAgZmxvYXRbMTBdWzVdIGFycmF5Owot
ICAgIGlmIChhcnJheS5sZW5ndGggIT0gNSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghY29u
dGFpbnMoQGFycmF5LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yICh1aW50IGkgPSAw
OyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgZmxvYXRbMTBdIHZhbHVl
OwotICAgICAgICBmaWxsKEB2YWx1ZSwgZmxvYXQoaSkpOwotICAgICAgICBhcnJheVtpXSA9IHZh
bHVlOwotICAgIH0KLQotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9
IGkgKyAxKSB7Ci0gICAgICAgIGZsb2F0WzEwXSB2YWx1ZSA9IGFycmF5W2ldOwotICAgICAgICBp
ZiAoIWNvbnRhaW5zKEB2YWx1ZSwgZmxvYXQoaSkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2
aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0
ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRl
ciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczog
W3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19Owot
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQo
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9
IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1
dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9Owot
ICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7
Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3lu
YygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZl
ckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOwotICAgIGJ1ZmZl
ci51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9E
U1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0gICAgY29u
c3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OwotICAgIGNv
bnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRp
bmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBM
YXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91
cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBj
b25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7
fQotICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3Vs
dHNCdWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1h
bmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0Qmlu
ZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEs
IDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVm
ZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBsZXQgcmVzdWx0
c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlm
IChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0g
ICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFw
KCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRo
ZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkg
ewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsK
LTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkNTc4Njg1YmQwY2MzNThlM2M4YzU1NWUwMWVjZGY3MmFhODYyNTdmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC10eXBlLW1pc21hdGNoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAs
MCBAQAotCi1QQVNTIHR5cGVNaXNtYXRjaFJldHVybiAKLVBBU1MgdHlwZU1pc21hdGNoVmFyaWFi
bGVEZWNsIAotUEFTUyB0eXBlTWlzbWF0Y2hBc3NpZ25tZW50IAotUEFTUyB0eXBlTWlzbWF0Y2hS
ZXR1cm5QYXJhbSAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUt
bWlzbWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10eXBlLW1pc21hdGNoLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZWQyNDQzYzZkOTNkMmJlM2JhYjlm
NzYyYzZiNmRiYWI5NDQ4OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUtbWlzbWF0Y2guaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0
YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08
dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0i
anMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMudHlwZU1pc21hdGNoUmV0dXJuID0gYXN5bmMgKCkgPT4KLXsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28oKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAxMC41OwotICAgICAgICAgICAgfQot
ICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy50eXBlTWlzbWF0Y2hWYXJpYWJsZURlY2wgPSBh
c3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAg
ICAgdm9pZCBmb28odWludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB5
ID0geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMudHlwZU1p
c21hdGNoQXNzaWdubWVudCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAot
ICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbyh1aW50IHgpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaW50IHk7Ci0gICAgICAgICAgICAgICAgeSA9IHg7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnR5cGVNaXNtYXRjaFJldHVyblBhcmFt
ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIGludCBmb28odWludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiB4OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xU
ZXN0cyk7Ci0KLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXVpbnQtYml0d2lzZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtdWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmNkNjg0ZjUzNTkxMTViMDQ0MjY1MjNlZTY2ZGU5MjA0NzhmMGY1OC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtdWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAs
MCBAQAotCi1QQVNTIHVpbnRCaXRBbmQgCi1QQVNTIHVpbnRCaXRPciAKLVBBU1MgdWludEJpdFhv
ciAKLVBBU1MgdWludEJpdE5vdCAKLVBBU1MgdWludExTaGlmdCAKLVBBU1MgdWludFJTaGlmdCAK
LVBBU1MgdWludFNpbXBsZU1hdGggCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC11aW50LWJpdHdpc2UuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11aW50LWJp
dHdpc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1OTEzOTlhZGE2ZjFj
NTQ2YTk2ZDM1Y2JhZTNjODRhYTc3YjVjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdWludC1iaXR3aXNlLmh0
bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRt
bD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJs
b25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25z
dCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMudWludEJpdEFuZCA9IGFzeW5jICgpID0+
IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhICYgYjsKLSAgICAgICAgfQotICAgIGA7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZVVpbnQoMSksIG1ha2VVaW50KDcpXSksIDEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KSwgbWFr
ZVVpbnQoNDIpXSksIDQyKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludChNYXRoLnBvdygyLCAzMikgLSAxKSwgbWFrZVVp
bnQoTWF0aC5wb3coMiwgMzIpIC0gNyldKSwgNDI5NDk2NzI4OSk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1h
a2VVaW50KDg1NzMyKV0pLCAwKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0T3IgPSBhc3luYyAo
KSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWlu
dCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSB8IGI7Ci0gICAgICAgIH0KLSAg
ICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VVaW50KDEpLCBtYWtlVWludCg3KV0pLCA3KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg2NTUzNSks
IG1ha2VVaW50KDQyKV0pLCA2NTUzNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWlu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSks
IG1ha2VVaW50KE1hdGgucG93KDIsIDMyKSAgLSA3KV0pLCA0Mjk0OTY3Mjk1KTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWlu
dCgwKSwgbWFrZVVpbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0
WG9yID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICB1aW50IGZv
byh1aW50IGEsIHVpbnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgXiBiOwot
ICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgxKSwgbWFrZVVpbnQoNyldKSwgNik7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZVVpbnQoNjU1MzUpLCBtYWtlVWludCg0MildKSwgNjU0OTMpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93
KDIsIDMyKSAtIDEpLCBtYWtlVWludChNYXRoLnBvdygyLCAzMikgLSA3KV0pLCA2KTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludCgwKSwgbWFrZVVpbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQotd2hsc2xUZXN0cy51aW50
Qml0Tm90ID0gYXN5bmMgKCkgPT4geyAKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgdWlu
dCBmb28odWludCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gfmE7Ci0gICAgICAg
IH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VVaW50KDEpXSksIDQyOTQ5NjcyOTQpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1
KV0pLCA0Mjk0OTAxNzYwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludChNYXRoLnBvdygyLCAzMikgLSAxKV0pLCAwKTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlVWludCgwKV0pLCA0Mjk0OTY3Mjk1KTsKLX0KLQotd2hsc2xUZXN0cy51aW50TFNoaWZ0
ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICB1aW50IGZvbyh1
aW50IGEsIHVpbnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKLSAg
ICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMSksIG1ha2VVaW50KDcpXSksIDEyOCk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZVVpbnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAyNjIxNDApOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93
KDIsIDMyKSAtIDEpLCBtYWtlVWludCg1KV0pLCA0Mjk0OTY3MjY0KTsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwg
bWFrZVVpbnQoMyldKSwgMCk7Ci19OwotCi13aGxzbFRlc3RzLnVpbnRSU2hpZnQgPSBhc3luYyAo
KSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWlu
dCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSA+PiBiOwotICAgICAgICB9Ci0g
ICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlVWludCgxKSwgbWFrZVVpbnQoNyldKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUp
LCBtYWtlVWludCgyKV0pLCAxNjM4Myk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWlu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSks
IG1ha2VVaW50KDUpXSksIDEzNDIxNzcyNyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
VWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1ha2VVaW50KDMpXSks
IDApOwotfTsKLQotd2hsc2xUZXN0cy51aW50U2ltcGxlTWF0aCA9IGFzeW5jICgpID0+IHsKLSAg
ICBsZXQgcHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCArIHk7
IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCAxMik7Ci0KLSAgICBwcm9ncmFtID0g
InVpbnQgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4IC0geTsgfSI7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQo
NyksIG1ha2VVaW50KDUpXSksIDIpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDUpLCBtYWtlVWludCg3KV0pLCA0Mjk0
OTY3Mjk0KTsKLQotICAgIHByb2dyYW0gPSAidWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0
dXJuIHggKiB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQoNSldKSwgMzUpOwotCi0gICAg
Ly8gRklYTUU6IG1ha2UgdGhpcyB3b3JrOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk5NjAyCi0gICAgLy8gcHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQg
eSkgeyByZXR1cm4geCAvIHk7IH0iOwotICAgIC8vIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVp
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCgyKV0pLCAz
KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFy
aWFibGUtMi1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJm
OTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11
bmRlZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICsw
LDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09N
UExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmlu
ZWQtdmFyaWFibGUtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmlu
ZWQtdmFyaWFibGUtMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmU4NTJm
Mzk5ZTlhZGIwNTAxNzg0OTA2MjVjOTFiMDg1YjAyYjllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5k
ZWZpbmVkLXZhcmlhYmxlLTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVy
U291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNo
YWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJ
RCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDQgdmVjID0gZmxvYXQ0KHgseCx4
LHgpOwotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgY29uc3QgYWRhcHRl
ciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKLSAgICBjb25zdCBkZXZp
Y2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKLQotICAgIGNvbnN0IHNoYWRlck1v
ZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTog
NywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ip
OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRz
OiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNv
bnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBp
cGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
Q29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotfQotCi13aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0
UGFzc2VkKCIiKTsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9
KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVz
dCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0
ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdXNlLXVuZGVmaW5lZC12YXJpYWJsZS1l
eHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhN2NkNjIzNjU3NTQ5YTM4Yzk2NWFhY2FkYTlkYWI3
MDUxYTM1MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVh
ZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgot
PGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwg
MSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIg
OiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsK
LSAgICBmbG9hdCBmb287Ci0gICAgaWYgKGZvbykgewotICAgICAgICB4ID0geCArIDE7Ci0gICAg
fQotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgY29uc3QgYWRhcHRlciA9
IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKLSAgICBjb25zdCBkZXZpY2Ug
PSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKLQotICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29t
cHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotfQotCi13aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQo
IiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwg
ZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19
KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXZhcmlhYmxlLXNoYWRvd2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWRlZTViNTg5YjQ3Yzg1YWIyYTQ4MDU5MWYwNzc3MjFmZWUwMjk4
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIHZhcmlhYmxlU2hhZG93aW5nIAotCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYzFhNDM1ZGNmMTA1ZWZiNWY2ZTYyMTBmNzM2ZWE2
MDE3ZjcyZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZhcmlhYmxlLXNoYWRvd2luZy5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRl
c3RzLnZhcmlhYmxlU2hhZG93aW5nID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9
IGAKLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5OwotICAg
ICAgICAgICAgaW50IHggPSA3OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4
ID0gODsKLSAgICAgICAgICAgICAgICB5ID0geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA4KTsKLQotICAgIHByb2dyYW0gPSBg
Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAg
ICAgICAgIGludCB4ID0gNzsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeCA9
IDg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB5ID0geDsKLSAgICAgICAgICAgIHJldHVy
biB5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC12ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC12ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjAwZWQwOWFmOTkyMDM4MDJiNjM5MTZjNmE1NjgwMWE3NDU2ZDAxOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAg
QEAKLQotUEFTUyB2ZWN0b3JUeXBlU3ludGF4IAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtdmVjdG9yLXN5bnRheC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXZlY3Rvci1zeW50YXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxNWYz
OTJiMWRmOWYyNzdmODk4MGU5M2RiNDY1YThjMjk5OWQxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmVjdG9y
LXN5bnRheC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCFET0NUWVBFIGh0
bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBj
b250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMudmVjdG9yVHlwZVN5bnRheCA9IGFzeW5jICgpID0+Ci17Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28yKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaW50MiB4OwotICAgICAgICAgICAgdmVjdG9yPGludCwgMj4geiA9IGludDIoMywgNCk7Ci0g
ICAgICAgICAgICB4ID0gejsKLSAgICAgICAgICAgIHJldHVybiB4Lnk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpbnQgZm9vMygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDMgeDsKLSAgICAg
ICAgICAgIHZlY3RvcjxpbnQsIDM+IHogPSBpbnQzKDMsIDQsIDUpOwotICAgICAgICAgICAgeCA9
IHo7Ci0gICAgICAgICAgICByZXR1cm4geC56OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGZv
bzQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQ0IHg7Ci0gICAgICAgICAgICB2ZWN0b3I8
aW50LDQ+IHogPSBpbnQ0KDMsIDQsIDUsIDYpOwotICAgICAgICAgICAgeCA9IHo7Ci0gICAgICAg
ICAgICByZXR1cm4geC53OwotICAgICAgICB9YDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0KTsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgNSk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSks
IDYpOwotCi0gICAgcHJvZ3JhbSA9IGAKLSAgICAgICAgdHlwZWRlZiBpID0gaW50OwotICAgICAg
ICBpbnQgZm9vMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDIgeDsKLSAgICAgICAgICAg
IHZlY3RvcjxpLCAyPiB6ID0gaW50MigzLCA0KTsKLSAgICAgICAgICAgIHggPSB6OwotICAgICAg
ICAgICAgcmV0dXJuIHgueTsKLSAgICAgICAgfWA7Ci0KLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgNCk7Ci19Ci1ydW5UZXN0cyh3
aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIy
ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4K
LTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9j
YW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpOwotZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2Fu
dmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWsuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDY5MDYzMDNhMjhiNWY0NGJhMThiZGJjMzQ0ZDg0ZmQ4ODE5OWMwOTYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXdoaWxlLWxvb3AtYnJlYWsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBA
Ci08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0
IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlv
biA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12
ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUo
MCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsK
LQotICAgIGJvb2wgYiA9IHRydWU7Ci0gICAgdWludCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IDEw
KSB7Ci0gICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBzaGFkZSA9IHNoYWRlICsgMS4wOwotICAgICAgICBpID0gaSArIDE7Ci0gICAgfQotCi0g
ICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFk
ZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVy
biBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1
dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9Owot
ICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29u
c3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4
QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ig
PSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0t
YnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2
ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
ciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAg
Y29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZl
cnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsy
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzldID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOwot
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7Ci0gICAgdmVydGV4QnVmZmVy
MC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVO
SUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5t
YXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwot
Ci0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXpl
OiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNl
OiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91
dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBj
b25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAg
ICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9y
bSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3
YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4u
Z2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1
dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNv
bnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NE
ZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9Owot
ICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQ
YXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAx
LCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotCi1pZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewot
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19
LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUtZXhw
ZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVl
LWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMy
MWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3At
Y29udGludWUtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJl
T25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3At
Y29udGludWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRp
bnVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlN2RiOWFiM2UyYTM5NzIy
MTc5ZjIwMWI0ZjZhNzgzNjBmOWU5ZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGlu
dWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAK
LXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwot
ICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZl
cnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRy
dWU7Ci0gICAgdWludCBpID0gMDsKLSAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAwLjEsIGkg
PCAxMCkpIHsKLSAgICAgICAgaWYgKGIpIHsKLSAgICAgICAgICAgIGkgPSBpICsgMTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHNoYWRlID0gMC4wOwotICAgIH0K
LQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNo
YWRlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50
U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICBy
ZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
dmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0
cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2
fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAg
IGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9Owot
ICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlm
b3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExh
eW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
LSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owot
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
cjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIp
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4xOwotCi0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2
XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs5XSA9IDAuMTsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAu
MTsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4xOwotICAgIHZlcnRleEJ1
ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsK
LSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZm
ZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAo
KTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwg
c2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNv
dXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0g
ICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNj
cmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7
Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4
dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFp
bihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENo
YWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBv
dXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJl
ZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRz
ID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwg
bG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQ
YXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVu
ZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRH
cm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZl
cnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXco
NCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0
IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0
UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7
Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsK
LX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctYXJndW1lbnQtbGVuZ3Ro
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1s
ZW5ndGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmNlMzY5
NDU4MTk4NTdhZmUxZDA0MTczNGRjMGQxZTE1MTJiMjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1h
cmd1bWVudC1sZW5ndGgtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBA
QAotCi1QQVNTIGJpdEFuZFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGJpdE5vdFdyb25nQXJn
dW1lbnRMZW5ndGggCi1QQVNTIGJpdE9yV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgYml0WG9y
V3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZGVjV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1Mg
ZGl2aWRlV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZG90T3BlcmF0b3JTZXR0ZXJXcm9uZ0Fy
Z3VtZW50TGVuZ3RoIAotUEFTUyBkb3RPcGVyYXRvcldyb25nQXJndW1lbnRMZW5ndGggCi1QQVNT
IGdyZWF0ZXJFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGdyZWF0ZXJXcm9uZ0FyZ3Vt
ZW50TGVuZ3RoIAotUEFTUyBpbmNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAotUEFTUyBpbmRleE9wZXJh
dG9yU2V0dGVyV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgaW5kZXhPcGVyYXRvcldyb25nQXJn
dW1lbnRMZW5ndGggCi1QQVNTIGxTaGlmdFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIG1pbnVz
V3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgbW9kdWxvV3JvbmdBcmd1bWVudExlbmd0aCAKLVBB
U1MgcGx1c1dyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIHJTaGlmdFdyb25nQXJndW1lbnRMZW5n
dGggCi1QQVNTIHRpbWVzV3JvbmdBcmd1bWVudExlbmd0aCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXdyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXdyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1ZWM0MTkxYjEwZjVjMGFhZWNjYmZmNTY0NWQ0MzNjZmU2Mjc1ZDky
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDM2NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNl
dD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRl
c3QgaW50IGJpdCBtYXRoLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJu
ZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmJp
dEFuZFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAg
IGludCBvcGVyYXRvciYoRm9vKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAg
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9v
IHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yJihGb28pIHsgcmV0dXJuIDUzNDsgfQotICAg
ICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yJihGb28sIEZv
bywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRl
c3RzLmJpdE5vdFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0
IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yfigpIHsgcmV0
dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3Bl
cmF0b3J+KEZvbywgRm9vKSB7IHJldHVybiA1MzQ7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAot
fQotd2hsc2xUZXN0cy5iaXRPcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgotewot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7
IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvcnwoKSB7IHJldHVybiAzMjsgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yfChGb28pIHsgcmV0dXJu
IDUzNDsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJh
dG9yfChGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBgKTsKLSAgICAgICAg
Ci19Ci13aGxzbFRlc3RzLmJpdFhvcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgot
ewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJh
dG9yXigpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAg
ICAgICBpbnQgb3BlcmF0b3JeKEZvbykgeyByZXR1cm4gNTM0OyB9Ci0gICAgICAgIGApOwotICAg
ICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVj
dCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3JeKEZvbywgRm9vLCBGb28pIHsgcmV0
dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVzdHMuZGVjV3JvbmdB
cmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3ItLSgpIHsgcmV0dXJuIDMyOyB9Ci0gICAg
ICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3ItLShGb28sIEZv
bykgeyByZXR1cm4gNzY7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy5k
aXZpZGVXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvci8oKSB7IHJldHVybiAz
MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9y
LyhGb28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQg
Y2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAg
ICAgICAgaW50IG9wZXJhdG9yLyhGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAg
ICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmRvdE9wZXJhdG9yU2V0dGVyV3JvbmdBcmd1
bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgRm9vIG9wZXJhdG9y
LmZvbz0oKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQg
Y2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAg
ICAgICAgRm9vIG9wZXJhdG9yLmZvbz0oRm9vKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsK
LSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgRm9vIG9wZXJhdG9yLmZvbz0oRm9vLCBpbnQsIGlu
dCkgeyByZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy5k
b3RPcGVyYXRvcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0
IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbygpIHsg
cmV0dXJuIDQyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwo
Ci0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQg
b3BlcmF0b3IuZm9vKEZvbywgaW50KSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAg
ICAgCi19Ci13aGxzbFRlc3RzLmdyZWF0ZXJFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3lu
YyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj49KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAgICAg
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9v
IHsgfQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0g
ICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KEZv
bywgRm9vLCBGb28pIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQot
d2hsc2xUZXN0cy5ncmVhdGVyV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9y
PigpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3I+KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAg
ICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsgfQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj4oRm9vLCBGb28sIEZvbykgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmluY1dy
b25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKysoKSB7IHJldHVybiAzMjsgfQot
ICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0g
ICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yKysoRm9v
LCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVz
dHMuaW5kZXhPcGVyYXRvclNldHRlcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgot
ewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJh
dG9yW109KCkgeyByZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0
IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCkg
eyByZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgaW50KSB7IHJl
dHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAot
ICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCBpbnQsIGludCwgaW50
KSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmlu
ZGV4T3BlcmF0b3JXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcltdKCkgeyBy
ZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oaW50KSB7IHJldHVybiA0Mjsg
fQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBg
Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3JbXShpbnQsIGludCwgaW50KSB7IHJldHVybiA0Mjsg
fQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmxTaGlmdFdyb25nQXJndW1l
bnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAg
YAotICAgICAgICAgICAgaW50IG9wZXJhdG9yPDwoKSB7IHJldHVybiAzMjsgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPDwoRm9vKSB7IHJldHVy
biA1MzQ7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGludCBvcGVy
YXRvcjw8KEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAg
ICAKLX0KLXdobHNsVGVzdHMubWludXNXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVy
YXRvci0oKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQg
Y2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAg
ICAgICAgaW50IG9wZXJhdG9yLShGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAg
ICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLm1vZHVsb1dyb25nQXJndW1lbnRMZW5ndGgg
PSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAg
ICAgICAgaW50IG9wZXJhdG9yJSgpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAg
ICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBG
b28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IlKEZvbykgeyByZXR1cm4gNTM0OyB9Ci0g
ICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IlKEZvbywg
Rm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNs
VGVzdHMucGx1c1dyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0
IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKygpIHsgcmV0
dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3Bl
cmF0b3IrKEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAg
ICAKLX0KLXdobHNsVGVzdHMuclNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+
Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3Bl
cmF0b3I+PigpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAg
ICAgICAgICBpbnQgb3BlcmF0b3I+PihGb28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAgICBgKTsK
LSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPj4oRm9vLCBGb28sIEZvbykg
eyByZXR1cm4gNzY7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy50aW1l
c1dyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKigpIHsgcmV0dXJuIDMyOyB9
Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAK
LSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IqKEZv
bykgeyByZXR1cm4gNTM0OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAg
ICBpbnQgb3BlcmF0b3IqKEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGAp
OwotICAgICAgICAKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctdHlwZXMtZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTUxOGYxYjU5ZDY0NjJmYTY2NTdi
MTU1NzJhNDI4YjhkNTFjYWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy1leHBlY3RlZC50
eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotUEFTUyBkZWNXcm9uZ1R5cGVzIAot
UEFTUyBpbmNXcm9uZ1R5cGVzIAotUEFTUyBncmVhdGVyVGhhbldyb25nUmV0dXJuVHlwZSAKLVBB
U1MgZ3JlYXRlckVxdWFsV3JvbmdSZXR1cm5UeXBlIAotUEFTUyBpbmRleFNldHRlcldpdGhNaXNt
YXRjaGVkVHlwZSAKLVBBU1Mgc2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlIAotCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctdHlwZXMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyZTFhMTYxNjkyOWFiM2IxYWIxYThkODM2NTFkZGVjNWY4YTc3NTUxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC13cm9uZy10eXBlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPCFE
T0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IGludCBiaXQgbWF0aC48L3RpdGxl
PgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0
IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5kZWNXcm9uZ1R5cGVzID0gYXN5bmMgKCkg
PT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBv
cGVyYXRvci0tKGZsb2F0KSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19
Ci0KLXdobHNsVGVzdHMuaW5jV3JvbmdUeXBlcyA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQg
Y2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3IrKyhmbG9hdCkg
eyByZXR1cm4gMzI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13aGxzbFRlc3RzLmdy
ZWF0ZXJUaGFuV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcj4oaW50IGEsIGludCBi
KSB7IHJldHVybiBhICsgYjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci0KLXdobHNsVGVz
dHMuZ3JlYXRlckVxdWFsV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcj49KGludCBh
LCBpbnQgYikgeyByZXR1cm4gYSArIGI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13
aGxzbFRlc3RzLmluZGV4U2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGZsb2F0IG9wZXJhdG9yW10o
aW50LCB1aW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1LjQzOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgdWludCwgaW50
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnNldHRlcldpdGhNaXNtYXRjaGVkVHlw
ZSA9IGFzeW5jICgpID0+Ci17Ci0gICAgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBmbG9hdCBvcGVyYXRvci5mb28oaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiA1LjQzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZv
bz0oaW50LCBpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwot
PC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
emVyby1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlm
ZDIyZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRt
bD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5T
b2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZTlkODNkYmNiMzZiMmY1ODBjZjY5Zjdi
YThkNzBlMjI4Y2QzMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotc3Ry
dWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAg
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLXN0cnVjdCBCYXIgewotICAgIGZsb2F0
IHk7Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeTI7Ci0gICAgZmxvYXQgeTM7Ci0gICAgZmxv
YXQgeTQ7Ci0gICAgZmxvYXQgeTU7Ci0gICAgZmxvYXQgeTY7Ci0gICAgZmxvYXQgeTc7Ci0gICAg
ZmxvYXQgeTg7Ci0gICAgZmxvYXQgeTk7Ci0gICAgZmxvYXQgeTEwOwotICAgIGZsb2F0IHkxMTsK
LSAgICBmbG9hdCB5MTI7Ci0gICAgZmxvYXQgeTEzOwotICAgIGZsb2F0IHkxNDsKLSAgICBmbG9h
dCB5MTU7Ci0gICAgZmxvYXQgeTE2OwotICAgIGZsb2F0IHkxNzsKLSAgICBmbG9hdCB5MTg7Ci0g
ICAgZmxvYXQgeTE5OwotICAgIGZsb2F0IHkyMDsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0
ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0
dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBCYXIgYmFyOwotCi0g
ICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gYmFyLnky
MDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNo
YWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0
dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBj
b25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZl
cnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxv
Y2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJp
YnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07
Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBj
b25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAg
ICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9y
bS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlv
dXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0g
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIw
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0g
PSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7
Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3Vy
Y2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7
Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNp
emU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwot
ICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVu
b3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4o
c3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFp
bi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0
cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29k
ZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQg
PSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9
IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxv
YWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAg
Y29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFz
c0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07
Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRl
clBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBp
cGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3Jv
dXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJz
KDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQs
IDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBj
b21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1
ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci0KLWlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7
Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsK
LX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVl
cy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6
ZS12YWx1ZXMtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Jm
ODY5YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+
Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3
QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
emVyby1pbml0aWFsaXplLXZhbHVlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXpl
cm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTEyNTY4ZmFjYzEyZTM4MDkyNjk5M2M2ZTQyNDU2NTU4NzZlN2U5Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
emVyby1pbml0aWFsaXplLXZhbHVlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29u
c3Qgc2hhZGVyU291cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0
aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0K
LXRocmVhZCBmbG9hdCogcHRyKCkgewotICAgIGZsb2F0IGxvY2FsOwotICAgIHJldHVybiAmbG9j
YWw7Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6
IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhP
dXQgcmVzdWx0OwotCi0gICAgdGhyZWFkIGZsb2F0KiBwID0gcHRyKCk7Ci0gICAgKnAgPSAxLjA7
Ci0gICAgZmxvYXQgdmFsdWUgPSAqcHRyKCk7IC8vIGNhbGxpbmcgcHRyKCkgemVybyBpbml0aWFs
aXplcy4KLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFk
ZSA9IHZhbHVlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZy
YWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsK
LSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1j
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5j
IGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3Qg
cHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6
YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNv
bnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29u
c3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xv
ckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNv
bnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7
c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29u
c3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZz
ZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFd
OwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0
ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0
ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBj
b25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRH
cm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1p
dGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5j
aWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5
b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBl
bGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVy
MERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAq
IDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJ
VEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRl
eEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIg
PSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlC
dWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0
XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRv
ciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlw
dG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3Vy
Y2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAg
ICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIu
dW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1
ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAw
LCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRv
ciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5n
XX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3Jv
dXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgi
Z3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDog
ImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3
YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0g
c3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZp
ZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNv
bnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFj
aG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDog
bnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9
XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCBy
ZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJl
Z2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNl
dEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRl
eEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVy
LmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAg
IGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZp
Y2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLQotaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZp
Y2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5j
dGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwot
ICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dy
b3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3
Y2EwZGQzYmJhZjhjZDEwMTMxMmIwOGVhNzljOGNlODFmODZjNGQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLmh0
bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRt
bD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi12ZXJ0
ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZs
b2F0IGkgOiBhdHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlv
bjsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci1g
OwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0K
LWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAg
Y29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJh
c3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9Owot
ICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0g
ICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5k
LCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAot
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLSAgICAKLSAgICBjb25zdCBhdHRy
aWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKLSAgICBjb25z
dCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OwotICAg
IGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07
Ci0gICAgY29uc3QgaW5wdXQxID0ge3N0cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRl
MV19OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDAsIGlucHV0MV07Ci0gICAgY29uc3QgdmVy
dGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTog
NywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ip
OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRz
OiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFn
ZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRl
cHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJl
bmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJh
eUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZl
cjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzNdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzldID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzEwXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxM10gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAgIHZlcnRl
eEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0g
e3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjEgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9y
KTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZm
ZXIxLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOwotICAgIHZlcnRl
eEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJy
YXlbMV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOwotICAgIHZl
cnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbM10gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAo
KTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVB
c3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0
MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZs
b2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNv
bnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0g
ICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVy
QmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRH
cm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmlu
ZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qg
c3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAg
ICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5E
ZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJl
bnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJl
LmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmlj
ZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBn
OiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2ht
ZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xl
YXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRl
eEJ1ZmZlcjAsIHZlcnRleEJ1ZmZlcjFdLCBbMCwgMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVy
LmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAg
IGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZp
Y2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVz
dFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNl
KCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAg
ICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91
bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJiaXRyYXJ5LXZlcnRl
eC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYXJiaXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJpdHJhcnktdmVydGV4
LWF0dHJpYnV0ZS1sb2NhdGlvbnMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJpdHJhcnktdmVy
dGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9h
cmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWEw
NDE0N2Q1MDEwNjVjODQyYmFhY2YxM2IzMzdlZGExNDYwOTI1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FyYml0cmFyeS12ZXJ0ZXgtYXR0cmlidXRlLWxvY2F0
aW9ucy5odG1sCkBAIC0wLDAgKzEsMTMyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAi
PjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0
ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNo
YWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihm
bG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMTczKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
NDk4KSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9z
aXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hh
ZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0
IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNv
dXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJh
Z21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50
U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAi
OworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxN
b2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
ckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5v
cm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9y
V3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAg
IGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDE3MywgZm9ybWF0OiAiZmxvYXQ0
In07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogNDk4LCBmb3JtYXQ6
ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBh
dHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXX07CisgICAgY29uc3QgaW5wdXRz
ID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5w
dXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6
IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0
KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9
IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6
YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwg
c2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBG
bG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4
QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwor
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3Qg
YnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBj
b25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5k
aW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3Vw
TGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNv
bnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2Ny
aXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRl
eHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNy
ZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAs
IGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6
IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIs
IHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0g
e2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJl
bmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBh
c3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQ
aXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVm
ZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9
IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChb
Y29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MzYyYzJhODIzZTY2MjZhNjU4OTYyMDE0YzhhNzdlMzE3
NDhjMmRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FyZ3Vt
ZW50LWV2YWx1YXRpb24tb3JkZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNT
IGV2YWx1YXRpb25PcmRlckZvckFyZ3VtZW50cyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2FyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXIuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTBlYThkMTY1ZDBmMGQyZTAwODYxYjc1OGM0MjhiNjEyZTExN2I0MwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLmh0
bWwKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5D
b3B5aW5nLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmV2YWx1YXRpb25P
cmRlckZvckFyZ3VtZW50cyA9IGFzeW5jICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gYAor
ICAgICAgICBpbnQgZm9vKCkgeyByZXR1cm4gKmJhcigxMCkgKyAqYmFyKDIwKTsgfQorCisgICAg
ICAgIHRocmVhZCBpbnQqIGJhcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCB4ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgYmF6KCkgeyByZXR1cm4gcGx1cyhiYXIoMTApLCBiYXIoMjApKTsgfQorCisgICAgICAg
IGludCBwbHVzKHRocmVhZCBpbnQqIHgsIHRocmVhZCBpbnQqIHkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqeCArICp5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwg
NDApOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FycmF5LWxlbmd0aC1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1sZW5ndGgt
c3BlYy10ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTUzM2U4YWFmMDJlM2E0MDRkZDI0
MjBmMWM5YTk0ZjdiMDdmNGE3ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9hcnJheS1sZW5ndGgtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0
IEBACisKK1BBU1Mgbm9uQXJyYXlSZWZBcnJheUxlbmd0aEZhaWwgCitQQVNTIG5vbkFycmF5UmVm
QXJyYXlMZW5ndGhTdWNjZWVkIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9hcnJheS1sZW5ndGgtc3BlYy10ZXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NzcwNGNhZTgzOGI5
ZTVhODUyMDNmODNiYzc4NmMzMGYzNWIwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDQ1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRh
IG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qgc3RydWN0cy48L3Rp
dGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Nv
bnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5ub25BcnJheVJlZkFycmF5TGVuZ3Ro
RmFpbCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICB0aHJlYWQgdWludCogbGVuZ3RoUHRyKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpbnRbNDJdIGFycmF5OworICAgICAgICAgICAgICAgIHJldHVybiAmKGFycmF5
Lmxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLm5v
bkFycmF5UmVmQXJyYXlMZW5ndGhTdWNjZWVkID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgdWludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9h
dFs3NTRdIGFycmF5OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKKyAgICAgICAg
fQorICAgICAgICB1aW50IGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludFs3NTRdIGFy
cmF5OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgIGA7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSksIDc1NCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHBy
b2dyYW0sICJiYXIiLCBbXSksIDc1NCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJy
YXktc3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJy
YXktc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY4NWIxZjZlNmZmMDk0MWZj
NjM4NGQ5MmM4MzgyYjI3ZDJiMDJiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAK
KworUEFTUyBhcnJheVJlZlRvQXJyYXlSZWYgCitQQVNTIGFzc2lnbkxlbmd0aCAKK1BBU1MgYXNz
aWduTGVuZ3RoSGVscGVyIAorUEFTUyBidWlsZEFycmF5VGhlblN1bUl0IAorUEFTUyBidWlsZEFy
cmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSAKK1BBU1MgcGFzc2luZ0FycmF5VG9GdW5j
dGlvbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FycmF5LXNwZWMt
dGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDQyY2Q0ZDA3NmNjYzQzNmJkMGMxODc1NDNhMGY0NWE3YmZkZTFmOAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRl
c3RzLmh0bWwKQEAgLTAsMCArMSwxMjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0
YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8
dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0i
anMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9
OworCit3aGxzbFRlc3RzLmFycmF5UmVmVG9BcnJheVJlZiA9IGFzeW5jICgpID0+IHsKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludCB4OworICAgICAgICAgICAgdGhyZWFkIGludFtdIHAgPSBAeDsKKyAgICAgICAgICAgIHRo
cmVhZCBpbnRbXVtdIHBwID0gQHA7CisgICAgICAgICAgICBpbnRbXXRocmVhZFtddGhyZWFkIHFx
ID0gcHA7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIHggPSA0MjsK
KyAgICAgICAgICAgIHBbMF0gPSA3NjsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAg
ICAgICAgcHBbMF1bMF0gPSAzOTsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAg
ICAgcXFbMF1bMF0gPSA4MzsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzYgKyAzOSArIDgzKTsKK30K
Kword2hsc2xUZXN0cy5hc3NpZ25MZW5ndGggPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hl
Y2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZmxvYXRbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICAoQGFy
cmF5KS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAor
fQorCit3aGxzbFRlc3RzLmFzc2lnbkxlbmd0aEhlbHBlciA9IGFzeW5jICgpID0+IHsKKyAgICBh
d2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgYmFyKHRocmVhZCBm
bG9hdFtdIGFycmF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5Lmxlbmd0
aCA9IDQyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJyYXk7CisgICAgICAgICAgICAgICAg
YmFyKEBhcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3Rz
LmJ1aWxkQXJyYXlUaGVuU3VtSXQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBg
CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRbNDJdIGFycmF5
OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDI7IGkgPSBpICsgMSkKKyAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IGludChpICsgNSk7CisgICAgICAgICAgICBpbnQgcmVzdWx0
OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDI7IGkgPSBpICsgMSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBhcnJheVtpXTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyICogNSArIDQyICogNDEgLyAyKTsK
K30KKword2hsc2xUZXN0cy5idWlsZEFycmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSA9
IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGJhcih0aHJl
YWQgaW50W10gYXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsg
aSA8IDQyOyBpID0gaSArIDEpCisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBpbnQoaSArIDUp
OworICAgICAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsg
aSA8IDQyOyBpID0gaSArIDEpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYXJy
YXlbaV07CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlu
dCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRbNDJdIGFycmF5OworICAgICAgICAg
ICAgcmV0dXJuIGJhcihAYXJyYXkpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0MiAqIDUgKyA0
MiAqIDQxIC8gMik7Cit9CisKK3dobHNsVGVzdHMucGFzc2luZ0FycmF5VG9GdW5jdGlvbiA9IGFz
eW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbnRbMTBdIGFycjsKKyAgICAgICAgICAgIGZvciAodWludCBp
ID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBhcnJbaV0gPSBpbnQo
aSkgKyAxOworICAgICAgICAgICAgcmV0dXJuIHN1bShhcnIpOworICAgICAgICB9CisKKyAgICAg
ICAgaW50IHN1bShpbnRbMTBdIHhzKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgdCA9IDA7
CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykKKyAgICAg
ICAgICAgICAgICB0ID0gdCArIHhzW2ldOworICAgICAgICAgICAgcmV0dXJuIHQ7CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDU1KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYWRk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYWRkLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZWI0NTJlNjkyMTk2YzUxYzZkMzQxOGNhMGEzNmQzYmZjNTBkMWRi
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hZGQtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGJhZEFkZCAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hZGQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9iYWQtYWRkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmFlMDQxNjljYTYzMWE5MDczMTJiYzc0
YzdkMmM4ZGE1NzE5NjQ2YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9iYWQtYWRkLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJs
b25nIj4KKzx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRl
c3RzLmJhZEFkZCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCwgdWludCB5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHVpbnQgeiA9IHggKyB5OworICAgICAgICAgICAgfQorICAgICAgICBg
KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hbmRlci1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzk4YTc0YzlkZmU3MWI1Yzk0NjUwMjRkNjk4OWVhOTk5N2I0Y2UxYgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXItZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsOSBAQAorCitQQVNTIGluZGV4QW5kZXJEb2VzbnRSZXR1cm5Qb2ludGVyIAorUEFT
UyBpbmRleEFuZGVyRG9lc250VGFrZVJlZmVyZW5jZSAKK1BBU1MgYW5kZXJEb2VzbnRSZXR1cm5Q
b2ludGVyIAorUEFTUyBhbmRlckRvZXNudFRha2VSZWZlcmVuY2UgCitQQVNTIGFuZGVyV2l0aEJh
ZEluZGV4IAorUEFTUyBhbmRlcldpdGhOb3RoaW5nV3JvbmcgCitQQVNTIGFuZGVyV2l0aFdyb25n
TnVtYmVyT2ZBcmd1bWVudHMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9iYWQtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45Yzk3YWI4ZTRlYTI2OTA0MDlhYWZiNjc4NmNiMmQ5NmNmOGM2NzMyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hbmRlci5odG1s
CkBAIC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNl
dD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRl
c3QgcHJlZml4L3Bvc3RmaXguPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMu
aW5kZXhBbmRlckRvZXNudFJldHVyblBvaW50ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0
IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAg
ICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3Im
W10odGhyZWFkIEZvbyogZm9vLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBmb28tPng7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRl
c3RzLmluZGV4QW5kZXJEb2VzbnRUYWtlUmVmZXJlbmNlID0gYXN5bmMgKCkgPT4KK3sKKyAgICBh
d2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAg
ICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkIGlu
dCogb3BlcmF0b3ImW10oRm9vIGZvbywgdWludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJmZvby54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hs
c2xUZXN0cy5hbmRlckRvZXNudFJldHVyblBvaW50ZXIgPSBhc3luYyAoKSA9PiB7CisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAg
ICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBvcGVyYXRv
ciYuZm9vKHRocmVhZCBGb28qIGZvbykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZm9vLT54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0
cy5hbmRlckRvZXNudFRha2VSZWZlcmVuY2UgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAg
ICAgICAgaW50IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVy
YXRvciYuZm9vKEZvbyBmb28pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICZmb28ueDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuYW5k
ZXJXaXRoQmFkSW5kZXggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbChgaW50
IGZvbyh0aHJlYWQgaW50W10geCkgeyByZXR1cm4geFstMV07IH1gKTsKKworICAgIGF3YWl0IGNo
ZWNrRmFpbChgaW50IGZvbyh0aHJlYWQgaW50W10geCkgeyByZXR1cm4geFsxLmZdOyB9YCk7CisK
KyAgICBhd2FpdCBjaGVja0ZhaWwoYGludCBmb28odGhyZWFkIGludFtdIHgsIGludCB5KSB7IHJl
dHVybiB4W3ldOyB9YCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoYGludCBmb28odGhyZWFkIGlu
dFtdIHgsIGZsb2F0IHkpIHsgcmV0dXJuIHhbeV07IH1gKTsKK30KKword2hsc2xUZXN0cy5hbmRl
cldpdGhOb3RoaW5nV3JvbmcgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAor
ICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAg
ICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIHg7CisgICAgICAgICAgICB4LnggPSAxMzsK
KyAgICAgICAgICAgIHJldHVybiB4LmZvbzsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMTMpOwor
fQorCit3aGxzbFRlc3RzLmFuZGVyV2l0aFdyb25nTnVtYmVyT2ZBcmd1bWVudHMgPSBhc3luYyAo
KSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB0aHJl
YWQgaW50KiBvcGVyYXRvciYuZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnQgeDsKKyAgICAgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgICAgICB9CisgICAgICAg
IGApOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsKKyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vLCBpbnQgYmxhaCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYmFkLWxpdGVy
YWxzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2YTE2YTJmOTA0NWE4Njg2YTM0ZDlmN2IwYjA0YjRl
ZWJiNzI5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYmFk
LWxpdGVyYWxzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBiYWRJbnRMaXRl
cmFsRm9ySW50IAorUEFTUyBiYWRJbnRMaXRlcmFsRm9yRmxvYXQgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OGUwMjA1YzU4NDYxNTM0
NDdjMzgyYjE3NTZiY2E0M2UxYWM4NzMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2JhZC1saXRlcmFscy5odG1sCkBAIC0wLDAgKzEsMjUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgor
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5iYWRJbnRMaXRlcmFsRm9ySW50ID0gYXN5bmMg
KCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoICJ2b2lkIGZvbygpIHsgaW50IHggPSAzMDAw
MDAwMDAwOyB9Iik7Cit9CisKK3dobHNsVGVzdHMuYmFkSW50TGl0ZXJhbEZvckZsb2F0ID0gYXN5
bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoInZvaWQgZm9vKCkgeyBmbG9hdCB4ID0g
NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDsgfSIpOworfQorCitydW5UZXN0
cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI0MWRkNjY3ODFmYjFkMTgwNTQ3OGJhNDk1ODRhNmM2NGE4Mzc3NzcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYml0d2lzZS1ib29sLW9wcy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1MgYm9vbEJpdEFuZCAKK1BBU1MgYm9vbEJpdE9yIAor
UEFTUyBib29sQml0WG9yIAorUEFTUyBib29sQml0Tm90IAorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvYml0d2lzZS1ib29sLW9wcy5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDZlODNjZDI0NjEw
N2I2N2U3ZjMzOWVlOGQ0ZTVmNTA3MWQ1MmViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMuaHRtbApAQCAtMCwwICsxLDEyMiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1l
PSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhh
cm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+Citjb25zdCBlcHNpbG9uID0gMC4wMDAxOworCitjb25zdCB3aGxzbFRl
c3RzID0ge307CisKK3dobHNsVGVzdHMuYm9vbEJpdEFuZCA9IGFzeW5jICgpID0+IHsKKyAgICBj
b25zdCBzb3VyY2UgPSBgCisgICAgICAgIGJvb2wgZm9vKGJvb2wgYSwgYm9vbCBiKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0KKyAgICBgOworCisgICAg
eworICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJm
b28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKHRydWUpXSk7CisgICAgICAgIGFzc2VydF9l
cXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVk
IHZhbHVlLiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChm
YWxzZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1
cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1
bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxz
ZSksIG1ha2VCb29sKHRydWUpXSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxz
ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorfTsKKword2hsc2xU
ZXN0cy5ib29sQml0T3IgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3Qgc291cmNlID0gYAorICAg
ICAgICBib29sIGZvbyhib29sIGEsIGJvb2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGEgfCBiOworICAgICAgICB9CisgICAgYDsKKworICAgIHsKKyAgICAgICAgbGV0IHJlc3Vs
dCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUp
LCBtYWtlQm9vbCh0cnVlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwg
IlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAgICAg
ICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFr
ZUJvb2woZmFsc2UpLCBtYWtlQm9vbChmYWxzZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhy
ZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJj
ZSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2woZmFsc2UpXSk7CisgICAgICAgIGFz
c2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4i
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1
bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7
CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBl
Y3RlZCB2YWx1ZS4iKTsKKyAgICB9Cit9OworCit3aGxzbFRlc3RzLmJvb2xCaXRYb3IgPSBhc3lu
YyAoKSA9PiB7CisgICAgY29uc3Qgc291cmNlID0gYAorICAgICAgICBib29sIGZvbyhib29sIGEs
IGJvb2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9
CisgICAgYDsKKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVu
Y3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVj
dGVkIHZhbHVlLiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJv
b2woZmFsc2UpXSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3Qg
cmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAgICAgICBsZXQg
cmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wo
dHJ1ZSksIG1ha2VCb29sKGZhbHNlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwg
dHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgewor
ICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28i
LCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbCh0cnVlKV0pOworICAgICAgICBhc3NlcnRfZXF1
YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAg
fQorfTsKKword2hsc2xUZXN0cy5ib29sQml0Tm90ID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0
IHNvdXJjZSA9IGAKKyAgICAgICAgYm9vbCBmb28oYm9vbCBhKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAgICBgOworCisgICAgeworICAgICAgICBsZXQg
cmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wo
dHJ1ZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1
cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1
bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxz
ZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIHRydWUsICJUZXN0IHJldHVybmVk
IGV4cGVjdGVkIHZhbHVlLiIpOworICAgIH0KK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOwor
PC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
Ym9vbHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Jvb2xzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNDVhYmI4YzFjNDBiYzY3MmM3Nzk4YjliMmMyZDU0ZjIzNWY3
OGM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Jvb2xzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBib29sZWFuTWF0aCAKK1BBU1MgaWRl
bnRpdHlCb29sIAorUEFTUyBsaXRlcmFsQm9vbCAKK1BBU1Mgb3BlcmF0b3JCb29sIAorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYm9vbHMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9ib29scy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZjcxYTQ5OWUzNjE2MTMzMWQ4
ZDZhMWI5NmZkYTU5NmJkNDcyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvYm9vbHMuaHRtbApAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5Cb29scy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRl
c3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xU
ZXN0cy5ib29sZWFuTWF0aCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisg
ICAgICAgIGJvb2wgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWUgJiYg
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzIoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZSAmJiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzMo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2UgJiYgdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBib29sIGZvbzQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2UgJiYgZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBmb281KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHRydWUgfHwgdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29s
IGZvbzYoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZSB8fCBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBib29sIGZvbzcoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2UgfHwgdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzgoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2UgfHwgZmFsc2U7CisgICAgICAgIH0KKyAgICBg
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzIiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIGZhbHNl
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzUiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vNiIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbXSksIGZhbHNl
KTsKK30KKworCit3aGxzbFRlc3RzLmlkZW50aXR5Qm9vbCA9IGFzeW5jICgpID0+IHsKKyAgICBs
ZXQgcHJvZ3JhbSA9ICJib29sIGZvbyhib29sIHgpIHsgcmV0dXJuIHg7IH0iOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29s
KHRydWUpXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7Cit9CisKK3dobHNs
VGVzdHMubGl0ZXJhbEJvb2wgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAiYm9v
bCBmb28oKSB7IHJldHVybiB0cnVlOyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7Cit9CisKK3dobHNsVGVzdHMu
b3BlcmF0b3JCb29sID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgYm9vbCBib29sRnJvbVVjaGFyRmFsc2UoKSB7IHJldHVybiBib29sKHVjaGFyKDApKTsgfQor
ICAgICAgICBib29sIGJvb2xGcm9tVWNoYXJUcnVlKCkgeyByZXR1cm4gYm9vbCh1Y2hhcigxKSk7
IH0KKworICAgICAgICBib29sIGJvb2xGcm9tVWludEZhbHNlKCkgeyByZXR1cm4gYm9vbCh1aW50
KDApKTsgfQorICAgICAgICBib29sIGJvb2xGcm9tVWludFRydWUoKSB7IHJldHVybiBib29sKHVp
bnQoMSkpOyB9CisKKyAgICAgICAgYm9vbCBib29sRnJvbUludEZhbHNlKCkgeyByZXR1cm4gYm9v
bChpbnQoMCkpOyB9CisgICAgICAgIGJvb2wgYm9vbEZyb21JbnRUcnVlKCkgeyByZXR1cm4gYm9v
bChpbnQoMSkpOyB9CisKKyAgICAgICAgYm9vbCBib29sRnJvbUZsb2F0RmFsc2UoKSB7IHJldHVy
biBib29sKGZsb2F0KDApKTsgfQorICAgICAgICBib29sIGJvb2xGcm9tRmxvYXRUcnVlKCkgeyBy
ZXR1cm4gYm9vbChmbG9hdCgxKSk7IH0KKyAgICAgICAgYm9vbCBib29sRnJvbUZsb2F0TmFOKGZs
b2F0IGFyZykgeyByZXR1cm4gYm9vbChhcmcpOyB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21VY2hhckZhbHNlIiwg
W10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJib29sRnJvbVVjaGFyVHJ1ZSIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tVWludEZhbHNlIiwg
W10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJib29sRnJvbVVpbnRUcnVlIiwgW10pLCB0cnVlKTsKKworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21JbnRGYWxzZSIsIFtd
KSwgZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9n
cmFtLCAiYm9vbEZyb21JbnRUcnVlIiwgW10pLCB0cnVlKTsKKworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21GbG9hdEZhbHNlIiwgW10p
LCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJib29sRnJvbUZsb2F0VHJ1ZSIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUZsb2F0TmFOIiwgW21ha2VG
bG9hdChwcm9ncmFtLCBOYU4pXSksIHRydWUpOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZmxvYXQzIHg7CisgICAgICAgICAgICAgICAgYm9vbCByID0gYm9vbCh4KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorCisgICAgYXdhaXQgY2hlY2tGYWlsKAor
ICAgICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZmxvYXQzeDMgeDsKKyAgICAgICAgICAgICAgICBib29sIHIgPSBib29sKHgpOwor
ICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3J1blRlc3RzKHdobHNs
VGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2Ey
NjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItZnJhZ21lbnQtZXhwZWN0ZWQuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
K2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9idWZmZXItZnJhZ21lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZm
ZXItZnJhZ21lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGJhYmEwMzdmMWNlMmIwNzlhNWQ2OTJiMjJj
ZDllMzIyM2Y5ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2J1ZmZlci1mcmFnbWVudC5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAK
K3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgw
KSwgZmxvYXQgaSA6IGF0dHJpYnV0ZSgxKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBv
c2l0aW9uOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogU1ZfUG9zaXRpb24sIGNvbnN0YW50IGZsb2F0W10gdGhlQnVmZmVyIDogcmVnaXN0ZXIo
YjApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHRoZUJ1ZmZlclswXSwgdGhl
QnVmZmVyWzBdLCB0aGVCdWZmZXJbMF0sIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0
KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZl
cnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hh
ZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xv
Z3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtm
cm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMg
PSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1h
c2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNp
bFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0
aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRl
ckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXQxID0g
e3N0cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMV19OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dDAsIGlucHV0MV07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVm
ZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29u
c3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRl
eEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjEgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIxLm1hcFdyaXRlQXN5bmMoKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2
ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlb
MF0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMV0gPSAxOworICAgIHZlcnRl
eEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJy
YXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dS
SVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVm
ZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJl
c291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZl
ckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Cisg
ICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7
YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmlu
ZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3Qg
YmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6
IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBj
YW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9
IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBj
b250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29u
c3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7
CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rl
cigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAg
ICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmll
dywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUi
LCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0g
bnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRz
LCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjAsIHZlcnRleEJ1ZmZl
cjFdLCBbMCwgMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3RoLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1
ZmZlci1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3Ro
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTMyMmM2ZGQ1NjlmY2Y2MWNhNzE0OTFjMzVmNjE5ZWNhODM3NTg5
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVu
Z3RoLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygxLCAx
LCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSB1aW50W10gYnVmZmVyIDog
cmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Cisg
ICAgYnVmZmVyWzBdID0gYnVmZmVyLmxlbmd0aDsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1
dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVy
In1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25z
dCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IFVpbnQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5UICogMTMzNzsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5T
RkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyVWludDMyQXJyYXkgPSBuZXcgVWludDMy
QXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlclVpbnQzMkFycmF5WzBdID0gMDsK
KyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9y
ID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2Uu
VFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3Vs
dHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXpl
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBi
dWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25z
dCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29k
ZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVy
LCAwLCByZXN1bHRzQnVmZmVyLCAwLCAxICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQp
OworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29t
cHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0
c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRVaW50MzJBcnJheSA9IG5l
dyBVaW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRVaW50MzJB
cnJheVswXSA9PSAxMzM3KQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAg
ICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihk
ZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIi
KTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVy
LXZlcnRleC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1ZmZlci12
ZXJ0ZXgtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIx
YWZmMDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2J1ZmZlci12ZXJ0ZXgtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItdmVydGV4Lmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZlcnRleC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjAwMGYyODA4MWM2MThlMGIwMzA4NzE5OTc2ZDliYjVjNTViN2M2YzYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZlcnRleC5odG1sCkBAIC0w
LDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVy
KGNvbnN0YW50IGZsb2F0NFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKGIwKSwgdWludCBpZCA6IFNWX1Zl
cnRleElEKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gYnVmZmVyW2lkXTsKK30KKworZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEuMCwgMS4wLCAxLjAsIDEuMCk7
Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFz
Iik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1v
ZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFn
ZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07
CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNv
bnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9u
ZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBo
YUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRz
LkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IFtdfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwg
cHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRo
U3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRl
clBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0g
NCAqIDQgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7CisKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZP
Uk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVsxXSA9IC0wLjU7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Cisg
ICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs1
XSA9IDAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbOF0gPSAwLjU7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAt
MC41OworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5WzEyXSA9IDAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAw
LjU7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwg
c2l6ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Cisg
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
KyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihk
ZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9u
KCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12ZWN0b3JzLTItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0yLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZTdiMDE3MmVlY2M2MTUyM2YxMWNmNWQyNmIxMTkwNGU4MTY0YWUxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0y
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBidWlsdGluVmVjdG9yR2V0dGVy
cyAKK1BBU1MgYnVpbHRpblZlY3RvclNldHRlcnMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9idWlsdGluLXZlY3RvcnMtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU1N2E4MzY2ZjVmMjM5
M2VlZjQ3ZTVhZjVlNmQ0MjBmOGExNjZiNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9idWlsdGluLXZlY3RvcnMtMi5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgorPHNj
cmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNs
VGVzdHMgPSB7fTsKKworY29uc3QgY2hlY2tGdW5jcyA9IHsKKyAgICAidWludCI6IGNhbGxVaW50
RnVuY3Rpb24sCisgICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKKyAgICAiZmxvYXQiOiBjYWxs
RmxvYXRGdW5jdGlvbgorfTsKK2NvbnN0IHR5cGVOYW1lcyA9IFsgInVpbnQiLCAiaW50IiwgImZs
b2F0IiBdOworY29uc3Qgc2l6ZXMgPSBbIDIsIDMsIDQgXTsKK2NvbnN0IGVsZW1lbnRzID0gWyAi
eCIsICJ5IiwgInoiLCAidyIgXTsKK2NvbnN0IGluaXRpYWxpemVyTGlzdCA9IFsgMSwgMiwgMywg
NCBdOworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JHZXR0ZXJzID0gYXN5bmMgKCkgPT4KK3sK
KworICAgIGxldCB0ZXN0cyA9IFtdOworICAgIGxldCBzcmMgPSAiIjsKKyAgICBmb3IgKGxldCB0
eXBlTmFtZSBvZiB0eXBlTmFtZXMpIHsKKyAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBzaXplcykg
eworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0ke3NpemV9JHtlbGVtZW50
c1tpXX1gOworICAgICAgICAgICAgICAgIHNyYyArPSBgJHt0eXBlTmFtZX0gJHtmdW5jdGlvbk5h
bWV9KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAke3R5cGVOYW1lfSR7c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtzaXplfSgke2luaXRpYWxp
emVyTGlzdC5zbGljZSgwLCBzaXplKS5qb2luKCIsICIpfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHguJHtlbGVtZW50c1tpXX07CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBgOworICAgICAgICAgICAgICAgIHRlc3RzLnB1
c2goeyB0eXBlOiB0eXBlTmFtZSwgbmFtZTogZnVuY3Rpb25OYW1lLCBleHBlY3RhdGlvbjogaW5p
dGlhbGl6ZXJMaXN0W2ldIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgbGV0IHByb2dyYW0gPSBzcmM7CisgICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgeworICAg
ICAgICBjb25zdCBjaGVja0Z1bmMgPSBjaGVja0Z1bmNzW3Rlc3QudHlwZV07CisgICAgICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2hlY2tGdW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0
LmV4cGVjdGF0aW9uKTsKKyAgICB9Cit9OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JTZXR0
ZXJzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgdGVzdHMgPSBbXTsKKyAgICBsZXQgc3JjID0g
IiI7CisgICAgZm9yIChsZXQgdHlwZU5hbWUgb2YgdHlwZU5hbWVzKSB7CisgICAgICAgIGZvciAo
bGV0IHNpemUgb2Ygc2l6ZXMpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dHlwZU5h
bWV9JHtzaXplfSR7ZWxlbWVudHNbaV19YDsKKyAgICAgICAgICAgICAgICBzcmMgKz0gYCR7dHlw
ZU5hbWV9ICR7ZnVuY3Rpb25OYW1lfSgpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3NpemV9IHggPSAke3R5cGVOYW1l
fSR7c2l6ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6ZSkuam9pbigiLCAiKX0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguJHtlbGVtZW50c1tpXX0gPSAzNDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geC4ke2VsZW1lbnRzW2ldfTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGA7CisgICAgICAgICAg
ICAgICAgdGVzdHMucHVzaCh7IHR5cGU6IHR5cGVOYW1lLCBuYW1lOiBmdW5jdGlvbk5hbWUsIGV4
cGVjdGF0aW9uOiAzNCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGxldCBwcm9ncmFtID0gc3JjOworICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAg
ICAgY29uc3QgY2hlY2tGdW5jID0gY2hlY2tGdW5jc1t0ZXN0LnR5cGVdOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNoZWNrRnVuYyhwcm9ncmFtLCB0ZXN0Lm5hbWUsIFtdKSwgdGVzdC5l
eHBlY3RhdGlvbik7CisgICAgfQorfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0
PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRp
bi12ZWN0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWlsdGlu
LXZlY3RvcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMWM3YTI4MmVmNmI1ZTI3OTY1NzAy
YzE5YWNmNGUxNTRlOGNhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFT
UyBidWlsdGluVmVjdG9ySW5kZXhTZXR0ZXJzIAorUEFTUyBidWlsdGluVmVjdG9ycyAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIxNDk0ZjMxYjVkZjljZjliMTU1OTQxMjM2MWI3YzY1ZDhkZjg4NDAKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12ZWN0b3JzLmh0bWwKQEAgLTAs
MCArMSwxOTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04
PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29w
cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKworY29uc3QgY2hlY2tGdW5jcyA9IHsKKyAgICAi
dWludCI6IGNhbGxVaW50RnVuY3Rpb24sCisgICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKKyAg
ICAiZmxvYXQiOiBjYWxsRmxvYXRGdW5jdGlvbgorfTsKK2NvbnN0IHR5cGVOYW1lcyA9IFsgInVp
bnQiLCAiaW50IiwgImZsb2F0IiBdOworY29uc3Qgc2l6ZXMgPSBbIDIsIDMsIDQgXTsKK2NvbnN0
IGVsZW1lbnRzID0gWyAieCIsICJ5IiwgInoiLCAidyIgXTsKK2NvbnN0IGluaXRpYWxpemVyTGlz
dCA9IFsgMSwgMiwgMywgNCBdOworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JJbmRleFNldHRl
cnMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCB0ZXN0cyA9IFtdOworICAgIGxldCBzcmMgPSAi
IjsKKyAgICBmb3IgKGxldCB0eXBlTmFtZSBvZiB0eXBlTmFtZXMpIHsKKyAgICAgICAgZm9yIChs
ZXQgc2l6ZSBvZiBzaXplcykgeworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0eXBlTmFt
ZX0ke3NpemV9JHtlbGVtZW50c1tpXX1gOworICAgICAgICAgICAgICAgIHNyYyArPSBgJHt0eXBl
TmFtZX0gJHtmdW5jdGlvbk5hbWV9KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAke3R5cGVOYW1lfSR7c2l6ZX0geCA9ICR7dHlwZU5hbWV9
JHtzaXplfSgke2luaXRpYWxpemVyTGlzdC5zbGljZSgwLCBzaXplKS5qb2luKCIsICIpfSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeFske2l9XSA9IDM0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB4WyR7aX1dOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYDsKKyAgICAgICAgICAgICAgICB0ZXN0cy5wdXNoKHsg
dHlwZTogdHlwZU5hbWUsIG5hbWU6IGZ1bmN0aW9uTmFtZSwgZXhwZWN0YXRpb246IDM0IH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbGV0IHByb2dyYW0gPSBzcmM7
CisgICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgeworICAgICAgICBjb25zdCBjaGVja0Z1bmMg
PSBjaGVja0Z1bmNzW3Rlc3QudHlwZV07CisgICAgICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2hl
Y2tGdW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0LmV4cGVjdGF0aW9uKTsKKyAgICB9
Cit9OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludDIgYSA9IGludDIoMywgNCk7CisgICAgICAgICAgICByZXR1cm4gYVswXTsKKyAgICAgICAg
fQorICAgICAgICBpbnQgZm9vMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludDIgYSA9IGlu
dDIoMywgNCk7CisgICAgICAgICAgICBpbnQzIGIgPSBpbnQzKGEsIDUpOworICAgICAgICAgICAg
cmV0dXJuIGJbMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzMoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQzIGEgPSBpbnQzKDMsIDQsIDUpOworICAgICAgICAgICAgaW50NCBiID0g
aW50NCg2LCBhKTsKKyAgICAgICAgICAgIHJldHVybiBiWzFdOworICAgICAgICB9CisgICAgICAg
IGludCBmb280KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50MiBhID0gaW50MigzLCA0KTsK
KyAgICAgICAgICAgIGludDIgYiA9IGludDIoNSwgNik7CisgICAgICAgICAgICBpbnQ0IGMgPSBp
bnQ0KGEsIGIpOworICAgICAgICAgICAgcmV0dXJuIGNbMl07CisgICAgICAgIH0KKyAgICAgICAg
Ym9vbCBmb281KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50NCBhID0gaW50NCgzLCA0LCA1
LCA2KTsKKyAgICAgICAgICAgIGludDIgYiA9IGludDIoNCwgNSk7CisgICAgICAgICAgICBpbnQ0
IGMgPSBpbnQ0KDMsIGIsIDYpOworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYzsKKyAgICAgICAg
fQorICAgICAgICBib29sIGZvbzYoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQyIGEgPSBp
bnQyKDQsIDUpOworICAgICAgICAgICAgaW50MyBiID0gaW50MygzLCBhKTsKKyAgICAgICAgICAg
IGludDMgYyA9IGludDMoMywgNCwgNik7CisgICAgICAgICAgICByZXR1cm4gYiA9PSBjOworICAg
ICAgICB9CisgICAgICAgIHVpbnQgZm9vdSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQy
IGEgPSB1aW50MigzLCA0KTsKKyAgICAgICAgICAgIHJldHVybiBhWzBdOworICAgICAgICB9Cisg
ICAgICAgIHVpbnQgZm9vdTIoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MiBhID0gdWlu
dDIoMywgNCk7CisgICAgICAgICAgICB1aW50MyBiID0gdWludDMoYSwgNSk7CisgICAgICAgICAg
ICByZXR1cm4gYlsxXTsKKyAgICAgICAgfQorICAgICAgICB1aW50IGZvb3UzKCkKKyAgICAgICAg
eworICAgICAgICAgICAgdWludDMgYSA9IHVpbnQzKDMsIDQsIDUpOworICAgICAgICAgICAgdWlu
dDQgYiA9IHVpbnQ0KDYsIGEpOworICAgICAgICAgICAgcmV0dXJuIGJbMV07CisgICAgICAgIH0K
KyAgICAgICAgdWludCBmb291NCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQyIGEgPSB1
aW50MigzLCA0KTsKKyAgICAgICAgICAgIHVpbnQyIGIgPSB1aW50Mig1LCA2KTsKKyAgICAgICAg
ICAgIHVpbnQ0IGMgPSB1aW50NChhLCBiKTsKKyAgICAgICAgICAgIHJldHVybiBjWzJdOworICAg
ICAgICB9CisgICAgICAgIGJvb2wgZm9vdTUoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50
NCBhID0gdWludDQoMywgNCwgNSwgNik7CisgICAgICAgICAgICB1aW50MiBiID0gdWludDIoNCwg
NSk7CisgICAgICAgICAgICB1aW50NCBjID0gdWludDQoMywgYiwgNik7CisgICAgICAgICAgICBy
ZXR1cm4gYSA9PSBjOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vdTYoKQorICAgICAgICB7
CisgICAgICAgICAgICB1aW50MiBhID0gdWludDIoNCwgNSk7CisgICAgICAgICAgICB1aW50MyBi
ID0gdWludDMoMywgYSk7CisgICAgICAgICAgICB1aW50MyBjID0gdWludDMoMywgNCwgNik7Cisg
ICAgICAgICAgICByZXR1cm4gYiA9PSBjOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvb2Yo
KQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOworICAg
ICAgICAgICAgcmV0dXJuIGFbMF07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vZjIoKQor
ICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOworICAgICAg
ICAgICAgZmxvYXQzIGIgPSBmbG9hdDMoYSwgNS4pOworICAgICAgICAgICAgcmV0dXJuIGJbMV07
CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vZjMoKQorICAgICAgICB7CisgICAgICAgICAg
ICBmbG9hdDMgYSA9IGZsb2F0MygzLiwgNC4sIDUuKTsKKyAgICAgICAgICAgIGZsb2F0NCBiID0g
ZmxvYXQ0KDYuLCBhKTsKKyAgICAgICAgICAgIHJldHVybiBiWzFdOworICAgICAgICB9CisgICAg
ICAgIGZsb2F0IGZvb2Y0KCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyIGEgPSBmbG9h
dDIoMy4sIDQuKTsKKyAgICAgICAgICAgIGZsb2F0MiBiID0gZmxvYXQyKDUuLCA2Lik7CisgICAg
ICAgICAgICBmbG9hdDQgYyA9IGZsb2F0NChhLCBiKTsKKyAgICAgICAgICAgIHJldHVybiBjWzJd
OworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vZjUoKQorICAgICAgICB7CisgICAgICAgICAg
ICBmbG9hdDQgYSA9IGZsb2F0NCgzLiwgNC4sIDUuLCA2Lik7CisgICAgICAgICAgICBmbG9hdDIg
YiA9IGZsb2F0Mig0LiwgNS4pOworICAgICAgICAgICAgZmxvYXQ0IGMgPSBmbG9hdDQoMy4sIGIs
IDYuKTsKKyAgICAgICAgICAgIHJldHVybiBhID09IGM7CisgICAgICAgIH0KKyAgICAgICAgYm9v
bCBmb29mNigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0MiBhID0gZmxvYXQyKDQuLCA1
Lik7CisgICAgICAgICAgICBmbG9hdDMgYiA9IGZsb2F0MygzLiwgYSk7CisgICAgICAgICAgICBm
bG9hdDMgYyA9IGZsb2F0MygzLiwgNC4sIDYuKTsKKyAgICAgICAgICAgIHJldHVybiBiID09IGM7
CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0KTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgMyk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDUp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9v
NSIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHByb2dyYW0sICJmb282IiwgW10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb291IiwgW10pLCAzKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UyIiwgW10pLCA0KTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UzIiwg
W10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvb3U0IiwgW10pLCA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvb3U1IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U2IiwgW10pLCBmYWxzZSk7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vZiIsIFtd
KSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vZjIiLCBbXSksIDQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvb2YzIiwgW10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNCIsIFtdKSwgNSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNSIsIFtdKSwgdHJ1
ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJm
b29mNiIsIFtdKSwgZmFsc2UpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Nhc3Rz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jYXN0cy1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWI3Y2U0YzdkOGU0MWE3ZWE1ZmE5M2RjMzY0OTExYTJlNDMxYmRhMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jYXN0cy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgY2FzdHMgCitQQVNTIHNlbGZDYXN0cyAKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Nhc3RzLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvY2FzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWZlZjQyYmM4NjRjNzcw
YjMzMTJjMGI1Njk0MWNlMmRkZjZiNjBkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2Nhc3RzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KKzx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hs
c2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3
aGxzbFRlc3RzLmNhc3RzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAg
ICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIG9w
ZXJhdG9yIEJhcihGb28gZm9vKSB7CisgICAgICAgICAgICBCYXIgYjsKKyAgICAgICAgICAgIGIu
eSA9IGZvby54ICsgNzsKKyAgICAgICAgICAgIHJldHVybiBiOworICAgICAgICB9CisgICAgICAg
IGludCBiYXooaW50IHopIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28u
eCA9IHo7CisgICAgICAgICAgICBCYXIgYiA9IEJhcihmb28pOworICAgICAgICAgICAgcmV0dXJu
IGIueTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFttYWtlSW50KDYpXSksIDEzKTsKK30KKword2hsc2xU
ZXN0cy5zZWxmQ2FzdHMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAg
ICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAg
IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAg
Zm9vLnggPSAyMTsKKyAgICAgICAgICAgIEZvbyBiYXIgPSBGb28oZm9vKTsKKyAgICAgICAgICAg
IGJhci54ID0gNDI7CisgICAgICAgICAgICByZXR1cm4gZm9vLnggKyBiYXIueDsKKyAgICAgICAg
fQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdKSwgMjEgKyA0Mik7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9j
aGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NoZWNrZXItc2hvdWxkLXNldC10
eXBlLW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jaGVja2VyLXNob3VsZC1zZXQtdHlwZS1v
Zi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBA
QAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY2hlY2tlci1zaG91bGQt
c2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3Jp
dGUtdmFyaWFibGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM3OTliZjVhM2MwNGNiNTU5ZTA3N2ZiMzIw
ZmVlZGQzMzhiMDc2NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9jaGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMu
aHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDEsIDEsIDEp
XQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAg
ZmxvYXQ0IHZlYzsKKyAgICB2ZWNbMF0gKz0gNDIuMDsKKyAgICBidWZmZXJbdWludCh0aHJlYWRJ
RC54KV0gPSB2ZWNbMF07Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
KyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisK
KyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRp
bmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3Ig
PSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1
dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiAxOworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBj
b25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAg
IGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsK
KyAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFy
cmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51
bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1Qg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
YnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0
IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9
OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlv
dXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQor
ICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNC
dWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdy
b3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEs
IDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVy
ID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRz
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAg
IGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDQyKQorICAgICAgICB0ZXN0UGFzc2VkKCIi
KTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIu
dW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNl
KCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rp
b24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAg
ICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9
LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsK
K30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9jb21tZW50LXBhcnNpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljYjQw
OTFiZDgxMWJmNzVmZWQzNjJlZWY0MDUyMjc1YjZjZjdmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKKworUEFTUyBjb21tZW50UGFyc2luZyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2NvbW1lbnQtcGFyc2luZy5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2NvbW1lbnQtcGFyc2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzg1ZmFmYzY1YjU3
NTY1YjEzM2EyMmQ3NDVjNTk1MzM2M2FmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxz
bFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuY29tbWVudFBhcnNpbmcgPSBhc3luYyAoKSA9PiB7
CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIC8qIHRoaXMgY29tbWVudAorICAgICAgICBy
dW5zIG92ZXIgbXVsdGlwbGUgbGluZXMgKi8KKyAgICAgICAgYm9vbCBmb28oKSB7IHJldHVybiB0
cnVlOyB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgLyogdGhpcyBjb21tZW50CisgICAgICAgIHJ1bnMgb3ZlciBtdWx0aXBs
ZSBsaW5lcworICAgICAgICBib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7
Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jb21wdXRlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9jb21wdXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29tcHV0ZS5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
M2IwZTlhNGJiYmJlMTFiMzJlMmJlZjdjZWU1ZDE4ZDkyNGQwZDk0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUuaHRtbApAQCAtMCwwICsxLDkyIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNo
YWRlclNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1
dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhy
ZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQu
eCldID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOworfQorYDsKKworYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Cisg
ICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFn
ZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlv
dXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3Ig
PSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdl
LlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihi
dWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1
ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7Cisg
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10g
PSA4OworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3Qg
cmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIs
IHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihi
dWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3Qg
cmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsK
KyAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRz
QXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAg
ICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9h
dDMyQXJyYXlbMl0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgK
KyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNV0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZd
ID09IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJl
c3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5p
c2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZhNGJkY2Y0MzY2OGFj
ZDRhMGU3N2M0ZmYzNmU5MzkxMjBkZWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9jb3B5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBj
b3B5QXJyYXkgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jb3B5Lmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwYzE5
N2IyZDkxYWM2MGY2OTVhMjY2YWRjNzA3Y2ZlMjk0YmU1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS5odG1sCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+Q29weWluZy48L3RpdGxlPgorPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMg
PSB7fTsKKword2hsc2xUZXN0cy5jb3B5QXJyYXkgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBw
cm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50
WzEwXSB4czsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsr
KQorICAgICAgICAgICAgICAgIHhzW2ldID0gaW50KGkpICsgMTsKKyAgICAgICAgICAgIGludFsx
MF0geXMgPSB4czsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHhzLmxlbmd0aDsg
aSsrKQorICAgICAgICAgICAgICAgIHhzW2ldID0gMDsKKyAgICAgICAgICAgIGludCBzdW0gPSAw
OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgeXMubGVuZ3RoOyBpKyspCisgICAg
ICAgICAgICAgICAgc3VtID0gc3VtICsgeXNbaV07CisgICAgICAgICAgICByZXR1cm4gc3VtOwor
ICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10pLCA1NSk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOwor
PC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
ZGVyZWZlcmVuY2Utb3JkZXJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWM2MTdl
ZWY1ZmU0NzI0MjJlZDBhNGZiNWY4MjZkMDBhMjM4ZmNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDMgQEAKKworUEFTUyBjYWxsQXJndW1lbnRzQXJlQ29waWVkSW1tZWRpYXRlbHlB
ZnRlckV2YWx1YXRpb24gCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9k
ZXJlZmVyZW5jZS1vcmRlcmluZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVm
ZXJlbmNlLW9yZGVyaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM0YmFiZjY3MWE0MzcwNzcyYTMxMTJl
YTBiMDRjNDVhMjNkYjY3MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9kZXJlZmVyZW5jZS1vcmRlcmluZy5odG1sCkBAIC0wLDAgKzEsMzIgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+RGVyZWZlcmVuY2Ugb3JkZXJpbmcuPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3
aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuY2FsbEFyZ3VtZW50c0FyZUNvcGllZEltbWVk
aWF0ZWx5QWZ0ZXJFdmFsdWF0aW9uID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0g
YAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpiYXIo
NSkgKyAqYmFyKDcpOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSB2YWx1ZTsKKyAgICAgICAgICAg
IHJldHVybiAmeDsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMik7Cit9OworCitydW5UZXN0
cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2stZXhw
ZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kZXJlZmVyZW5jZS1wb2ludGVy
LXNob3VsZC10eXBlLWNoZWNrLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIx
ZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9kZXJlZmVyZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLWV4
cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZGVyZWZlcmVuY2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVj
ay5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLXBvaW50ZXItc2hv
dWxkLXR5cGUtY2hlY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmNlYzk2Y2NhZGZjOGZkYjk3NDhkYjVh
NGFlYzllM2E5Yjc5YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRtbApAQCAtMCwwICsx
LDEzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+
Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQg
cG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsK
K30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0
cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCBy
ZXN1bHQ7CisKKyAgICB0aHJlYWQgZmxvYXQqIHB0cjIgPSAmc2hhZGU7CisgICAgKnB0cjIgPSBz
aGFkZTsKKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFk
ZSA9ICpwdHIyOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZy
YWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsK
KyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3Qg
cHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6
YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNv
bnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xv
ckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNv
bnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7
c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29u
c3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZz
ZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFd
OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0
ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0
ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRH
cm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1p
dGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5j
aWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5
b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBl
bGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVy
MERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAq
IDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJ
VEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRl
eEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIg
PSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlC
dWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0
XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRv
ciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlw
dG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3Vy
Y2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIu
dW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1
ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAw
LCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRv
ciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5n
XX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3Jv
dXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgi
Z3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDog
ImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3
YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0g
c3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZp
ZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFj
aG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDog
bnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9
XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCBy
ZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJl
Z2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNl
dEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRl
eEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAg
IGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZp
Y2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNl
KCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91
bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1i
cmVhay1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxv
b3AtYnJlYWstZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY4NjlhOTc5NmYzNTg2NWIyOGM2
YjY1ZjhiMjAyZmI5ZmQyMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2RvLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdCbGFja1Nx
dWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGls
ZS1sb29wLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9v
cC1icmVhay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2MWNhNTVkMmQ4YjJkMzE2NzEyNWNjZjVhOWVjNjMy
MDI3ZjYzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8t
d2hpbGUtbG9vcC1icmVhay5odG1sCkBAIC0wLDAgKzEsMTQyIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAK
K3N0cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwor
ICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZl
cnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRy
dWU7CisgICAgZG8geworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9IHdoaWxlICgoc2hhZGUgPSAxLjAsIGZhbHNlKSk7CisKKyAgICByZXN1bHQu
cG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChz
aGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3Qg
YXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVy
MC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAw
LjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3
YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAg
Y29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVz
Y3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50
VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5j
cmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzog
MCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVu
dDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFy
Iiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
PSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3Qg
cmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVy
UGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4
ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGls
ZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRo
PSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVC
YWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1jb250
aW51ZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtY29udGlu
dWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45Nzg5NmU4MGVlOWE5N2E4ZGQwOTgyMTJjYmFmYjM4YWJhNDBh
ODhlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxl
LWxvb3AtY29udGludWUuaHRtbApAQCAtMCwwICsxLDE0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhl
aWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitz
dHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAg
ICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0
ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0
dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBib29sIGIgPSB0cnVl
OworICAgIHVpbnQgaSA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoYikgeworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2hhZGUgPSAwLjA7CisgICAgfSB3aGls
ZSAoKGkgPSBpICsgMSwgc2hhZGUgPSBzaGFkZSArIDAuMSwgaSA8IDEwKSk7CisKKyAgICByZXN1
bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0
NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChk
ZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
cik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9Owor
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Cisg
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlv
bigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWV4cGVjdGVk
Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2RvLXdoaWxlLWxvb3AuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDljNWM4MTBmYzk0Nzc4NDcwYmYx
ODFhMjJiMmMyN2ZjNWY0Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2RvLXdoaWxlLWxvb3AuaHRtbApAQCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2Ug
PSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlv
bjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91
dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBkbyB7Cisg
ICAgICAgIHNoYWRlID0gMS4wOworICAgIH0gd2hpbGUoZmFsc2UpOworCisgICAgcmVzdWx0LnBv
c2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hh
ZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNl
KSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3Rh
Z2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsK
KyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0
cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFj
ZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9y
bWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9
XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUg
PSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRl
ckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0
dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0g
e3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRz
ID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5w
dXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6
IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0
KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9
IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6
YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwg
c2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBG
bG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4
QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwor
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3Qg
YnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBj
b25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5k
aW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3Vw
TGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNv
bnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2Ny
aXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRl
eHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNy
ZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAs
IGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6
IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIs
IHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0g
e2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJl
bmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBh
c3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQ
aXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVm
ZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9
IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChb
Y29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kb250LWNyYXNoLXBhcnNpbmctZW51bS1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4
ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kb250LWNy
YXNoLXBhcnNpbmctZW51bS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jhc2gtcGFyc2lu
Zy1lbnVtLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG9udC1jcmFzaC1wYXJzaW5n
LWVudW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTNmMjQ1MDEyNmZmYzI0OTJiZDVlMWUxODgxMDZiMTI0
MWZkMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQt
Y3Jhc2gtcGFyc2luZy1lbnVtLmh0bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0g
YAorCitlbnVtIERvbnRDcmFzaCB7CisgICAgVmFsdWUKK30KKwordmVydGV4IGZsb2F0NCB2ZXJ0
ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBpIDogYXR0cmli
dXRlKDEpKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK2ZyYWdt
ZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikg
OiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorYDsKKworY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZl
cnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0cmlidXRlMSA9
IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQifTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlu
cHV0MSA9IHtzdHJpZGU6IDQsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTFdfTsKKyAgICBjb25z
dCBpbnB1dHMgPSBbaW5wdXQwLCBpbnB1dDFdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlm
b3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExh
eW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
cjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIp
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMUFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyMUFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQz
MkFycmF5WzBdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzJdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxv
YXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7CisKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJB
cnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5k
aW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250
ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2Ny
aXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENo
YWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0
VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFu
ZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTog
MX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4
dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDog
InN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRh
Y2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0Vu
Y29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0
b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2ZXJ0
ZXhCdWZmZXIxXSwgWzAsIDBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25z
LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4ZDUwYmY4
ZTQ1NDljMjkwNTJmNWVkMTBkMzI0YTI3ZDhhMDQxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kb3QtZXhwcmVzc2lvbnMuaHRtbApAQCAtMCwwICsxLDEzMyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25z
dCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwor
dmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7
CisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hh
ZGU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1
cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9u
IHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVy
dGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZl
VG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0
ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhh
QmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JT
dGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3
cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRo
U3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3Qg
YXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVy
MC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAx
LjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3
YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAg
Y29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVz
Y3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50
VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5j
cmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzog
MCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVu
dDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFy
Iiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
PSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3Qg
cmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVy
UGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1ub3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1ub3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzQz
MTg5ZWRmOGQ1ZTIzMGM1OGVjMjU4MDhhMDYzMzM5NmM4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG91YmxlLW5vdC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwzIEBACisKK1BBU1MgZG91YmxlTm90IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvZG91YmxlLW5vdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJs
ZS1ub3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTlmNWJkN2MzYzVjYWY1ZjEzOGIwNDFhMmQ2OWQ4ODRl
ZjQ4YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJs
ZS1ub3QuaHRtbApAQCAtMCwwICsxLDI3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1l
dGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgor
PHRpdGxlPkNvcHlpbmcuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuZG91
YmxlTm90ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgYm9v
bCBmb28oYm9vbCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISF4OworICAgICAg
ICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKV0pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSld
KSwgZmFsc2UpOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1z
aG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxp
Y2F0ZS1jdG9ycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5
Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9y
cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0
ZS1jdG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1z
aG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM0MjM4
ZDM3ZmVjODMzZmRjOWJiYWMzZTI2ZTMxYmU0NzJjMTM5MQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNl
LWR1cGxpY2F0ZS1jdG9ycy5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0
cnVjdCBYWVogeworICAgIGludCB4OworICAgIGludCB5OworICAgIGludCB6OworfQorCit0eXBl
ZGVmIFhZWjEgPSBYWVo7Cit0eXBlZGVmIFhZWjIgPSBYWVo7Cit0eXBlZGVmIFhZWjMgPSBYWVo7
CisKK1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2
aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9E
aXNwYXRjaFRocmVhZElEKSB7CisgICAgdGhyZWFkIGludCogeDsKKyAgICB0aHJlYWQgaW50KiB5
OworICAgIHRocmVhZCBmbG9hdCogZjE7CisgICAgdGhyZWFkIGZsb2F0KiBmMjsKKyAgICBYWVox
IGE7CisgICAgWFlaMiBiOworICAgIFhZWjMgYzsKKyAgICB0aHJlYWQgaW50W10gaW50QXJyYXlS
ZWYxOworICAgIHRocmVhZCBpbnRbXSBpbnRBcnJheVJlZjI7CisgICAgaWYgKCp4ID09ICp5ICYm
IHggPT0geSAmJiB4ID09IG51bGwgJiYgZjEgPT0gbnVsbCAmJiAqZjEgPT0gMCkgeworICAgICAg
ICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAy
LjA7CisgICAgfQorfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3Rh
Z2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsK
KworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3Qg
YnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAg
Y29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9hdDMy
QXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVmZmVy
RmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OworICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0g
NzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgpOwor
CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmlu
ZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1h
bmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAs
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAgIGNvbnN0IGNvbXB1dGVQ
YXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21w
dXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NF
bmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwor
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29u
c3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMo
KTsKKyAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1
bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNG
bG9hdDMyQXJyYXlbMl0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09
IDgKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJl
c3VsdHNGbG9hdDMyQXJyYXlbNV0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5
WzZdID09IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAg
IHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZp
Y2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1
bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBm
aW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZHVwbGljYXRlcy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZHVwbGljYXRlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODIwYTRlYjRiNmZiYzBjZDhlMjg3NTYyMzM1MTJmOTBkODRmN2M4MAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGVzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKKworUEFTUyBkdXBsaWNhdGVGdW5jdGlvbnMgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvZHVwbGljYXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZWQ5NmM1MWYwM2YwM2ZlN2Fj
NTJlYTg2YzU0NmRhOWFkM2IyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvZHVwbGljYXRlcy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29u
dGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgorPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVz
dHMgPSB7fTsKKword2hsc2xUZXN0cy5kdXBsaWNhdGVGdW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7
CisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgdm9pZCBmb28oKSB7IH0KKyAgICAgICAg
dm9pZCBmb28oKSB7IH0KKyAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAg
IHZvaWQgZm9vKGludCB4KSB7IH0KKyAgICAgICAgdHlwZWRlZiBBID0gaW50OworICAgICAgICB2
b2lkIGZvbyhBIHgpIHsgfQorICAgIGApOworCisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgaW50IGJhcigpIHsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgYmFyKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcigpOworICAg
ICAgICB9CisgICAgICAgIGludCBiYXooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YmFyKDMpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgMyk7CisKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgb3BlcmF0b3ImW10odGhyZWFkIGludFtdIGEsIHVp
bnQgYikgeworICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KKyAgICBgKTsKKworICAg
IGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKHRocmVhZCBp
bnRbXSBhKSB7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQorICAgIGApOworCisg
ICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnRb
XSBhLCB0aHJlYWQgaW50W10gYikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGJvb2wgb3BlcmF0
b3I9PSh0aHJlYWQgaW50KiBhLCB0aHJlYWQgaW50KiBiKSB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIGApOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8
L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9l
bnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhl
MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1w
cm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2Fu
dmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1
YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1w
cm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5OGMz
MTA1ODZiNmU3ZjI3NmRlYmRkZWFmMGNjOTViMWU4ZjJlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0y
Lmh0bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9j
YW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91
dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUg
OiBhdHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBmbG9hdCogcHRy
LCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAqcHRyID0gdmFsdWU7Cit9CisKK3RocmVhZCBm
bG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gJnZhbHVlOworfQorCit0
aHJlYWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJlYWxQdHIo
dmFsdWUpOworfQorCit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgeworICAg
IHJldHVybiBmaXJzdFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0KiBwdHJU
b1NoYWRlID0gZmlyc3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZTIg
PSBzZWNvbmRQdHIoMS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBmbG9hdCog
ZHVtbXlQdHIgPSAmZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hhZGUy
LCAwLjApOworICAgIHRocmVhZCBmbG9hdCogZHVtbXkyID0gcmVhbFB0cihzaGFkZSk7CisKKyAg
ICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKworICAgIHJlc3VsdC5zaGFkZSA9ICpwdHJU
b1NoYWRlMjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFn
bWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Cisg
ICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBm
dW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2Uu
Y3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsK
KyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHBy
aW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0
aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25z
dCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JC
bGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3No
YWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUx
ID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAg
IGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3Qg
aW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVm
ZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29u
c3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRl
eEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
N10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51
bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZP
Uk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBi
dWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25z
dCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVu
Y3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0
aW1lLTMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJv
cGVyLXZhcmlhYmxlLWxpZmV0aW1lLTMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2
NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy1l
eHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlm
ZXRpbWUtMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhOGEyOGY1OGNhMjJhMTZmZGJjNTQwMjk0OTQ2NmFi
MGI5M2U1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW5z
dXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0zLmh0bWwKQEAgLTAsMCArMSwxNjMgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hh
ZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDog
U1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0
IGFzc2lnblRvUHRyKHRocmVhZCBmbG9hdCogcHRyLCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVy
biAqcHRyID0gdmFsdWU7Cit9CisKK3RocmVhZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkK
K3sKKyAgICBmbG9hdCB2ID0gdmFsdWU7CisgICAgcmV0dXJuICZ2OworfQorCit0aHJlYWQgZmxv
YXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJlYWxQdHIodmFsdWUpOwor
fQorCit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiBm
aXJzdFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0
NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsK
KyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0KiBwdHJUb1NoYWRlID0g
Zmlyc3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZTIgPSBzZWNvbmRQ
dHIoMS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBmbG9hdCogZHVtbXlQdHIg
PSAmZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hhZGUyLCAwLjApOwor
ICAgIHRocmVhZCBmbG9hdCogZHVtbXkyID0gcmVhbFB0cihzaGFkZSk7CisKKyAgICByZXN1bHQu
cG9zaXRpb24gPSBwb3NpdGlvbjsKKworICAgIHJlc3VsdC5zaGFkZSA9ICpwdHJUb1NoYWRlMjsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJu
IGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25z
dCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRv
cG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUg
PSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3Rh
dGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3Jp
dGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0
aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRl
ckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0
dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0g
e3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRz
ID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5w
dXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6
IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0
KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9
IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6
YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwg
c2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBG
bG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4
QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwor
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3Qg
YnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBj
b25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5k
aW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3Vw
TGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNv
bnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2Ny
aXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRl
eHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNy
ZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAs
IGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6
IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIs
IHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0g
e2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJl
bmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBh
c3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQ
aXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVm
ZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9
IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChb
Y29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJs
ZS1saWZldGltZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNm
OWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sCkBA
IC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8
c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWE2YTJlZThiNDA3MzYzNjNiNGI2NzM0MzA1NzVhMTI0MzM5ZmQ5YgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxl
LWxpZmV0aW1lLmh0bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0
IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBm
bG9hdCogcHRyLCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAqcHRyID0gdmFsdWU7Cit9CisK
K3RocmVhZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gJnZhbHVl
OworfQorCit0aHJlYWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJu
IHJlYWxQdHIodmFsdWUpOworfQorCit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1
ZSkgeworICAgIHJldHVybiBmaXJzdFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQg
dmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUg
OiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZs
b2F0KiBwdHJUb1NoYWRlID0gZmlyc3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRy
VG9TaGFkZTIgPSBzZWNvbmRQdHIoMS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVh
ZCBmbG9hdCogZHVtbXlQdHIgPSAmZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0
clRvU2hhZGUyLCAwLjApOworICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZSwgc2hh
ZGUpOworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisKKyAgICByZXN1bHQuc2hh
ZGUgPSAqcHRyVG9TaGFkZTI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBm
bG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFy
Z2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30K
K2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
KworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmli
dXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3Qg
YXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6
IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwor
ICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9
OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1
bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91
cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBh
d2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZm
ZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9
IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VC
dWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5t
YXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZl
ciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCBy
ZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9
IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07
CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1
Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJn
cmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBD
aGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dh
cENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcg
PSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0
IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1l
bnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVs
bCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5k
ZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
UmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJp
bmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9
KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW51bS1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnVtLXNwZWMtdGVzdHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkMjQ2NGU5OTc3ZGY2NTA4YzI4NmQ3MDg4Y2Q5ODRlMDk2
MjhkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW51bS1z
cGVjLXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyBlbnVtRHVwbGlj
YXRlcyAKK1BBU1MgZGVmYXVsdEVudW1Db25zdHJ1Y3RvciAKK1BBU1MgZW51bUFycmF5UmVmQmFz
ZSAKK1BBU1MgZW51bUZsb2F0QmFzZSAKK1BBU1MgZW51bVB0ckJhc2UgCitQQVNTIGVudW1TdHJ1
Y3RCYXNlIAorUEFTUyBlbnVtTm9NZW1iZXJzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvZW51bS1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvZW51bS1zcGVjLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU2YWI5YmQwNTEzMjBiYTMwZDNl
YTNhZDE0MTBlYTJhNmMzYWY1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9lbnVtLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQi
IGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3Rp
dGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Nv
bnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5lbnVtRHVwbGljYXRlcyA9IGFzeW5j
ICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICAgICAgZW51bSBGb28gewor
ICAgICAgICAgICAgICAgIFdhciA9IDQyLAorICAgICAgICAgICAgICAgIEZhbWluZSA9IDAsCisg
ICAgICAgICAgICAgICAgUGVzdGlsZW5jZSA9IDIzLAorICAgICAgICAgICAgICAgIERlYXRoID0g
NDIKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9OworCit3aGxzbFRlc3RzLmRlZmF1bHRF
bnVtQ29uc3RydWN0b3IgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgZW51bSBXZWVrZGF5IHsKKyAgICAgICAgICAgIE1vbmRheSwKKyAgICAgICAgICAgIFR1
ZXNkYXksCisgICAgICAgICAgICBXZWRuZXNkYXksCisgICAgICAgICAgICBUaHVyc2RheSwKKyAg
ICAgICAgICAgIFBpenphZGF5CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFdlZWtkYXkgeCA9IFdlZWtkYXkoKTsKKyAgICAgICAgICAgIHJldHVy
biA0MjsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLmVu
dW1BcnJheVJlZkJhc2UgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBlbnVtIEZvbyA6IHRocmVhZCBpbnRbXSB7CisgICAgICAgICAg
ICAgICAgQmFyCisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLmVu
dW1GbG9hdEJhc2UgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBlbnVtIEZvbyA6IGZsb2F0IHsKKyAgICAgICAgICAgICAgICBCYXIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuZW51bVB0ckJhc2Ug
PSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAg
ICAgICBlbnVtIEZvbyA6IHRocmVhZCBpbnQqIHsKKyAgICAgICAgICAgICAgICBCYXIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuZW51bVN0cnVjdEJhc2UgPSBh
c3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBzdHJ1Y3QgVGhpbmd5IHsgfQorICAgICAgICAgICAgZW51bSBGb28gOiBUaGluZ3kgeworICAg
ICAgICAgICAgICAgIEJhcgorICAgICAgICAgICAgfQorICAgICAgICBgKTsKK307CisKK3dobHNs
VGVzdHMuZW51bU5vTWVtYmVycyA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGVudW0gRm9vIHsgfQorICAgICAgICBgKTsKK307CisK
K3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZXF1YWxpdHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2VxdWFsaXR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzM4NDc4
M2Y0ODUxMGYzNTNjMTUzMjc0NTQ3ZTVhN2U5ZGUwNmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2VxdWFsaXR5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEx
IEBACisKK1BBU1MgZXF1YWxpdHkgCitQQVNTIG5vdEVxdWFsaXR5IAorUEFTUyBlcXVhbGl0eVR5
cGVGYWlsdXJlIAorUEFTUyBlcXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBlcXVhbHNX
cm9uZ1JldHVyblR5cGUgCitQQVNTIGxlc3NFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggCitQQVNT
IGxlc3NFcXVhbFdyb25nUmV0dXJuVHlwZSAKK1BBU1MgbGVzc1RoYW5Xcm9uZ0FyZ3VtZW50TGVu
Z3RoIAorUEFTUyBsZXNzVGhhbldyb25nUmV0dXJuVHlwZSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2VxdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvZXF1YWxpdHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjdmYTczOTkzNTIzZWU2MjQxYWFlN2FmNGVh
YzU3ZWRkNTYwMzhkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2VxdWFsaXR5Lmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0
IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0
cyA9IHt9OworCit3aGxzbFRlc3RzLmVxdWFsaXR5ID0gYXN5bmMgKCkgPT4geworICAgIGxldCBw
cm9ncmFtID0gImJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ID09IHk7IH0iOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1ha2VV
aW50KDcpXSksIHRydWUpOworICAgIHByb2dyYW0gPSAiYm9vbCBmb28oaW50IHgsIGludCB5KSB7
IHJldHVybiB4ID09IHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgZmFsc2UpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNyksIG1ha2VJbnQoNyldKSwgdHJ1ZSk7CisgICAgcHJvZ3JhbSA9ICJib29sIGZv
byhib29sIHgsIGJvb2wgeSkgeyByZXR1cm4geCA9PSB5OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSks
IG1ha2VCb29sKHRydWUpXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2woZmFs
c2UpXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pLCB0cnVl
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2wodHJ1ZSldKSwgdHJ1ZSk7Cit9CisKK3dobHNs
VGVzdHMubm90RXF1YWxpdHkgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAiYm9v
bCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggIT0geTsgfSI7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyks
IG1ha2VVaW50KDUpXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg3KV0pLCBmYWxz
ZSk7CisgICAgcHJvZ3JhbSA9ICJib29sIGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggIT0g
eTsgfSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBt
YWtlSW50KDcpXSksIGZhbHNlKTsKKyAgICBwcm9ncmFtID0gImJvb2wgZm9vKGJvb2wgeCwgYm9v
bCB5KSB7IHJldHVybiB4ICE9IHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2wodHJ1
ZSldKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKGZhbHNlKV0pLCB0cnVlKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wo
dHJ1ZSksIG1ha2VCb29sKHRydWUpXSksIGZhbHNlKTsKK307CisKK3dobHNsVGVzdHMuZXF1YWxp
dHlUeXBlRmFpbHVyZSA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoImJvb2wg
Zm9vKGludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOworfTsKKword2hsc2xUZXN0
cy5lcXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAg
YAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGludCkgeyByZXR1cm4gdHJ1ZTsgfQorICAg
ICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAg
YCk7Cit9OworCit3aGxzbFRlc3RzLmVxdWFsc1dyb25nUmV0dXJuVHlwZSA9IGFzeW5jICgpID0+
IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBG
b28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3I9PShGb28sIEZvbykgeyByZXR1cm4gNDI7
IH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMubGVzc0VxdWFsV3JvbmdBcmd1bWVudExl
bmd0aCA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I8PSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7
CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yPD0oaW50KSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hl
Y2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPD0oaW50LCBpbnQs
IGludCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5sZXNz
RXF1YWxXcm9uZ1JldHVyblR5cGUgPSBhc3luYyAoKSA9PiB7CisgICAgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJh
dG9yPD0oRm9vLCBGb28pIHsgcmV0dXJuIDQyOyB9CisgICAgICAgIGApOworfQorCit3aGxzbFRl
c3RzLmxlc3NUaGFuV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+IHsKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8KCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8KGludCkgeyByZXR1cm4gdHJ1ZTsgfQorICAg
ICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3I8KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7
Cit9CisKK3dobHNsVGVzdHMubGVzc1RoYW5Xcm9uZ1JldHVyblR5cGUgPSBhc3luYyAoKSA9PiB7
CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9v
IHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yPChGb28sIEZvbykgeyByZXR1cm4gNDI7IH0K
KyAgICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNh
MjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRo
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NGVkYTMwZjY0YjZlODRkZDMwYzBlZDhjN2ZlOTE0YTUzYTRj
ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zsb2F0LW1h
dGgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGZsb2F0TWF0aCAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGguaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2MGEzYzNl
YTMzNzYxYzMwYzIwMDI0OGI4ODMzOWY0ZWU4YjAxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0
bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29u
c3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmZsb2F0TWF0aCA9IGFzeW5jICgpID0+
IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgYm9vbCBmb28oKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gNDIuNSA9PSA0Mi41OworICAgICAgICB9CisgICAgICAgIGZsb2F0
IGJhcihmbG9hdCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAg
fQorICAgICAgICBmbG9hdCBmb282KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJh
cig3LjUpOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvbzkoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmxvYXQoNy41KTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28x
MigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdCg3KTsKKyAgICAgICAgfQor
ICAgICAgICBmbG9hdCBmb28xMygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHggPSA3
LjU7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQoeCk7CisgICAgICAgIH0KKyAgICBgOworCisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9vIiwg
W10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHBy
b2dyYW0sICJmb282IiwgW10pLCA3LjUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZs
b2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzkiLCBbXSksIDcuNSk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTIiLCBbXSksIDcpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEzIiwg
W10pLCA3LjUpOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBpbnQgYmFyKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB4
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYmFyKDQuMCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgYmFyKGludCB4
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YmFyKDQuMGYpOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdWludCBiYXIodWludCB4KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFyKDQuMCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICB1aW50IGJhcih1aW50IHgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZm9vKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXIoNC4wZik7CisgICAgICAgICAgICB9
CisgICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0ZXIt
dHlwZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZ2V0dGVyLXNldHRl
ci10eXBlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzU3ZWM3YjdhOTA0ZTEwZDJlNDFiYjM2
YWZmNTY2Y2E4MzAxYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2dldHRlci1zZXR0ZXItdHlwZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BB
U1MgZ2V0dGVyVHlwZSAKK1BBU1Mgc2V0dGVyVHlwZSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0ZXItdHlwZS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2dldHRlci1zZXR0ZXItdHlwZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMWYwNDE2MjQy
NDY5YzEzODEzOTBmYTQ4Nzk4Y2Y5M2Y4NmY3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvZ2V0dGVyLXNldHRlci10eXBlLmh0bWwKQEAgLTAsMCArMSwxMDMg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48L3RpdGxl
PgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0
IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5nZXR0ZXJUeXBlID0gYXN5bmMgKCkgPT4g
eworICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGludCBvcGVyYXRvci54KHRocmVhZCBp
bnRbXSBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb29bMF07CisgICAgICAg
IH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgaW50IG9wZXJhdG9y
LngoaW50WzNdIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvb1swXTsKKyAg
ICAgICAgfQorICAgIGApOyAKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgb3Bl
cmF0b3JbXSh0aHJlYWQgaW50W10gZm9vLCBpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmb29baW5kZXhdOworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNo
ZWNrRmFpbChgCisgICAgICAgIGludCBvcGVyYXRvci54KGludFszXSBmb28pCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmb29bMF07CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdh
aXQgY2hlY2tGYWlsKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsK
KyAgICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0b3JbXShGb28gZm9vLCB1aW50NCBpbmRleCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvb1tpbmRleC54XTsKKyAgICAgICAgfQor
ICAgIGApOyAKK307CisKK3dobHNsVGVzdHMuc2V0dGVyVHlwZSA9IGFzeW5jICgpID0+IHsKKyAg
ICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICB0aHJlYWQgaW50W10gb3BlcmF0b3IueD0odGhy
ZWFkIGludFtdIGZvbywgdWludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9v
OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGlu
dFszXSBvcGVyYXRvci54PShpbnRbM10gZm9vLCB1aW50IHgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWls
KGAKKyAgICAgICAgdGhyZWFkIGludFtdIG9wZXJhdG9yW109KHRocmVhZCBpbnRbXSBmb28sIHVp
bnQgeCwgdWludCB5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAg
ICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGludFszXSBvcGVy
YXRvci54PShpbnRbM10gZm9vLCB1aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmb287CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAg
ICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBG
b28gb3BlcmF0b3JbXT0oRm9vIGZvbywgZmxvYXQ0IHksIHVpbnQgeikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNo
ZWNrRmFpbChgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvci55PShG
b28gZm9vLCBpbnQ0IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyByZXN1bHQ7CisgICAg
ICAgICAgICBmb28ueCA9IHgueDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICBgKTsgCit9OworCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9o
dG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaHVnZS1hcnJheS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaHVnZS1hcnJheS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJk
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9odWdlLWFycmF5
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2h1Z2UtYXJyYXkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9o
dWdlLWFycmF5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA4YTJmZjIyZWJhNTVlZjY2ZTc0YjI5ZjRlMjNh
OTlmMDJhYjkzMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9o
dWdlLWFycmF5Lmh0bWwKQEAgLTAsMCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordm9pZCBmaWxs
KHRocmVhZCBmbG9hdFtdIGFycmF5LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0g
MDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGFycmF5W2ldID0gdmFsdWU7Cisg
ICAgfQorfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hh
ZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6
IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBmbG9hdFsxMDAwXSBhcnJheTsKKyAgICBpZiAo
YXJyYXkubGVuZ3RoICE9IDEwMDApCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVpbnQgaSA9
IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcnJheVswXSA9IDAuMTMzNzsKKyAg
ICBpZiAoYXJyYXlbMF0gIT0gMC4xMzM3KQorICAgICAgICByZXR1cm47CisKKyAgICB0aHJlYWQg
ZmxvYXRbXSBhcnJheVB0ciA9IEBhcnJheTsKKyAgICBpZiAoYXJyYXlQdHIubGVuZ3RoICE9IDEw
MDApCisgICAgICAgIHJldHVybjsKKworICAgIGZpbGwoYXJyYXlQdHIsIDAuMTAxMCk7CisgICAg
Zm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYg
KGFycmF5UHRyW2ldICE9IDAuMTAxMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KGFycmF5W2ldICE9IDAuMTAxMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
aWxsKEBhcnJheSwgMC4wMTAxKTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5n
dGg7ICsraSkgeworICAgICAgICBpZiAoYXJyYXlQdHJbaV0gIT0gMC4wMTAxKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMC4wMTAxKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3Np
emUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVy
RGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQz
MkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAw
OworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Cisg
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZm
ZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBh
c3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRz
QnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNp
Y0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVu
KGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
IH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvaWYtc3RhdGVtZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTM4
M2U3ZmFkNDZmZTM1N2QxOWUxMTBhZDU2Y2Q4NDUyMWE2YmEwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw2IEBACisKK1BBU1MgaWZTdGF0ZW1lbnQgCitQQVNTIGlmRWxzZVN0YXRlbWVudCAKK1BB
U1MgaWZFbHNlSWZTdGF0ZW1lbnQgCitQQVNTIGlmRWxzZUlmRWxzZVN0YXRlbWVudCAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MjY0
OGNkNWRjMTNhMzAyMzVhYTJkZDk1ZGM1YmM5Zjg1NjFmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaWYtc3RhdGVtZW50Lmh0bWwKQEAgLTAsMCArMSwxMDcg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBpbnQgYml0IG1hdGgu
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuaWZTdGF0ZW1lbnQgPSBhc3lu
YyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgeSA9IDY7CisgICAgICAgICAgICBpZiAoeCA9PSA3
KSB7CisgICAgICAgICAgICAgICAgeSA9IDg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4geTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDMpXSksIDYpOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0
KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQoNSldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDYpXSksIDYpOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3
KV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQoOCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDYpOworfQorCit3aGxz
bFRlc3RzLmlmRWxzZVN0YXRlbWVudCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5
ID0gNjsKKyAgICAgICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICB5ID0gODsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeSA9IDk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDMp
XSksIDkpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCg0KV0pLCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSldKSwgOSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDYp
XSksIDkpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCldKSwgOSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkp
XSksIDkpOworfQorCit3aGxzbFRlc3RzLmlmRWxzZUlmU3RhdGVtZW50ID0gYXN5bmMgKCkgPT4K
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgaWYgKHggPT0gNykgeworICAg
ICAgICAgICAgICAgIHkgPSA4OworICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDgpIHsKKyAg
ICAgICAgICAgICAgICB5ID0gOTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5
OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSksIDYp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCg1KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNildKSwgNik7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCg4KV0pLCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOSldKSwgNik7Cit9CisKK3dobHNsVGVzdHMu
aWZFbHNlSWZFbHNlU3RhdGVtZW50ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHkg
PSA2OworICAgICAgICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAgICAgIHkgPSA4Owor
ICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDgpIHsKKyAgICAgICAgICAgICAgICB5ID0gOTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeSA9IDEwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgz
KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDQpXSksIDEwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSldKSwgMTApOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCg2KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoOSldKSwgMTApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNy
ZW1lbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1k
ZWNyZW1lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyOGU1MGU3MTQ3NTBiNmNlYWM3NjIy
MmYwNWNlYmE2MmQxYTUwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvaW5jcmVtZW50LWRlY3JlbWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisK
K1BBU1MgaW5jcmVtZW50QW5kRGVjcmVtZW50IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvaW5jcmVtZW50LWRlY3JlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjY2NTlhNzNmZGQ3
NzhmOWQxY2E2ZGY4YTliMjkyYWQyODQ1MWVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQuaHRtbApAQCAtMCwwICsxLDM3IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5h
bWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPkNvcHlpbmcuPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxz
bFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuaW5jcmVtZW50QW5kRGVjcmVtZW50ID0gYXN5bmMg
KCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vMSgpIHsgaW50IHgg
PSAwOyByZXR1cm4geCsrOyB9CisgICAgICAgIGludCBmb28yKCkgeyBpbnQgeCA9IDA7IHgrKzsg
cmV0dXJuIHg7IH0KKyAgICAgICAgaW50IGZvbzMoKSB7IGludCB4ID0gMDsgcmV0dXJuICsreDsg
fQorICAgICAgICBpbnQgZm9vNCgpIHsgaW50IHggPSAwOyArK3g7IHJldHVybiB4OyB9CisgICAg
ICAgIGludCBmb281KCkgeyBpbnQgeCA9IDA7IHJldHVybiB4LS07IH0KKyAgICAgICAgaW50IGZv
bzYoKSB7IGludCB4ID0gMDsgeC0tOyByZXR1cm4geDsgfQorICAgICAgICBpbnQgZm9vNygpIHsg
aW50IHggPSAwOyByZXR1cm4gLS14OyB9CisgICAgICAgIGludCBmb284KCkgeyBpbnQgeCA9IDA7
IC0teDsgcmV0dXJuIHg7IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28xIiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgMSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIDEpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280Iiwg
W10pLCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vNSIsIFtdKSwgMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzYiLCBbXSksIC0xKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFtdKSwgLTEpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284IiwgW10pLCAtMSk7Cit9Owor
CitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5kZXgtYW5kZXItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LWFuZGVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NmNiNDk0NGVjYjgzNTljYzU0N2QyOWIxNTJiYjIxMTAwNzFmMzZmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LWFuZGVyLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDQgQEAKKworUEFTUyBpbmRleEFuZGVyV2l0aE5vdGhpbmdXcm9uZyAKK1BBU1Mg
aW5kZXhBbmRlcldpdGhXcm9uZ051bWJlck9mQXJndW1lbnRzIAorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvaW5kZXgtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9pbmRleC1hbmRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNzI4NzhiYWYxYTQ1YWQ0Mjcy
NWY2NTJmNjRhNTZiYTk0YmEwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvaW5kZXgtYW5kZXIuaHRtbApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9
ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7
fTsKKword2hsc2xUZXN0cy5pbmRleEFuZGVyV2l0aE5vdGhpbmdXcm9uZyA9IGFzeW5jICgpID0+
Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAg
ICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10odGhy
ZWFkIEZvbyogZm9vLCB1aW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJmZvby0+
eDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Rm9vIHg7CisgICAgICAgICAgICB4LnggPSAxMzsKKyAgICAgICAgICAgIHJldHVybiB4WzY2Nl07
CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDEzKTsKK30KKword2hsc2xUZXN0cy5pbmRleEFuZGVy
V2l0aFdyb25nTnVtYmVyT2ZBcmd1bWVudHMgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10o
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAg
IHJldHVybiAmeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAg
ICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJlYWQgaW50
KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAg
ICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBG
b28geworICAgICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhyZWFkIGludCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZm9vLCB1aW50LCB1aW50KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT54OworICAgICAgICAgICAg
fQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXIt
c2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0
ZXItc2V0dGVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWJiZmYxMTM0MzljMzEwZmI3NDZh
YTUyZjQ5NDhmMjBmNmY3YzU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2luZGV4LWdldHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAor
CitQQVNTIHBvaW50ZXJJbmRleEdldHRlciAKK1BBU1MgcG9pbnRlckdldHRlciAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LWdldHRlci1zZXR0ZXIuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGEwNzlmYTU3ZDE4NWM1YWRmMjY4Y2U1ZDJkY2ZmYjE0NGJlMzJmZAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0
bWwKQEAgLTAsMCArMSw4MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5U
ZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxz
bC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3do
bHNsVGVzdHMucG9pbnRlckluZGV4R2V0dGVyID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oZGV2aWNlIGlu
dCosIHVpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdKHRocmVhZCBpbnQqLCB1aW50KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAg
ICAgIGApOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBp
bnQgb3BlcmF0b3JbXSh0aHJlYWRncm91cCBpbnQqLCB1aW50KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3Jb
XShjb25zdGFudCBpbnQqLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLnBv
aW50ZXJHZXR0ZXIgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vKGRldmljZSBpbnQqKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAg
IGApOworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9w
ZXJhdG9yLmZvbyh0aHJlYWQgaW50KikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gNTQzOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0Zh
aWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28odGhyZWFkZ3JvdXAg
aW50KikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAg
ICAgICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAg
ICAgICAgICAgIGludCBvcGVyYXRvci5mb28oY29uc3RhbnQgaW50KikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAgICAgfQorICAgICAgICBgKTsK
K30KKworCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXItZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXItZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzNjM5ZDA1YTZiMzQyZjhmZWNhNDdmODE1NDMyNDg2N2Yx
MGVlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5kZXgt
c2V0dGVyLWdldHRlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3IEBACisKK1BBU1MgaW5kZXhT
ZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZCAKK1BBU1MgaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJP
dmVybG9hZEZpeGVkIAorUEFTUyBub3RMb25lSW5kZXhTZXR0ZXIgCitQQVNTIGxvbmVJbmRleFNl
dHRlciAKK1BBU1MgbG9uZUluZGV4U2V0dGVyUG9pbnRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXIuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhMTVh
YTc0NjRjN2E3ZTI2MjE4YWY2MWUyNzhhN2I1Y2RhYmUwOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwKQEAgLTAsMCAr
MSwxMDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04Pgor
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBzdHJ1Y3Rz
LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmluZGV4U2V0dGVyV2l0aE5v
R2V0dGVyT3ZlcmxvYWQgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAg
ICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIHN0cnVjdCBC
YXIgeyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXShGb28sIHVpbnQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDUzNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEJhciBvcGVyYXRvcltdPShCYXIsIHVpbnQsIGludCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQmFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAg
ICAgICAKK307CisKK3dobHNsVGVzdHMuaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZp
eGVkID0gYXN5bmMgKCkgPT4KK3sKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICBzdHJ1
Y3QgQmFyIHsgfQorICAgICAgICBpbnQgb3BlcmF0b3JbXShCYXIsIHVpbnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiA1MzQ7CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9y
W109KEJhciwgdWludCwgaW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQmFyKCk7
CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpIHsgcmV0dXJuIEJhcigpWzBdOyB9CisgICAg
ICAgIGludCBiYXIoKSB7CisgICAgICAgICAgICBCYXIgYjsKKyAgICAgICAgICAgIGJbMF0gPSA0
MDA7CisgICAgICAgICAgICByZXR1cm4gYlswXTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTM0
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFy
IiwgW10pLCA1MzQpOworfTsKKword2hsc2xUZXN0cy5ub3RMb25lSW5kZXhTZXR0ZXIgPSBhc3lu
YyAoKSA9PgoreworICAgIGNvbnN0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBvcGVyYXRvcltd
KGludCwgdWludCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDY1OworICAgICAgICB9
CisgICAgICAgIGludCBvcGVyYXRvcltdPShpbnQsIHVpbnQsIGludCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIDU0MzsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkgeworICAg
ICAgICAgICAgaW50IHg7CisgICAgICAgICAgICByZXR1cm4geFswXTsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgYmFyKCkgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB4WzBdID0g
NDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNjUpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBb
XSksIDU0Myk7Cit9OworCit3aGxzbFRlc3RzLmxvbmVJbmRleFNldHRlciA9IGFzeW5jICgpID0+
Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3Bl
cmF0b3JbXT0oaW50LCB1aW50LCBpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDU0MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfTsKKwor
d2hsc2xUZXN0cy5sb25lSW5kZXhTZXR0ZXJQb2ludGVyID0gYXN5bmMgKCkgPT4KK3sKKyAgICBh
d2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJh
dG9yW109KHRocmVhZCBpbnQqIHB0ciwgdWludCwgaW50KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAg
ICAKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW50LWJpdC1tYXRoLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM3MWI2YzUzZTFkY2MwY2RiNTdmNjU2ZmMyNjVkYjlmMjAxMjVmZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW50LWJpdC1tYXRoLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyBpbnRCaXRBbmQgCitQQVNTIGludEJpdE9y
IAorUEFTUyBpbnRCaXRYb3IgCitQQVNTIGludEJpdE5vdCAKK1BBU1MgaW50TFNoaWZ0IAorUEFT
UyBpbnRSU2hpZnQgCitQQVNTIGludFNpbXBsZU1hdGggCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9pbnQtYml0LW1hdGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9pbnQtYml0LW1hdGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTdhZjRkODhlNzgzYWJkZjY0NWIy
ODFkMTgyNGEzZjg5MzRkZGZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2ludC1iaXQtbWF0aC5odG1sCkBAIC0wLDAgKzEsMTEwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgaW50IGJpdCBtYXRoLjwvdGl0bGU+Cis8c2NyaXB0
IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0
cyA9IHt9OworCit3aGxzbFRlc3RzLmludEJpdEFuZCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0
IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKSwg
bWFrZUludCg3KV0pLCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUpLCBtYWtlSW50KDQyKV0pLCA0Mik7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KC0xKSwgbWFrZUludCgtNyldKSwgLTcpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKSwgbWFrZUludCg4NTcz
MildKSwgMCk7Cit9CisKK3dobHNsVGVzdHMuaW50Qml0T3IgPSBhc3luYyAoKSA9PgoreworICAg
IGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCBhLCBpbnQgYikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGEgfCBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQo
MSksIG1ha2VJbnQoNyldKSwgNyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFrZUludCg0MildKSwgNjU1
MzUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZUludCgtMSksIG1ha2VJbnQoLTcpXSksIC0xKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1ha2VJ
bnQoODU3MzIpXSksIDg1NzMyKTsKK30KKword2hsc2xUZXN0cy5pbnRCaXRYb3IgPSBhc3luYyAo
KSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCBhLCBpbnQg
YikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9CisgICAg
YDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoMSksIG1ha2VJbnQoNyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFrZUlu
dCg0MildKSwgNjU0OTMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCgtMSksIG1ha2VJbnQoLTcpXSksIDYpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCgwKSwgbWFrZUludCg4NTczMildKSwgODU3MzIpOworfQorCit3aGxzbFRlc3RzLmludEJpdE5v
dCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28o
aW50IGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB+YTsKKyAgICAgICAgfQorICAg
IGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KDEpXSksIC0yKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUpXSksIC02NTUzNik7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KC0xKV0pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCldKSwgLTEpOworfQorCit3aGxzbFRlc3RzLmludExT
aGlmdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBm
b28oaW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsK
KyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlVWludCg3KV0pLCAxMjgpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg2NTUzNSksIG1ha2VVaW50KDIpXSksIDI2MjE0MCk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZVVp
bnQoNSldKSwgLTMyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1ha2VVaW50KDMpXSksIDApOworfQorCit3aGxz
bFRlc3RzLmludFJTaGlmdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisg
ICAgICAgIGludCBmb28oaW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGEgPj4gYjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlVWludCg3KV0p
LCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAxNjM4Myk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0x
KSwgbWFrZVVpbnQoNSldKSwgLTEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKSwgbWFrZVVpbnQoMyldKSwgMCk7Cit9
CisKK3dobHNsVGVzdHMuaW50U2ltcGxlTWF0aCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJv
Z3JhbSA9ICJpbnQgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCArIHk7IH0iOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCg3KSwgbWFrZUludCg1KV0pLCAxMik7CisgICAgcHJvZ3JhbSA9ICJpbnQgZm9vKGludCB4LCBp
bnQgeSkgeyByZXR1cm4geCAtIHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCAyKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNSksIG1ha2VJbnQoNyldKSwgLTIpOworICAgIHByb2dyYW0gPSAiaW50IGZvbyhp
bnQgeCwgaW50IHkpIHsgcmV0dXJuIHggKiB5OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSld
KSwgMzUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCg3KSwgbWFrZUludCgtNSldKSwgLTM1KTsKK30KKworcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9pbnQtbGl0ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9pbnQtbGl0ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYmRhZDY1OTNiNjEyN2E2MmYyZTc0YzE4MDRiOTJmMmQzMDkxY2I5Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHR3b0ludExpdGVyYWxzIAorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW50LWxpdGVyYWwtY29tcGFyZS5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZGY0MmU4MmViN2E5YTZiYmRkODYwMzI0OTBkNTdmYTdlZTFjOTI3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUu
aHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hh
cnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxl
PlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMg
PSB7fTsKKword2hsc2xUZXN0cy50d29JbnRMaXRlcmFscyA9IGFzeW5jICgpID0+IHsKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgYm9vbCBmb28oKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gNDIgPT0gNDI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCB0cnVlKTsKK30KKwor
cnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMzk4MTQwNTMzZDQ1Y2U0NTQzNjFkNTY2NWI4NzQ3YTI0MDUwMDNhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvZ2ljYWwtbmVnYXRpb24tZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGxvZ2ljYWxOZWdhdGlvbiAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvZ2ljYWwtbmVnYXRpb24uaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzIyMTQ1ZmU1ZDBlODBhZTlhNDQwZDNkZWJkODc3YjcwMTgzNjY4NQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWwKQEAg
LTAsMCArMSwyMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRm
LTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5MdmFsdWVz
LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmxvZ2ljYWxOZWdhdGlvbiA9
IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSAiYm9vbCBmb28oYm9vbCB4KSB7IHJl
dHVybiAheDsgfSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSldKSwgZmFsc2UpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNl
KV0pLCB0cnVlKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1icmVhay1leHBl
Y3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLWJyZWFrLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2JmODY5YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJl
NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1icmVh
ay1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOworZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvbG9vcHMtYnJlYWsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODIzODJkYWMwZTE5MGEy
YTI0OGM1NzNiNjRkMWQ1OGY2NTBmYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2xvb3BzLWJyZWFrLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291
cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0
ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQg
c2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgKGkgPSBpICsgMSwgc2hh
ZGUgPSBzaGFkZSArIDEuMCkpIHsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHNoYWRlID0gc2hhZGUgKyAxLjA7CisgICAgfQorCisgICAg
cmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBm
bG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlv
bjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUx
ID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAg
IGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3Qg
aW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVm
ZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29u
c3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRl
eEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
N10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51
bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZP
Uk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBi
dWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25z
dCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVu
Y3Rpb24oKSB7CisgICAgZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2JmODY5YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1jb250aW51ZS1l
eHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLWNvbnRpbnVlLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvbG9vcHMtY29udGludWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2I0ZTkwMThlM2Fk
M2U0NDFiZjMzMjJiNWI5NDNlNmY2MWE4YWFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2xvb3BzLWNvbnRpbnVlLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hh
ZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDog
U1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRl
eCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwg
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisg
ICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9IGkgKyAx
KSB7CisgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBzaGFkZSA9IHNoYWRlICsgMS4wOworICAgIH0KKworICAgIHJlc3VsdC5wb3NpdGlv
biA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBz
aGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewor
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAg
Y29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5n
bGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJj
dyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBj
b25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDog
InJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8v
IEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVs
bDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDog
ImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2Nh
dGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1
dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtp
bnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2Jp
bmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5k
R3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdy
aXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKKwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTldID0gMC4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAx
LCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRw
dXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9y
ZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xv
ckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVz
Y3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxp
bmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBd
LCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsK
KyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAg
IGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
K30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvbG9vcHMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9sb29wcy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNm
OWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbG9vcHMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmQyODA1Y2I2MDgyNjNkYzkxOWVhMTM2NDcwMWM0N2Jh
NDMxYTAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3Bz
LXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIGRvV2hpbGUg
CitQQVNTIHNpbXBsZVdoaWxlIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvbG9vcHMtc3BlYy10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3Bz
LXNwZWMtdGVzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOGE5ODRkNTEyMDM0YWE4MTY2MzcwMjJhNTUz
NzE0YzFiYTVkNDQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2xvb3BzLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgbG9vcHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisK
K3dobHNsVGVzdHMuZG9XaGlsZSA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBg
CisgICAgICAgIGludCBmb28xKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeSA9
IDc7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgeSA9IDg7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IHdoaWxlICh4IDwgMTApOworICAgICAgICAgICAg
cmV0dXJuIHk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzIoaW50IHgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGludCB5ID0gNzsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg
ICB5ID0gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gd2hpbGUgKHkg
PT0gNyk7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9v
MyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAg
ICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gMTEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgeCA9IDE1OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgeDsKKyAgICAgICAgICAgICAgICB4ID0g
eCArIDE7CisgICAgICAgICAgICB9IHdoaWxlICh4IDwgMTMpOworICAgICAgICAgICAgcmV0dXJu
IHN1bTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFrZUludCgxKV0pLCA4KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtlSW50KDEx
KV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vMiIsIFttYWtlSW50KDEpXSksIDgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoOSldKSwgMTkpOworfQorCit3
aGxzbFRlc3RzLnNpbXBsZVdoaWxlID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUg
KHggPCAxMykKKyAgICAgICAgICAgICAgICB4ID0geCAqIDI7CisgICAgICAgICAgICByZXR1cm4g
eDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIDE2KTsKK30KKworcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9sb29wcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3Bz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODJmYjc2NzVjMDZjN2Q4Yjk0OWQ3MDU5YTI5ZTUzNjQyOTJiOTI4
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy5odG1s
CkBAIC0wLDAgKzEsMTM5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgewor
ICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9z
aXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAg
VmVydGV4T3V0IHJlc3VsdDsKKworICAgIGZvciAodWludCBpID0gMDsgaSA8IDEwOyBpID0gaSAr
IDEpIHsKKyAgICAgICAgc2hhZGUgPSBzaGFkZSArIDAuMTsKKyAgICB9CisKKyAgICByZXN1bHQu
cG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChz
aGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3Qg
YXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVy
MC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IDAuMTsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAw
LjE7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjE7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3
YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAg
Y29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVz
Y3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50
VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5j
cmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzog
MCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVu
dDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFy
Iiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
PSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3Qg
cmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVy
UGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvdHMtb2YtbG9jYWwtdmFyaWFibGVzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA0MDc4MWE0YWVjN2JiMmMzZWM3MGU3YjUyZmYxOGZkY2U2
YTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9m
LWxvY2FsLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgbG90
c09mTG9jYWxWYXJpYWJsZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2xvdHMtb2YtbG9jYWwtdmFyaWFibGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYxMDRiNDE2OTRmNTVh
YzQ1YjlhODEwMmQxODE0NDI4ZjA4Njk0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy5odG1sCkBAIC0wLDAgKzEsMzcg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+TG90cyBvZiBsb2NhbCB2YXJp
YWJsZXMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMubG90c09mTG9jYWxW
YXJpYWJsZXMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBzcmMgPSAiaW50IHN1bSgpIHtcbiI7
CisgICAgc3JjICs9ICIgICAgaW50IGkgPSAwO1xuIjsKKyAgICBsZXQgdGFyZ2V0ID0gMDsKKyAg
ICBjb25zdCBudW1WYXJzID0gNTA7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYXJzOyBp
KyspIHsKKyAgICAgICAgc3JjICs9IGAgICBpID0gJHtpfTtcbmA7CisgICAgICAgIHNyYyArPSBg
ICAgaW50IFYke2l9ID0gKGkgKyAzKSAqIChpICsgMyk7XG5gOworICAgICAgICB0YXJnZXQgKz0g
KGkgKyAzKSAqIChpICsgMyk7CisgICAgfQorICAgIHNyYyArPSAiICAgIGludCByZXN1bHQgPSAw
O1xuIjsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZhcnM7IGkrKykgeworICAgICAgICBz
cmMgKz0gYCAgICByZXN1bHQgKz0gViR7aX07XG5gOworICAgIH0KKyAgICBzcmMgKz0gIiAgICBy
ZXR1cm4gcmVzdWx0O1xuIjsKKyAgICBzcmMgKz0gIn0iOworICAgIGxldCBwcm9ncmFtID0gc3Jj
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJzdW0i
LCBbXSksIHRhcmdldCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8
L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sdmFsdWVzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sdmFsdWVzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZDAyMjMxYzRlNTQ3ZWIyZDUzY2VkMWY4NWI0MWMwMWUyMjc1ZTQwCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2x2YWx1ZXMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGxWYWx1ZXMgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9sdmFsdWVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvbHZhbHVlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhNTk3MzczMjg1YzM2NTc2YmM2NDczZTgy
ZjAwMDA2YjUyODE2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvbHZhbHVlcy5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgorPHRpdGxlPkx2YWx1ZXMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0
LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVz
dHMubFZhbHVlcyA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSAwOworICAgICAgICAg
ICAgdGhyZWFkIGludCogeSA9ICYoeCsrKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAg
ICAgfQorICAgIGApOyAKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGlu
dCogeSA9ICYoKyt4KTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAgIGAp
OyAKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYoeCA9
IDMpOworICAgICAgICAgICAgcmV0dXJuICp5OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3
YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgeCA9IDA7CisgICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJjM7CisgICAgICAgICAg
ICByZXR1cm4gKnk7CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAK
KyAgICAgICAgaW50IGJhcihpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggKyAxOworICAg
ICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9
IDA7CisgICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJmJhcigzKTsKKyAgICAgICAgICAgIHJl
dHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAg
ICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSAwOworICAgICAg
ICAgICAgdGhyZWFkIGludCogeSA9ICYoNywgeCk7CisgICAgICAgICAgICByZXR1cm4gKnk7Cisg
ICAgICAgIH0KKyAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBlbnVtIERh
eXMgeworICAgICAgICAgICAgTW9uZGF5LAorICAgICAgICAgICAgVHVlc2RheQorICAgICAgICB9
CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDA7Cisg
ICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJihEYXlzLk1vbmRheSk7CisgICAgICAgICAgICBy
ZXR1cm4gKnk7CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAg
ICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocmVhZCBib29sKiB5ID0g
Jih0cnVlICYmIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAg
IGApOyAKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgdGhyZWFkIGJvb2wqIHkgPSAmKCF0cnVlKTsKKyAgICAgICAgICAgIHJl
dHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAg
ICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSAzOworICAgICAg
ICAgICAgdGhyZWFkIGludCogeSA9ICZ4OworICAgICAgICAgICAgcmV0dXJuICp5OworICAgICAg
ICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCAzKTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3Jp
cHQ+Cis8L2h0bWw+CisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21h
a2UtYXJyYXktcmVmLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFjNGNhNDkyMzY3OTgzN2JmMWI2Y2UzNGI4ZTI0MzFjNThkNWM1ZjgKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACisKK1BBU1MgbWFrZUFycmF5UmVmRnJvbUFycmF5
UmVmIAorUEFTUyBtYWtlQXJyYXlSZWZGcm9tTG9jYWwgCitQQVNTIG1ha2VBcnJheVJlZkZyb21Q
b2ludGVyIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJh
eS1yZWYtc3BlYy10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJy
YXktcmVmLXNwZWMtdGVzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGRiZjQ1YTBkOGM1ZDJlYmVjODk5
MmZhMTA3MzdkZTM1Y2Y4MWI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDcwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9
InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFy
bmVzcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5tYWtlQXJyYXlSZWZG
cm9tQXJyYXlSZWYgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBpbnQgYmFyKHRocmVhZCBpbnRbXSByZWYpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZlswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGludCBiYXoodGhyZWFkIGludFtdIHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYmFyKEBwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZv
bygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHggPSA0ODsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYmF6KEB4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisK
K3dobHNsVGVzdHMubWFrZUFycmF5UmVmRnJvbUxvY2FsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGJhcih0aHJlYWQgaW50W10gcmVmKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gcmVmWzBdOworICAgICAgICB9CisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDQ4OworICAgICAgICAgICAgcmV0
dXJuIGJhcihAeCk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQ4KTsKK30KKword2hsc2xUZXN0
cy5tYWtlQXJyYXlSZWZGcm9tUG9pbnRlciA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dy
YW0gPSBgCisgICAgICAgIGludCBiYXIodGhyZWFkIGludFtdIHJlZikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHJlZlswXTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6KHRocmVh
ZCBpbnQqIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcihAcHRyKTsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHgg
PSA0ODsKKyAgICAgICAgICAgIHJldHVybiBiYXooJngpOworICAgICAgICB9CisgICAgYDsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10p
LCA0OCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJl
bmNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdm
OGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L21ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1Mg
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MGIzYjNlYzcxOTRmNWNlMGRlYWExYTBlN2IwOTE5ZTQ1OGRhYjU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJl
bmNlLmh0bWwKQEAgLTAsMCArMSwxODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorYm9vbCB0ZXN0MSgpIHsK
KyAgICBpbnQgdmFsdWUgPSA0MjsKKyAgICB0aHJlYWQgaW50W10gYXJyYXkgPSBAdmFsdWU7Cisg
ICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGFycmF5WzBdICE9IDQyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzEy
MDIxM10gIT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXJyYXlbMF0gPSAxMzM3
OworICAgIGlmICh2YWx1ZSAhPSAxMzM3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCB0ZXN0MigpIHsKKyAgICBpbnQgdmFsdWUgPSA0MjsKKyAg
ICB0aHJlYWQgaW50KiBwdHIgPSAmdmFsdWU7CisgICAgaWYgKCpwdHIgIT0gNDIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHRocmVhZCBpbnRbXSBhcnJheSA9IEBwdHI7CisgICAgaWYg
KGFycmF5Lmxlbmd0aCAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5
WzBdICE9IDQyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzEyMzc0MjE3
XSAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgKnB0ciA9IDY2NjsKKyAg
ICBpZiAoKnB0ciAhPSA2NjYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodmFsdWUg
IT0gNjY2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAx
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzBdICE9IDY2NikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXJyYXlbMF0gPSA0MjQyOworICAgIGlmICgqcHRyICE9
IDQyNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodmFsdWUgIT0gNDI0MikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhcnJheVswXSAhPSA0MjQyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCB0ZXN0MygpIHsKKyAgICBpbnRb
NDJdIHg7CisgICAgdGhyZWFkIGludFs0Ml0qIGFycmF5UHRyID0gJng7CisgICAgaWYgKGFycmF5
UHRyLT5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHhbNDFdID0g
NjY2OworICAgIGlmICgoKmFycmF5UHRyKVs0MV0gIT0gNjY2KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCgqYXJyYXlQdHIpWzBdICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHRocmVhZCBpbnRbXSBhcnJheSA9IEB4OworICAgIGlmIChhcnJheS5sZW5ndGggIT0g
NDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFycmF5WzBdID0gMTMzNzsKKyAgICBp
ZiAoeFswXSAhPSAxMzM3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCgqYXJyYXlQ
dHIpWzBdICE9IDEzMzcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIHRlc3Q0KCkgeworICAgIHRocmVhZCBpbnQqIHB0ciA9IG51bGw7CisKKyAg
ICB0aHJlYWQgaW50W10gYXJyYXkgPSBAcHRyOworICAgIGlmIChhcnJheS5sZW5ndGggIT0gMCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGFycmF5WzBdICE9IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChhcnJheVsxMDAwMDBdICE9IDApCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitbbnVtdGhyZWFkcygxLCAxLCAx
KV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdp
c3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBp
ZiAoIXRlc3QxKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdGVzdDIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCF0ZXN0MygpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIXRlc3Q0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJ1ZmZlclswXSA9IDE7Cit9Citg
OworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0
eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFti
aW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVh
dGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21w
dXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXpl
ID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJE
ZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVC
dWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIg
PSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0
c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0Ug
fCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07
CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1
ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJl
c3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGlu
ZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2Ny
aXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmlu
ZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmlu
ZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5j
cmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZm
ZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0
IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsK
KyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAg
ICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZp
bmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwor
CisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBS
ZWFkQXN5bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShy
ZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkK
KyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIi
KTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7
CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1ODU1OTYyMzVjMmE0MThjMTRlMjc2MGNhZjlmNzAy
MTFjZjkzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0
cmljZXMtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgYnVp
bHRpbk1hdHJpY2VzIAorUEFTUyBtYXRyaXhNdWx0aXBsaWNhdGlvbiAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTZmMmJkOTk2OWJhYzgwMTMwYzBlZGFhMzZiZjljODg5NDMwOTBhYQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKQEAg
LTAsMCArMSwyMDQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0
Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCB0
aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRl
c3RzLmJ1aWx0aW5NYXRyaWNlcyA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgZmxvYXQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyeDIgYTsK
KyAgICAgICAgICAgIGFbMF1bMF0gPSAxOworICAgICAgICAgICAgYVswXVsxXSA9IDI7CisgICAg
ICAgICAgICBhWzFdWzBdID0gMzsKKyAgICAgICAgICAgIGFbMV1bMV0gPSA0OworICAgICAgICAg
ICAgcmV0dXJuIGFbMF1bMF07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZsb2F0MngzIGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsK
KyAgICAgICAgICAgIGFbMF1bMV0gPSAyOworICAgICAgICAgICAgYVswXVsyXSA9IDM7CisgICAg
ICAgICAgICBhWzFdWzBdID0gNDsKKyAgICAgICAgICAgIGFbMV1bMV0gPSA1OworICAgICAgICAg
ICAgYVsxXVsyXSA9IDY7CisgICAgICAgICAgICByZXR1cm4gYVsxXVsyXTsKKyAgICAgICAgfQor
ICAgICAgICBmbG9hdCBmb28zKCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyeDIgYTsK
KyAgICAgICAgICAgIHJldHVybiBhWzBdWzBdOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9v
NCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0MngyIGE7CisgICAgICAgICAgICBhWzBd
WzBdID0gMTsKKyAgICAgICAgICAgIGFbMF1bMV0gPSAyOworICAgICAgICAgICAgYVsxXVswXSA9
IDM7CisgICAgICAgICAgICBhWzFdWzFdID0gNDsKKyAgICAgICAgICAgIGZsb2F0MngyIGI7Cisg
ICAgICAgICAgICBiWzBdWzBdID0gNTsKKyAgICAgICAgICAgIGJbMF1bMV0gPSA2OworICAgICAg
ICAgICAgYlsxXVswXSA9IDc7CisgICAgICAgICAgICBiWzFdWzFdID0gODsKKyAgICAgICAgICAg
IGZvciAodWludCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICAgICAgICAgIGZvciAodWlu
dCBqID0gMDsgaiA8IDI7ICsraikgeworICAgICAgICAgICAgICAgICAgICBhW2ldW2pdICs9IDQ7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGEg
PT0gYjsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzUoKQorICAgICAgICB7CisgICAgICAg
ICAgICBmbG9hdDJ4MiBhOworICAgICAgICAgICAgYVswXSA9IGZsb2F0MigxLCAyKTsKKyAgICAg
ICAgICAgIGFbMV0gPSBmbG9hdDIoMywgNCk7CisgICAgICAgICAgICBmbG9hdDJ4MiBiOworICAg
ICAgICAgICAgYlswXVswXSA9IDE7CisgICAgICAgICAgICBiWzBdWzFdID0gMjsKKyAgICAgICAg
ICAgIGJbMV1bMF0gPSAzOworICAgICAgICAgICAgYlsxXVsxXSA9IDQ7CisgICAgICAgICAgICBy
ZXR1cm4gYSA9PSBiOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vNigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZsb2F0MngyIGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsKKyAgICAg
ICAgICAgIGFbMF1bMV0gPSAyOworICAgICAgICAgICAgYVsxXVswXSA9IDM7CisgICAgICAgICAg
ICBhWzFdWzFdID0gNDsKKyAgICAgICAgICAgIGZsb2F0MngyIGI7CisgICAgICAgICAgICBiWzBd
WzBdID0gNTsKKyAgICAgICAgICAgIGJbMF1bMV0gPSAxMDsKKyAgICAgICAgICAgIGJbMV1bMF0g
PSAxODsKKyAgICAgICAgICAgIGJbMV1bMV0gPSAyNDsKKyAgICAgICAgICAgIGFbMF0gKj0gNTsK
KyAgICAgICAgICAgIGFbMV0gKj0gNjsKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAg
ICAgIH0KKyAgICAgICAgZmxvYXQgZm9vNygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0
MngzIGEgPSBmbG9hdDJ4MyhmbG9hdDMoMywgNCwgNSksIGZsb2F0Myg2LCA3LCA4KSk7CisgICAg
ICAgICAgICByZXR1cm4gYVswXVsyXTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwg
W10pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dy
YW0sICJmb28zIiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVu
Y3Rpb24ocHJvZ3JhbSwgICJmb280IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb281IiwgW10pLCB0cnVlKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb282IiwgW10p
LCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dy
YW0sICJmb283IiwgW10pLCA1KTsKK307CisKK3dobHNsVGVzdHMubWF0cml4TXVsdGlwbGljYXRp
b24gPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGZsb2F0Mng0
IG11bHRpcGx5KGZsb2F0MngzIHgsIGZsb2F0M3g0IHkpIHsKKyAgICAgICAgICAgIC8vIENvcGll
ZCBhbmQgcGFzdGVkIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcnkKKyAgICAgICAgICAgIGZsb2F0
Mng0IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdFswXVswXSA9IDA7CisgICAgICAgICAgICBy
ZXN1bHRbMF1bMF0gKz0geFswXVswXSAqIHlbMF1bMF07CisgICAgICAgICAgICByZXN1bHRbMF1b
MF0gKz0geFswXVsxXSAqIHlbMV1bMF07CisgICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFsw
XVsyXSAqIHlbMl1bMF07CisgICAgICAgICAgICByZXN1bHRbMF1bMV0gPSAwOworICAgICAgICAg
ICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMF0gKiB5WzBdWzFdOworICAgICAgICAgICAgcmVzdWx0
WzBdWzFdICs9IHhbMF1bMV0gKiB5WzFdWzFdOworICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9
IHhbMF1bMl0gKiB5WzJdWzFdOworICAgICAgICAgICAgcmVzdWx0WzBdWzJdID0gMDsKKyAgICAg
ICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzBdICogeVswXVsyXTsKKyAgICAgICAgICAgIHJl
c3VsdFswXVsyXSArPSB4WzBdWzFdICogeVsxXVsyXTsKKyAgICAgICAgICAgIHJlc3VsdFswXVsy
XSArPSB4WzBdWzJdICogeVsyXVsyXTsKKyAgICAgICAgICAgIHJlc3VsdFswXVszXSA9IDA7Cisg
ICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFswXVswXSAqIHlbMF1bM107CisgICAgICAgICAg
ICByZXN1bHRbMF1bM10gKz0geFswXVsxXSAqIHlbMV1bM107CisgICAgICAgICAgICByZXN1bHRb
MF1bM10gKz0geFswXVsyXSAqIHlbMl1bM107CisgICAgICAgICAgICByZXN1bHRbMV1bMF0gPSAw
OworICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9IHhbMV1bMF0gKiB5WzBdWzBdOworICAgICAg
ICAgICAgcmVzdWx0WzFdWzBdICs9IHhbMV1bMV0gKiB5WzFdWzBdOworICAgICAgICAgICAgcmVz
dWx0WzFdWzBdICs9IHhbMV1bMl0gKiB5WzJdWzBdOworICAgICAgICAgICAgcmVzdWx0WzFdWzFd
ID0gMDsKKyAgICAgICAgICAgIHJlc3VsdFsxXVsxXSArPSB4WzFdWzBdICogeVswXVsxXTsKKyAg
ICAgICAgICAgIHJlc3VsdFsxXVsxXSArPSB4WzFdWzFdICogeVsxXVsxXTsKKyAgICAgICAgICAg
IHJlc3VsdFsxXVsxXSArPSB4WzFdWzJdICogeVsyXVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFsx
XVsyXSA9IDA7CisgICAgICAgICAgICByZXN1bHRbMV1bMl0gKz0geFsxXVswXSAqIHlbMF1bMl07
CisgICAgICAgICAgICByZXN1bHRbMV1bMl0gKz0geFsxXVsxXSAqIHlbMV1bMl07CisgICAgICAg
ICAgICByZXN1bHRbMV1bMl0gKz0geFsxXVsyXSAqIHlbMl1bMl07CisgICAgICAgICAgICByZXN1
bHRbMV1bM10gPSAwOworICAgICAgICAgICAgcmVzdWx0WzFdWzNdICs9IHhbMV1bMF0gKiB5WzBd
WzNdOworICAgICAgICAgICAgcmVzdWx0WzFdWzNdICs9IHhbMV1bMV0gKiB5WzFdWzNdOworICAg
ICAgICAgICAgcmVzdWx0WzFdWzNdICs9IHhbMV1bMl0gKiB5WzJdWzNdOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBmbG9hdDJ4MyBtYXRyaXgxKCkgewor
ICAgICAgICAgICAgZmxvYXQyeDMgeDsKKyAgICAgICAgICAgIHhbMF1bMF0gPSAyOworICAgICAg
ICAgICAgeFswXVsxXSA9IDM7CisgICAgICAgICAgICB4WzBdWzJdID0gNTsKKyAgICAgICAgICAg
IHhbMV1bMF0gPSA3OworICAgICAgICAgICAgeFsxXVsxXSA9IDExOworICAgICAgICAgICAgeFsx
XVsyXSA9IDEzOworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICAgICAgZmxv
YXQzeDQgbWF0cml4MigpIHsKKyAgICAgICAgICAgIGZsb2F0M3g0IHk7CisgICAgICAgICAgICB5
WzBdWzBdID0gMTc7CisgICAgICAgICAgICB5WzBdWzFdID0gMTk7CisgICAgICAgICAgICB5WzBd
WzJdID0gMjM7CisgICAgICAgICAgICB5WzBdWzNdID0gMjk7CisgICAgICAgICAgICB5WzFdWzBd
ID0gMzE7CisgICAgICAgICAgICB5WzFdWzFdID0gMzc7CisgICAgICAgICAgICB5WzFdWzJdID0g
NDE7CisgICAgICAgICAgICB5WzFdWzNdID0gNDM7CisgICAgICAgICAgICB5WzJdWzBdID0gNDc7
CisgICAgICAgICAgICB5WzJdWzFdID0gNTM7CisgICAgICAgICAgICB5WzJdWzJdID0gNTk7Cisg
ICAgICAgICAgICB5WzJdWzNdID0gNjE7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAg
fQorICAgICAgICBmbG9hdCBmb28wMCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseSht
YXRyaXgxKCksIG1hdHJpeDIoKSlbMF1bMF07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9v
MDEoKSB7CisgICAgICAgICAgICByZXR1cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkp
WzBdWzFdOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvbzAyKCkgeworICAgICAgICAgICAg
cmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0cml4MigpKVswXVsyXTsKKyAgICAgICAgfQor
ICAgICAgICBmbG9hdCBmb28wMygpIHsKKyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRy
aXgxKCksIG1hdHJpeDIoKSlbMF1bM107CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMTAo
KSB7CisgICAgICAgICAgICByZXR1cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFd
WzBdOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvbzExKCkgeworICAgICAgICAgICAgcmV0
dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0cml4MigpKVsxXVsxXTsKKyAgICAgICAgfQorICAg
ICAgICBmbG9hdCBmb28xMigpIHsKKyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgx
KCksIG1hdHJpeDIoKSlbMV1bMl07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMTMoKSB7
CisgICAgICAgICAgICByZXR1cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzNd
OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1
bmN0aW9uKHByb2dyYW0sICJmb28wMCIsIFtdKSwgMTcgKiAyICsgMzEgKiAzICsgNDcgKiA1KTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28w
MSIsIFtdKSwgMTkgKiAyICsgMzcgKiAzICsgNTMgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMiIsIFtdKSwgMjMgKiAyICsgNDEg
KiAzICsgNTkgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9u
KHByb2dyYW0sICJmb28wMyIsIFtdKSwgMjkgKiAyICsgNDMgKiAzICsgNjEgKiA1KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28xMCIsIFtd
KSwgMTcgKiA3ICsgMzEgKiAxMSArIDQ3ICogMTMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzExIiwgW10pLCAxOSAqIDcgKyAzNyAqIDEx
ICsgNTMgKiAxMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vMTIiLCBbXSksIDIzICogNyArIDQxICogMTEgKyA1OSAqIDEzKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28xMyIsIFtd
KSwgMjkgKiA3ICsgNDMgKiAxMSArIDYxICogMTMpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0
cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9tYXRyaXgtMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0
cml4LTItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvbWF0cml4LTItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LTIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9tYXRyaXgtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0NTZmOTUzM2RkNWM3ZmU5Mjc2M2Q4
YzFkZTE4MmViMzRlZDU3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvbWF0cml4LTIuaHRtbApAQCAtMCwwICsxLDE1NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitib29s
IGFsbEVxdWFsKGZsb2F0NHg0IG1hdCwgZmxvYXQgdmFsdWUpCit7CisgICAgZm9yICh1aW50IGkg
PSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGZvciAodWludCBqID0gMDsgaiA8IDQ7
IGogPSBqICsgMSkgeworICAgICAgICAgICAgaWYgKG1hdFtpXVtqXSAhPSB2YWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgZmlsbCh0aHJlYWQgZmxvYXQ0eDQqIG1hdCwgZmxvYXQgdmFsdWUpCit7
CisgICAgZmxvYXQ0eDQgcmVzdWx0OworICAgIGZvciAodWludCBpID0gMDsgaSA8IDQ7IGkgPSBp
ICsgMSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gZmxvYXQ0KHZhbHVlLCB2YWx1ZSwgdmFs
dWUsIHZhbHVlKTsKKyAgICB9CisgICAgKm1hdCA9IHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBmaWxsKHRocmVhZCBmbG9hdDQqIHZlYywgZmxvYXQgdmFsdWUpCit7CisgICAg
ZmxvYXQ0IHJlc3VsdDsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpIHsK
KyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorICAgICp2ZWMgPSByZXN1bHQ7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYWxsRXF1YWwoZmxvYXQ0IHZlYywgZmxvYXQgdmFs
dWUpCit7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7CisgICAgICAg
IGlmICh2ZWNbaV0gIT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9p
ZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxv
YXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0NHg0IG1hdDsK
KyAgICBmaWxsKCZtYXQsIDEpOworICAgIGlmICghYWxsRXF1YWwobWF0LCAxKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZmxvYXQ0IHZlYzsKKyAgICBmaWxsKCZ2ZWMsIDEpOworICAgIGlmICgh
YWxsRXF1YWwodmVjLCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQ0IHZlYzIgPSBt
dWwobWF0LCB2ZWMpOworICAgIGlmICghYWxsRXF1YWwodmVjMiwgNCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZsb2F0NHg0IG1hdDIgPSBtdWwobWF0LCBtYXQpOworICAgIGlmICghYWxsRXF1
YWwobWF0MiwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1hdDIgPSBtdWwobWF0MiwgbWF0
Mik7CisgICAgaWYgKCFhbGxFcXVhbChtYXQyLCA2NCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIu
MDsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJp
bGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2Uu
Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAg
Y29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBj
b25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVy
QXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1
ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFd
ID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAg
YnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNv
bnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7
YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5n
ID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2Jp
bmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIg
PSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rl
ci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsK
KyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1
dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBl
bGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXAp
OworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCg0LCAxLCAxKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5k
RW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRC
dWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNC
dWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0
MzJBcnJheVswXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAor
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzJdID09IDYKKyAgICAgICAgJiYgcmVzdWx0
c0Zsb2F0MzJBcnJheVszXSA9PSA4CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0g
PT0gNQorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzVdID09IDYKKyAgICAgICAgJiYg
cmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PSA3CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJy
YXlbN10gPT0gOCkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0
ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7Cisg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVz
dFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9tYXRyaXgtbWVtb3J5LWxheW91dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJm
OTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
bWF0cml4LW1lbW9yeS1sYXlvdXQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRy
aXgtbWVtb3J5LWxheW91dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViMDgxNDg1YzdiZDViMDJjNWI3MzRl
NDBiMjIxNzJjY2QyOTYxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvbWF0cml4LW1lbW9yeS1sYXlvdXQuaHRtbApAQCAtMCwwICsxLDEzOSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3Vy
Y2UgPSBgCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVy
KGRldmljZSBmbG9hdDR4NFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElE
IDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0NHg0IHJlc3VsdDsKKyAgICByZXN1
bHRbMF0gPSBmbG9hdDQoMSwgMiwgMywgNCk7CisgICAgcmVzdWx0WzFdID0gZmxvYXQ0KDUsIDYs
IDcsIDgpOworICAgIHJlc3VsdFsyXSA9IGZsb2F0NCg5LCAxMCwgMTEsIDEyKTsKKyAgICByZXN1
bHRbM10gPSBmbG9hdDQoMTMsIDE0LCAxNSwgMTYpOworCisgICAgZmxvYXQ0eDQgbWF0ID0gYnVm
ZmVyWzBdOworCisgICAgaWYgKG1hdFswXVswXSA9PSAwCisgICAgICAgICYmIG1hdFswXVsxXSA9
PSAxCisgICAgICAgICYmIG1hdFswXVsyXSA9PSAyCisgICAgICAgICYmIG1hdFswXVszXSA9PSAz
CisKKyAgICAgICAgJiYgbWF0WzFdWzBdID09IDQKKyAgICAgICAgJiYgbWF0WzFdWzFdID09IDUK
KyAgICAgICAgJiYgbWF0WzFdWzJdID09IDYKKyAgICAgICAgJiYgbWF0WzFdWzNdID09IDcKKwor
ICAgICAgICAmJiBtYXRbMl1bMF0gPT0gOAorICAgICAgICAmJiBtYXRbMl1bMV0gPT0gOQorICAg
ICAgICAmJiBtYXRbMl1bMl0gPT0gMTAKKyAgICAgICAgJiYgbWF0WzJdWzNdID09IDExCisKKyAg
ICAgICAgJiYgbWF0WzNdWzBdID09IDEyCisgICAgICAgICYmIG1hdFszXVsxXSA9PSAxMworICAg
ICAgICAmJiBtYXRbM11bMl0gPT0gMTQKKyAgICAgICAgJiYgbWF0WzNdWzNdID09IDE1KSB7Cisg
ICAgICAgIGJ1ZmZlclswXSA9IHJlc3VsdDsKKyAgICB9Cit9CitgOworCithc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJj
b21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1
ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiAxNjsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZm
ZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gMDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDg7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTI7CisgICAgYnVmZmVy
RmxvYXQzMkFycmF5WzRdID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA1OworICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDk7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0g
MTM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbOV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxMDsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbMTFdID0gMTQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDM7Cisg
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzE0
XSA9IDExOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxNTsKKyAgICBidWZmZXIudW5t
YXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1
ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBi
aW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0
LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAg
ICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVm
ZmVyLCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5j
b2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVs
aW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAx
KTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRC
dWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9
IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgY29uc3QgcmVzdWx0c0Zs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBp
ZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PT0gMQorICAgICAgICAmJiByZXN1bHRzRmxvYXQz
MkFycmF5WzFdID09PSA1CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gPT09IDkK
KyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSA9PT0gMTMKKworICAgICAgICAmJiBy
ZXN1bHRzRmxvYXQzMkFycmF5WzRdID09PSAyCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJy
YXlbNV0gPT09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PT0gMTAKKyAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PT0gMTQKKworICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzhdID09PSAzCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlb
OV0gPT09IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxMF0gPT09IDExCisgICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTFdID09PSAxNQorCisgICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbMTJdID09PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlb
MTNdID09PSA4CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTRdID09PSAxMgorICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzE1XSA9PT0gMTYpCisgICAgICAgIHRlc3RQYXNz
ZWQoIiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgcmVzdWx0c0J1
ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNE
ZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihm
dW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpTVGVz
dCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9tYXRyaXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9t
YXRyaXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzNiNjVjMjg2YjNkNTExOTA3YzhmOTc3YzZiNzcyOGRl
MjE1MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJp
eC5odG1sCkBAIC0wLDAgKzEsMTY2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK2Jvb2wgYWxsRXF1YWwoZmxv
YXQyeDMgbWF0LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyOyBp
ID0gaSArIDEpIHsKKyAgICAgICAgZm9yICh1aW50IGogPSAwOyBqIDwgMzsgaiA9IGogKyAxKSB7
CisgICAgICAgICAgICBpZiAobWF0W2ldW2pdICE9IHZhbHVlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworW251
bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxv
YXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNo
VGhyZWFkSUQpIHsKKyAgICBmbG9hdDJ4MyBmb287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDAp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb28gPSBmb28gKyBmbG9hdDJ4MyhmbG9hdDMoMS4w
LCAxLjAsIDEuMCksIGZsb2F0MygxLjAsIDEuMCwgMS4wKSk7CisgICAgaWYgKCFhbGxFcXVhbChm
b28sIDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb28gPSBmb28gKiBmbG9hdDJ4MyhmbG9h
dDMoOC41LCA4LjUsIDguNSksIGZsb2F0Myg4LjUsIDguNSwgOC41KSk7CisgICAgaWYgKCFhbGxF
cXVhbChmb28sIDguNSkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyAtIGZsb2F0
MngzKGZsb2F0Myg3LjUsIDcuNSwgNy41KSwgZmxvYXQzKDcuNSwgNy41LCA3LjUpKTsKKyAgICBp
ZiAoIWFsbEVxdWFsKGZvbywgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyAr
IGZsb2F0MngzKGZsb2F0MygxLjAsIDEuMCwgMS4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsK
KyAgICBpZiAoIWFsbEVxdWFsKGZvbywgMikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9
IGZvbyArIGZvbzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgNCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGZvbyA9IGZvbyArIGZvbzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgOCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZsb2F0MyBmb3VydHlUd287CisgICAgZm91cnR5VHdvLnggPSA0
MjsKKyAgICBmb3VydHlUd28ueSA9IDQyOworICAgIGZvdXJ0eVR3by56ID0gNDI7CisKKyAgICBm
b29bMF0gPSBmb3VydHlUd287CisgICAgZm9vWzFdID0gZm91cnR5VHdvOworICAgIGlmICghYWxs
RXF1YWwoZm9vLCA0MikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvb1sxMzM3XSA9IGZvdXJ0
eVR3bzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmb29bMTAwMDAwMF0gPSBmb3VydHlUd287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm91cnR5VHdvWzEzMzddID0gNTA7CisgICAgZm9vWzFd
ID0gZm91cnR5VHdvOworICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvdXJ0eVR3b1sxMDAwMDAwXSA9IDUwOworICAgIGZvb1sxXSA9IGZvdXJ0eVR3
bzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdDMgc2hvdWxkQmVaZXJvID0gZm9vWzEwMDAwMF07CisgICAgaWYgKHNob3VsZEJlWmVyby54
ICE9IDAgfHwgc2hvdWxkQmVaZXJvLnkgIT0gMCB8fCBzaG91bGRCZVplcm8ueiAhPSAwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoZm91cnR5VHdvWzEwMDAwMDAwXSAhPSAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0
aHJlYWRJRC54KV0gKiAyLjA7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2Up
IHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3Rh
Z2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07
CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2Jp
bmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5k
R3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2Nv
bXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQgKiA4OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAg
ICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZl
ckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVsxXSA9IDI7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKKyAg
ICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9
IDU7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbNl0gPSA3OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7CisgICAgYnVmZmVyLnVu
bWFwKCk7CisKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBi
dWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07CisgICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Cisg
ICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1
ZmZlciwgMCwgc2l6ZSk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVu
Y29kZXIuYmVnaW5Db21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShjb21wdXRlUGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3Jv
dXAoMCwgYmluZEdyb3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goNCwgMSwg
MSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIg
PSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgIGNvbnN0IHJlc3VsdHNG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAg
aWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gMgorICAgICAgICAmJiByZXN1bHRzRmxvYXQz
MkFycmF5WzFdID09IDQKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PSA2Cisg
ICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAorICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzRdID09IDUKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9
PSA2CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNworICAgICAgICAmJiBy
ZXN1bHRzRmxvYXQzMkFycmF5WzddID09IDgpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAg
IGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgp
OworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVu
KGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsK
KyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRl
c3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0
aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbmVzdGVkLWRvdC1l
eHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL25lc3RlZC1kb3QtZXhwcmVz
c2lvbi1ydmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4
cHJlc3Npb24tcnZhbHVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ1ZjE4YzM0ZDIxZmFhNTFjZmFhMjc3
Y2ExZjBjMTY4Yzc4YjRhNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLmh0bWwKQEAgLTAsMCArMSwxNDcgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2Fu
dmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qg
c2hhZGVyU291cmNlID0gYAorCitzdHJ1Y3QgQmFyIHsKKyAgICBmbG9hdCBzaGFkZTsKK30KK3N0
cnVjdCBGb28geworICAgIEJhciBiYXI7Cit9CisKK3N0cnVjdCBXcmFwcGVyIHsKKyAgICBGb28g
Zm9vOworfQorCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZl
cnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFdyYXBwZXIgd3JhcHBlcjsKKyAgICB3cmFw
cGVyLmZvby5iYXIuc2hhZGUgPSBzaGFkZTsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworICAgIHJl
c3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHdyYXBwZXIuZm9v
LmJhci5zaGFkZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewor
ICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2Nv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMg
ZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBw
cmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXph
dGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29u
c3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9y
QmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29u
c3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtz
aGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0cmlidXRl
MSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAg
ICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0
IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNv
bnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1
ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1
ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5
LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVy
dGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBj
b25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3Ig
PSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNj
cmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0
ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAu
dW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBG
bG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklG
T1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1
ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKwor
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTog
NH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTog
YnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6
IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29u
c3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAg
Y29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0i
fTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2Fw
Q2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdl
dEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRU
ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHty
OiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3th
dHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9w
OiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVz
Y3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFz
cyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgw
LCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwg
W3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwg
MCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1h
bmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUo
KS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5j
dGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1
bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJl
KGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtbG9vcC1leHBlY3RlZC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbmVzdGVkLWxvb3AtZXhwZWN0ZWQu
aHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKK2RyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9uZXN0ZWQtbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L25lc3RlZC1sb29wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRiMTE4MTgyMzRmMTc3MTc4YzAzMDJjNzE1
ZTg1YjBhOWUyMzA2NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9uZXN0ZWQtbG9vcC5odG1sCkBAIC0wLDAgKzEsMTc1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0
cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAg
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7
CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgMTA7IGkgPSBpICsgMSkgeworICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNoYWRlID0gMS4wOworICAgICAgICB9CisKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoKHNoYWRlID0gMS4wLCBmYWxzZSkpOwor
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlICsg
MS4wLCBmYWxzZSkpOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChiKSB7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKChz
aGFkZSA9IHNoYWRlIC0gMS4wLCBmYWxzZSkpOworCisgICAgICAgIHdoaWxlICgoc2hhZGUgPSBz
aGFkZSArIDEuMCwgdHJ1ZSkpIHsKKyAgICAgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoKHNo
YWRlID0gc2hhZGUgLSAxLjAsIHRydWUpKSB7CisgICAgICAgICAgICBpZiAoYikgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBm
bG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlv
bjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUx
ID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAg
IGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3Qg
aW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVm
ZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29u
c3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRl
eEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
N10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51
bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZP
Uk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBi
dWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25z
dCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVu
Y3Rpb24oKSB7CisgICAgZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9udWxsLWFyZy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1hcmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgy
YTBjZjM5ZThhMGZlY2M4ZjMzNGFjMTg2M2ExZTNkZjhjYTlmZGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1hcmctZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMyBAQAorCitQQVNTIHBhc3NOdWxsVG9QdHJNb25vbW9ycGhpYyAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJnLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbnVsbC1hcmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWIyZWVhYjEyMGZlZGI0MmMwNzFm
ODc5YTRlN2E0MDc2MDU1ZmEzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL251bGwtYXJnLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisK
K3dobHNsVGVzdHMucGFzc051bGxUb1B0ck1vbm9tb3JwaGljID0gYXN5bmMgKCkgPT4KK3sKKyAg
ICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyh0aHJlYWQgaW50KiBwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcHRyOworICAgICAgICB9CisgICAgICAgIGludCBi
YXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vKG51bGwpOworICAgICAgICB9
CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiYmFyIiwgW10pLCAwKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJy
YXktcmVmLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1hcnJheS1yZWYuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZDljOTQ2OTRjOGFmMTBkOWUwZmY5YjZjNGU4ZWFiNWE5ZmYzNTEyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJyYXktcmVm
Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNo
YXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRs
ZT5UZXN0IGxvb3BzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmRlcmVm
ZXJlbmNlRGVmYXVsdE51bGxBcnJheVJlZiA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dy
YW0gPSBgCisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJlYWQg
aW50W10gcDsKKyAgICAgICAgICAgIHJldHVybiBwWzBdOworICAgICAgICB9CisgICAgYDsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10p
LCAwKTsKK30KKword2hsc2xUZXN0cy5kZWZhdWx0SW5pdGlhbGl6ZWROdWxsQXJyYXlSZWZJbnRM
aXRlcmFsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50
IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gbnVsbDsKKyAg
ICAgICAgICAgIHJldHVybiBwWzBdOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKK30KKwor
d2hsc2xUZXN0cy5wYXNzTnVsbFRvUHRyTW9ub21vcnBoaWNBcnJheVJlZiA9IGFzeW5jICgpID0+
Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28odGhyZWFkIGludFtdIHB0
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHB0clswdV07CisgICAgICAgIH0KKyAg
ICAgICAgaW50IGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7
CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDApOworfQorCit3aGxzbFRlc3RzLmxvYWROdWxsID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAg
ICAgIHZvaWQgc2luayh0aHJlYWQgaW50KiB4KSB7IH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkg
eyBzaW5rKCpudWxsKTsgfQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7
Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL251bGwtZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL251bGwtZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThh
NTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9udWxsLWRlcmVm
ZXJlbmNlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1kZXJlZmVyZW5jZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYzMGE3ZWM1ODM4NmQzYjM1YmI2MjdhMjBmZTEzZDhhZDYzODJkMmYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1kZXJlZmVy
ZW5jZS5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0g
dGhyZWFkIGludCo7CitGb28gZ2V0TnVsbFB0cigpCit7CisgICAgcmV0dXJuIG51bGw7Cit9CisK
K3N0cnVjdCBYWVogeworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6Owor
fQorCitbbnVtdGhyZWFkcygyLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRl
dmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1Zf
RGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIEZvbyBwdHIgPSBudWxsOworICAgICpwdHIgPSA0MjsK
KyAgICAqZ2V0TnVsbFB0cigpID0gNDI7CisgICAgaWYgKCpwdHIgPT0gMCkgeworICAgICAgICBp
ZiAocHRyID09IGdldE51bGxQdHIoKSkgeworICAgICAgICAgICAgaWYgKCpnZXROdWxsUHRyKCkg
PT0gMCkgeworICAgICAgICAgICAgICAgIHRocmVhZCBYWVoqIHh5elB0ciA9IG51bGw7CisgICAg
ICAgICAgICAgICAgWFlaIHh5ejsKKyAgICAgICAgICAgICAgICB4eXoueCA9IDE7CisgICAgICAg
ICAgICAgICAgeHl6LnkgPSAxOworICAgICAgICAgICAgICAgIHh5ei56ID0gMTsKKyAgICAgICAg
ICAgICAgICBpZiAoeHl6LnogPT0gMS4wICYmIHh5ei55ID09IDEuMCAmJiB4eXoueiA9PSAxLjAp
IHsKKyAgICAgICAgICAgICAgICAgICAgKnh5elB0ciA9IHh5ejsKKyAgICAgICAgICAgICAgICAg
ICAgeHl6ID0gKnh5elB0cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHh5ei56ID09IDAuMCAm
JiB4eXoueSA9PSAwLjAgJiYgeHl6LnogPT0gMC4wKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoJipnZXROdWxsUHRyKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgmKigmKmdldE51bGxQdHIoKSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJl
YWRJRC54KV0gKiAyLjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorYDsKKworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZm
ZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAg
YnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4
OworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Cisg
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJy
YXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAgICAg
JiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMy
QXJyYXlbMl0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgKKyAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3VsdHNG
bG9hdDMyQXJyYXlbNV0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09
IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0ZXN0
UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3Vs
dHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvb29iLWFjY2Vzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvb29iLWFjY2Vzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5
MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL29vYi1hY2Nlc3Mu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9vb2ItYWNjZXNzLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmZiMjYyOTQ2YWM4M2RlMDUwOTlkMGU0MmRmYThjZTUwODMwMzViNwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9vb2ItYWNjZXNzLmh0bWwKQEAgLTAsMCAr
MSw5NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citj
b25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygyLCAxLCAxKV0KK2NvbXB1dGUgdm9p
ZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxv
YXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJ1ZmZlclsxMzM3XSA9
IDAuMDsKKyAgICBidWZmZXJbNDI0MjQyNDJdID0gMC4wOworICAgIGlmIChidWZmZXJbMTAwMDAw
XSA9PSAwLjApCisgICAgICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50
KHRocmVhZElELngpXSAqIDIuMDsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmlj
ZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIi
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7
Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRl
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCAqIDg7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9Owor
ICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7
CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVm
ZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOwor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRd
ID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIu
dW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNU
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30K
KyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRz
QnVmZmVyLCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5k
RW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBp
cGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRH
cm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAx
LCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1h
bmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUo
KS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZl
ciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgY29uc3QgcmVzdWx0
c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAg
ICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNGbG9h
dDMyQXJyYXlbMV0gPT0gNAorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzJdID09IDYK
KyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSA9PSA4CisgICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNF0gPT0gNQorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzVd
ID09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PSA3CisgICAgICAgICYm
IHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT0gOCkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7Cisg
ICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFw
KCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRo
ZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkg
eworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVu
Y3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL29wZXJhdG9yLW92ZXJsb2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQwZjNk
MTdlNmJiMWI5ODAwMDExYTgzZmE0OTAxYzIwZWNhZTM1MAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwzIEBACisKK1BBU1Mgb3BlcmF0b3JXaXRob3V0VW5pbmZlcnJhYmxlVHlwZVZhcmlh
YmxlIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3Zl
cmxvYWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9vcGVyYXRvci1vdmVybG9hZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM3ZmNlYzY4MzNkZjJiZWEwMzNmMGNkZjU3YWRlZjFjM2Y3ZmE2YzQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3Zl
cmxvYWQuaHRtbApAQCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1l
dGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgor
PHRpdGxlPk9wZXJhdG9yKyBvdmVybG9hZC48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNs
LXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hs
c2xUZXN0cy5vcGVyYXRvcldpdGhvdXRVbmluZmVycmFibGVUeXBlVmFyaWFibGUgPSBhc3luYyAo
KSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAg
ICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yKyhGb28gYSwgRm9v
IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICByZXN1
bHQueCA9IGEueCArIGIueDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBhOworICAgICAg
ICAgICAgYS54ID0gNjQ1OworICAgICAgICAgICAgRm9vIGI7CisgICAgICAgICAgICBiLnggPSAt
MzU7CisgICAgICAgICAgICByZXR1cm4gKGEgKyBiKS54OworICAgICAgICB9CisgICAgYDsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10p
LCA2NDUgLSAzNSk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3ZlcmxvYWQtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJsb2FkLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hZGI2MTA2YjA4NjRlNTZkNjNhM2E1NzA0MWY0NmZmZGI2MTBmNDk2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJsb2FkLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDUgQEAKKworUEFTUyBpbnRPdmVybG9hZFJlc29sdXRpb24gCitQQVNT
IGludE92ZXJsb2FkUmVzb2x1dGlvblJldmVyc2VPcmRlciAKK1BBU1Mgbm90RXF1YWxzT3Zlcmxv
YWQgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9vdmVybG9hZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJsb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U1
NDcyYmIyYTRkZTE2N2U5MTdlYThlNjlkYjFlMTM5M2Q2ZWNiMgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9vdmVybG9hZC5odG1sCkBAIC0wLDAgKzEsNDYgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+T3ZlcmxvYWQuPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxz
bFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuaW50T3ZlcmxvYWRSZXNvbHV0aW9uID0gYXN5bmMg
KCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQpIHsgcmV0
dXJuIDE7IH0KKyAgICAgICAgaW50IGZvbyh1aW50KSB7IHJldHVybiAyOyB9CisgICAgICAgIGlu
dCBmb28oZmxvYXQpIHsgcmV0dXJuIDM7IH0KKyAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZv
byg0Mik7IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJiYXIiLCBbXSksIDEpOworfQorCit3aGxzbFRlc3RzLmludE92ZXJsb2FkUmVz
b2x1dGlvblJldmVyc2VPcmRlciA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBg
CisgICAgICAgIGludCBmb28oZmxvYXQpIHsgcmV0dXJuIDM7IH0KKyAgICAgICAgaW50IGZvbyh1
aW50KSB7IHJldHVybiAyOyB9CisgICAgICAgIGludCBmb28oaW50KSB7IHJldHVybiAxOyB9Cisg
ICAgICAgIGludCBiYXIoKSB7IHJldHVybiBmb28oNDIpOyB9CisgICAgYDsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAxKTsKK30K
Kword2hsc2xUZXN0cy5ub3RFcXVhbHNPdmVybG9hZCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KEZvbywgRm9vKSB7IHJldHVybiB0cnVlOyB9CisgICAg
ICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODY0MDA5NWY3MzFlZjczYWFjZTllMzY4YWExMDYy
YTYxZDBiYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292
ZXJyaWRlLXN1YnNjcmlwdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1Mgb3Zl
cnJpZGVTdWJzY3JpcHRTdHJ1Y3QgCitQQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kRG9T
dG9yZXMgCitQQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kVXNlUG9pbnRlcnMgCitQQVNT
IG92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kVXNlUG9pbnRlcnNJbmNvcnJlY3RseSAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMxZjdhYWM3NWRiNDg0MjhlZTJiYjIwMjY3ZjU4YzI0YzlkYjU2M2EKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0
bWwKQEAgLTAsMCArMSwxMjggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFy
c2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+
VGVzdCBvdmVycmlkZSBzdWJzY3JpcHRzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wt
dGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxz
bFRlc3RzLm92ZXJyaWRlU3Vic2NyaXB0U3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAg
ICAgICAgICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9y
JltdKHRocmVhZCBGb28qIGZvbywgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGluZGV4ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPng7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAg
ICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA0OTg7Cisg
ICAgICAgICAgICBmb28ueSA9IDE5OworICAgICAgICAgICAgcmV0dXJuIGZvb1swXSArIGZvb1sx
XSAqIDM7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQ5OCArIDE5ICogMyk7Cit9CisKK3dobHNs
VGVzdHMub3ZlcnJpZGVTdWJzY3JpcHRTdHJ1Y3RBbmREb1N0b3JlcyA9IGFzeW5jICgpID0+Cit7
CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAg
aW50IHg7CisgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgfQorICAgICAgICB0aHJlYWQgaW50
KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT54
OworICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuICZm
b28tPnk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpbnQg
Zm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvb1sw
XSA9IDQ5ODsKKyAgICAgICAgICAgIGZvb1sxXSA9IDE5OworICAgICAgICAgICAgcmV0dXJuIGZv
by54ICsgZm9vLnk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQ5OCArIDE5KTsKK30KKword2hs
c2xUZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJzID0gYXN5bmMgKCkg
PT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAg
ICAgICBpbnQgeDsKKyAgICAgICAgICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIHRocmVh
ZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywgdWludCBpbmRleCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICZm
b28tPng7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gJmZvby0+eTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAg
IGludCBiYXIodGhyZWFkIEZvbyogZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KCpmb28pWzBdICsgKCpmb28pWzFdOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAg
ICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA0OTg7Cisg
ICAgICAgICAgICBmb28ueSA9IDE5OworICAgICAgICAgICAgcmV0dXJuIGJhcigmZm9vKTsKKyAg
ICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNDk4ICsgMTkpOworfQorCit3aGxzbFRlc3RzLm92ZXJyaWRl
U3Vic2NyaXB0U3RydWN0QW5kVXNlUG9pbnRlcnNJbmNvcnJlY3RseSA9IGFzeW5jICgpID0+Cit7
CisgICAgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAg
ICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywg
dWludCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICAgICAg
aWYgKGluZGV4ID09IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT55OworICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50
IGJhcih0aHJlYWQgRm9vKiBmb28pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZvb1swXSArIGZvb1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBmb28o
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICAg
ICAgZm9vLnggPSA0OTg7CisgICAgICAgICAgICAgICAgZm9vLnkgPSAxOTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYmFyKCZmb28pOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKwor
cnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9wbHVzLWVxdWFscy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzZmMDljYzY1ZjYyMTcxOTk1ZDZkZTU4ZjYwODUzMjI5MjY1MzFjYgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9wbHVzLWVxdWFscy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw0IEBACisKK1BBU1MgcGx1c0VxdWFscyAKK1BBU1MgcGx1c0VxdWFsc1Jlc3VsdCAK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcGx1cy1lcXVhbHMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
MmY1ZWNiNDE0NjI5NThiZDg3NTk5Y2NiODUyMThjODk1ZTFmMzk1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLmh0bWwKQEAgLTAsMCArMSwz
OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0
YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IG92ZXJyaWRlIHN1
YnNjcmlwdHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMucGx1c0VxdWFs
cyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28o
aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggKz0gNDI7CisgICAgICAgICAgICByZXR1
cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOworfQor
Cit3aGxzbFRlc3RzLnBsdXNFcXVhbHNSZXN1bHQgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBw
cm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4geCArPSA0MjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1
ICsgNDIpOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9pbnRlci1zcGVjLXRlc3Rz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVz
dHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyYzVkOGFjNTQ4MjhiMGJhZDgwMTA5MDNlMzUx
YTNkYTcyNWUwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
cG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBw
b2ludGVyVG9Qb2ludGVyIAorUEFTUyBwb2ludGVyVG9NZW1iZXIgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmJi
Mjk3YzgzODk5ZGM3ZjI2Njk1NWYxYjJkYmNkNjYyOWQ4YTU5Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3BvaW50ZXItc3BlYy10ZXN0cy5odG1sCkBAIC0wLDAg
KzEsNTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04Pgor
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCB0aGUgV0hM
U0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLnBv
aW50ZXJUb1BvaW50ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAg
ICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAg
ICB0aHJlYWQgaW50KiBwID0gJng7CisgICAgICAgICAgICB0aHJlYWQgaW50KiogcHAgPSAmcDsK
KyAgICAgICAgICAgIGludCp0aHJlYWQqdGhyZWFkIHFxID0gcHA7CisgICAgICAgICAgICBpbnQg
cmVzdWx0ID0gMDsKKyAgICAgICAgICAgIHggPSA0MjsKKyAgICAgICAgICAgICpwID0gNzY7Cisg
ICAgICAgICAgICByZXN1bHQgKz0geDsKKyAgICAgICAgICAgICoqcHAgPSAzOTsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSB4OworICAgICAgICAgICAgKipxcSA9IDgzOworICAgICAgICAgICAgcmVz
dWx0ICs9IHg7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgYDs7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdKSwgNzYgKyAzOSArIDgzKTsKK30KKword2hsc2xUZXN0cy5wb2ludGVyVG9NZW1iZXIgPSBh
c3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAg
ICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsb2F0MyB4Owor
ICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdCogeSA9ICZ4WzFdOworICAgICAgICAgICAgfQor
ICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAg
ICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsb2F0M3gzIHg7
CisgICAgICAgICAgICAgICAgdGhyZWFkIGZsb2F0MyogeSA9ICZ4WzFdOworICAgICAgICAgICAg
fQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb3N0Zml4LXByZWZp
eC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3NWJkZjEwZjYxYjRlODNlMWEyNjRjYjdjOGE2ZjZh
NTk0MWM0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9z
dGZpeC1wcmVmaXgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKKworUEFTUyBwcmVmaXhQ
bHVzUGx1cyAKK1BBU1MgcHJlZml4UGx1c1BsdXNSZXN1bHQgCitQQVNTIHBvc3RmaXhQbHVzUGx1
cyAKK1BBU1MgcG9zdGZpeFBsdXNQbHVzUmVzdWx0IAorUEFTUyBwcmVmaXhNaW51c01pbnVzIAor
UEFTUyBwcmVmaXhNaW51c01pbnVzUmVzdWx0IAorUEFTUyBwb3N0Zml4TWludXNNaW51cyAKK1BB
U1MgcG9zdGZpeE1pbnVzTWludXNSZXN1bHQgCitQQVNTIHBsdXNFcXVhbHMgCitQQVNTIHBsdXNF
cXVhbHNSZXN1bHQgCitQQVNTIG1pbnVzRXF1YWxzIAorUEFTUyBtaW51c0VxdWFsc1Jlc3VsdCAK
K1BBU1MgdGltZXNFcXVhbHMgCitQQVNTIHRpbWVzRXF1YWxzUmVzdWx0IAorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXguaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9wb3N0Zml4LXByZWZpeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4OGRjZjY0
OGFlMjUwODViNzRkODY4ZWZhZjJlMzE1MzAwNTI3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXguaHRtbApAQCAtMCwwICsxLDE3MiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBu
YW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4
LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLnByZWZpeFBsdXNQbHVzID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgeworICAgICAgICAgICAgKyt4OworICAgICAgICAgICAgcmV0dXJuIHg7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjUpOworfQorCit3aGxzbFRlc3RzLnBy
ZWZpeFBsdXNQbHVzUmVzdWx0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICsr
eDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2NSk7Cit9CisKK3dobHNsVGVz
dHMucG9zdGZpeFBsdXNQbHVzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgeCsrOworICAg
ICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjUp
OworfQorCit3aGxzbFRlc3RzLnBvc3RmaXhQbHVzUGx1c1Jlc3VsdCA9IGFzeW5jICgpID0+Cit7
CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB4Kys7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCld
KSwgNjQpOworfQorCit3aGxzbFRlc3RzLnByZWZpeE1pbnVzTWludXMgPSBhc3luYyAoKSA9Pgor
eworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7
CisgICAgICAgICAgICAtLXg7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAg
IGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KDY0KV0pLCA2Myk7Cit9CisKK3dobHNsVGVzdHMucHJlZml4TWludXNNaW51
c1Jlc3VsdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGlu
dCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAtLXg7CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjMpOworfQorCit3aGxzbFRlc3RzLnBvc3RmaXhN
aW51c01pbnVzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
aW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgeC0tOworICAgICAgICAgICAg
cmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjMpOworfQorCit3
aGxzbFRlc3RzLnBvc3RmaXhNaW51c01pbnVzUmVzdWx0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHgtLTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2NCk7
Cit9CisKK3dobHNsVGVzdHMucGx1c0VxdWFscyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHBy
b2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHggKz0gNDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDM4NSldKSwgMzg1ICsgNDIpOworfQorCit3aGxzbFRlc3RzLnBsdXNFcXVhbHNSZXN1bHQg
PSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGlu
dCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geCArPSA0MjsKKyAgICAgICAgfQor
ICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOworfQorCit3aGxzbFRlc3RzLm1pbnVz
RXF1YWxzID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQg
Zm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICB4IC09IDQyOworICAgICAgICAgICAg
cmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzODUpXSksIDM4NSAtIDQyKTsK
K30KKword2hsc2xUZXN0cy5taW51c0VxdWFsc1Jlc3VsdCA9IGFzeW5jICgpID0+IHsKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHggLT0gNDI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzODUpXSks
IDM4NSAtIDQyKTsKK30KKword2hsc2xUZXN0cy50aW1lc0VxdWFscyA9IGFzeW5jICgpID0+IHsK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgewor
ICAgICAgICAgICAgeCAqPSA0MjsKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9Cisg
ICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUgKiA0Mik7Cit9CisKK3dobHNsVGVzdHMudGltZXNF
cXVhbHNSZXN1bHQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAg
IGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4ICo9IDQyOwor
ICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUgKiA0Mik7Cit9CisKK3J1blRl
c3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1tb2RpZnktd3JpdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmllcy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4
MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9k
aWZ5LXdyaXRlLWhpZ2gtem9tYmllcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNT
IAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdo
LXpvbWJpZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0
ZS1oaWdoLXpvbWJpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lN2E3NTYxM2RjODVmNjIyMDFhNTJlZDQw
YzMzMzE5ZTI5NGU0MDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmllcy5odG1sCkBAIC0wLDAgKzEsOTkgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hh
ZGVyU291cmNlID0gYAorYm9vbCBmaWxsKHRocmVhZCBmbG9hdDR4NCogbWF0LCBmbG9hdCB2YWx1
ZSkKK3sKKyAgICBmbG9hdDR4NCByZXN1bHQ7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsg
aSA9IGkgKyAxKSB7CisgICAgICAgICAgICByZXN1bHRbaV0gPSBmbG9hdDQodmFsdWUsIHZhbHVl
LCB2YWx1ZSwgdmFsdWUpOworICAgIH0KKyAgICAqbWF0ID0gcmVzdWx0OworICAgIHJldHVybiB0
cnVlOworfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hh
ZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElE
IDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0NHg0IG1hdDsKKyAgICBmaWxsKCZt
YXQsIDQpOworCisgICAgZmxvYXQ0IHZlYzsKKyAgICB2ZWNbMF0gKz0gbWF0WzBdWzBdICsgbWF0
WzBdWzFdICsgbWF0WzNdWzJdOworCisgICAgZmxvYXQgdmFsdWUgPSA0MjsKKyAgICB2YWx1ZSAr
PSB2ZWNbMF07CisKKyAgICBtYXRbMF1bMF0gKz0gKG1hdFswXVswXSArPSAodmFsdWUgKz0gbWF0
WzBdWzBdKSk7CisKKyAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBtYXRbMF1bMF07Cit9
CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0
ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxOworCisgICAgY29uc3Qg
YnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29u
c3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5N
QVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
cmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHti
dWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcg
PSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRH
cm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmlu
ZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVy
LmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwor
ICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0
ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1
ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQz
MkFycmF5WzBdID09IDY2KQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAg
ICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihk
ZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIi
KTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1t
b2RpZnktd3JpdGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13
cml0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZjFiMTFmYjMxYTExZmJmMThkYjc5ZDlhM2E3MDUzOTU3
MGQ4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1t
b2RpZnktd3JpdGUuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhy
ZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBi
dWZmZXIgOiByZWdpc3Rlcih1MCkpIHsKKyAgICBidWZmZXJbMF0gPSAxOworICAgIGJ1ZmZlclsx
XSA9IGJ1ZmZlclswXSsrOworCisgICAgYnVmZmVyWzJdID0gMTsKKyAgICBidWZmZXJbM10gPSAr
K2J1ZmZlclsyXTsKKworICAgIGJ1ZmZlcls0XSA9IDE7CisgICAgYnVmZmVyWzRdICs9IDU7CisK
KyAgICBidWZmZXJbNV0gPSAxOworICAgIGJ1ZmZlcls1XSAqPSA3OworCisgICAgaW50IHRvdGFs
ID0gMTQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSArPSAyKSB7CisgICAgICAgIHRv
dGFsICs9IGk7CisgICAgfQorICAgIGJ1ZmZlcls2XSA9IHRvdGFsOworCisgICAgdG90YWwgPSAx
NDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgdG90YWwgKz0g
aTsKKyAgICB9CisgICAgYnVmZmVyWzddID0gdG90YWw7Cit9CitgOworCithc3luYyBmdW5jdGlv
biBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1
ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERl
dmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1v
ZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29t
cHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNo
YWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
ciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNv
bXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCAqIDg7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAg
IGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogYnVmZmVyLCBzaXplfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5k
aW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3Vw
TGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8g
e30KKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNv
bXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQ
aXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3Jv
dXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKKyAgICBjb21w
dXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZl
ci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRzID0gbmV3IEludDMyQXJyYXkocmVz
dWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c1swXSA9PSAyCisgICAgICAgICYmIHJl
c3VsdHNbMV0gPT0gMQorICAgICAgICAmJiByZXN1bHRzWzJdID09IDIKKyAgICAgICAgJiYgcmVz
dWx0c1szXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNbNF0gPT0gNgorICAgICAgICAmJiByZXN1
bHRzWzVdID09IDcKKyAgICAgICAgJiYgcmVzdWx0c1s2XSA9PSAzNAorICAgICAgICAmJiByZXN1
bHRzWzddID09IDU5KQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAg
IHRlc3RGYWlsZWQoIiIpOworICAgIGJ1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNz
ZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZWN1cnNpdmUtc3RydWN0
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVj
dHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlYjUzNDhkMDMzYzAzNDg4OGUxYmIxMDM3ZmNk
NGUxMDNkM2ExOTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
cmVjdXJzaXZlLXN0cnVjdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIG11
dHVhbGx5UmVjdXJzaXZlU3RydWN0IAorUEFTUyBtdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdFdpdGhQ
b2ludGVyc0Jyb2tlbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Jl
Y3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZl
LXN0cnVjdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MmYwOGQ0YWU5OThjNWFhOGIxNmU2YjI1MDEwNDdj
ZmJjODM0ZjBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Jl
Y3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwKQEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5UZXN0IGxvb3BzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hs
c2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3
aGxzbFRlc3RzLm11dHVhbGx5UmVjdXJzaXZlU3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBh
d2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAg
ICAgICAgICAgICAgIEJhciBiYXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJ1Y3Qg
QmFyIHsKKyAgICAgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgfQorICAgICAgICBg
KTsKKyAgICAgICAgCit9CisKK3dobHNsVGVzdHMubXV0dWFsbHlSZWN1cnNpdmVTdHJ1Y3RXaXRo
UG9pbnRlcnNCcm9rZW4gPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAg
ICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIHRocmVhZCBCYXIqIGJhcjsKKyAgICAgICAg
ICAgIGludCBmb287CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAg
ICB0aHJlYWQgRm9vKiBmb287CisgICAgICAgICAgICBpbnQgYmFyOworICAgICAgICB9CisgICAg
ICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAg
ICAgQmFyIGJhcjsKKyAgICAgICAgICAgIGZvby5mb28gPSA1NjQ7CisgICAgICAgICAgICBiYXIu
YmFyID0gNTM7CisgICAgICAgICAgICByZXR1cm4gZm9vLmJhci0+YmFyIC0gYmFyLmZvby0+Zm9v
OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7
Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3JldHVybi1sb2NhbC12YXJpYWJsZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3JldHVybi1sb2NhbC12YXJpYWJsZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLWxvY2FsLXZhcmlhYmxlLWV4cGVj
dGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLWxvY2FsLXZhcmlhYmxlLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvcmV0dXJuLWxvY2FsLXZhcmlhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMz
ZTM1NjdiNjhjNmQ2Y2VkNDYzZjc3NjdjYTZhMzhmMTg1NTBlNwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZXR1cm4tbG9jYWwtdmFyaWFibGUuaHRtbApAQCAt
MCwwICsxLDE0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBm
bG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgwKTsKK30KKworZmxvYXQgY29weShmbG9hdCB2KSB7CisgICAgZmxvYXQgbG9jYWwgPSB2Owor
ICAgIHJldHVybiBsb2NhbDsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkg
eworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlv
bjsKKyAgICByZXN1bHQuc2hhZGUgPSBjb3B5KHNoYWRlKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUs
IHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBj
b25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFk
ZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisK
KyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9h
dDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6
ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRl
MCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0
ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJp
bGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21l
bnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0
ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91
dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNy
ZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVh
dGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOworCisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
MV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VC
dWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJj
ZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIg
PSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3Vy
Y2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBy
ZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZm
ZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5n
ID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2Jp
bmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZh
cy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2Rl
dmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRl
eHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91
dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKwor
ICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7
IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNv
bnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCBy
ZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNs
ZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxs
OworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29t
bWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5l
bmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlz
aCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
Z2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmlj
ZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJl
T25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9y
ZXR1cm4tc3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
cmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjZGU3YmFlMzFiNzZj
MDQ4NjIwNDMwZGU2NzRlZTZiYWM3NGM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvcmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTAgQEAKKworUEFTUyByZXR1cm5JZiAKK1BBU1MgcmV0dXJuUmVmZXJlbmNlVG9TYW1lUGFyYW1l
dGVyIAorUEFTUyByZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlcldpdGhEaWZmZXJlbnRGdW5jdGlv
bnMgCitQQVNTIHJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyIAorUEFTUyByZXR1cm5SZWZlcmVu
Y2VUb0xvY2FsVmFyaWFibGVXaXRoTmVzdGluZyAKK1BBU1MgcmV0dXJuUmVmZXJlbmNlVG9Mb2Nh
bFZhcmlhYmxlIAorUEFTUyByZXR1cm5JbnRMaXRlcmFsVWludCAKK1BBU1MgcmV0dXJuSW50TGl0
ZXJhbEZsb2F0IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJu
LXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZXR1cm4tc3BlYy10
ZXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2MjFhNDBkNTkxNWZhZDY4MDAxN2EzZDg2Njc2NWQ4NTRj
NzdiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJu
LXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDIzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJs
b25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRl
c3RzID0ge307CisKK3dobHNsVGVzdHMucmV0dXJuSWYgPSBhc3luYyAoKSA9PiB7CisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgICAgICBp
ZiAoeCA9PSA3KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgeSA9IDg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnQgeSA9IDY7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAgICAg
ICAgICB5ID0gODsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4geTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGAp
OworCisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgIGlmICh4ID09IDcpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDEwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgYDsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoMyldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoNildKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCldKSwgMTApOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCg5KV0pLCAxMCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAg
ICAgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW50IHkgPSA2OworICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDg7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDEwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7CisgICAgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgaWYgKHgg
PT0gNykgeworICAgICAgICAgICAgICAgIHJldHVybiA4OworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB5ID0gOTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMyldKSwgOSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSks
IDkpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZUludCg1KV0pLCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNildKSwgOSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSks
IDgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZUludCg4KV0pLCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOSldKSwgOSk7CisgICAgYXdhaXQgY2hl
Y2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgICAgICBpZiAoeCA9
PSA3KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA4OworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIDExOworICAgICAgICAgICAgfQorICAgICAgICBgKTsK
KworICAgIHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgIGlmICh4ID09IDcpCisgICAgICAgICAg
ICAgICAgaW50IHkgPSA4OworICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICBg
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCg3KV0pLCA2KTsKK307CisKK3dobHNsVGVzdHMucmV0dXJuUmVmZXJlbmNlVG9T
YW1lUGFyYW1ldGVyID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBsdXMoYmFyKDUpLCBi
YXIoNykpOworICAgICAgICB9CisKKyAgICAgICAgaW50IHBsdXModGhyZWFkIGludCogeCwgdGhy
ZWFkIGludCogeSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICp4ICsgKnk7CisgICAg
ICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXIoaW50IHgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAmeDsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxNCk7Cit9OworCit3
aGxzbFRlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyV2l0aERpZmZlcmVudEZ1bmN0aW9u
cyA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqYmFyKDEwKSArICpiYXooMjApOworICAg
ICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXoo
aW50IHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmeTsKKyAgICAgICAgfQorICAg
IGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10pLCAzMCk7Cit9OworCit3aGxzbFRlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFyYW1l
dGVyID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9v
KGJvb2wgY29uZGl0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcihjb25k
aXRpb24sIDEsIDIpOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGJvb2wg
Y29uZGl0aW9uLCBpbnQgYSwgaW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBj
b25kaXRpb24gPyAmYSA6ICZiOworICAgICAgICB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSld
KSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlQm9vbChmYWxzZSldKSwgMik7Cit9OworCit3aGxzbFRlc3RzLnJldHVyblJl
ZmVyZW5jZVRvTG9jYWxWYXJpYWJsZVdpdGhOZXN0aW5nID0gYXN5bmMgKCkgPT4geworICAgIGxl
dCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpiYXIoKSArICpiYXooKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQq
IGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhID0gMjA7CisgICAgICAgICAgICBy
ZXR1cm4gJmE7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXooKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQgYSA9IDIyOworICAgICAgICAgICAgcmV0dXJuICZhOworICAg
ICAgICB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3dobHNsVGVzdHMucmV0dXJuUmVmZXJl
bmNlVG9Mb2NhbFZhcmlhYmxlID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAor
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpiYXIoKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCBhID0gNDI7CisgICAgICAgICAgICByZXR1cm4gJmE7CisgICAgICAgIH0KKyAg
ICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdKSwgNDIpOworfTsKKword2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRlcmFsVWludCA9
IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9ICJ1aW50IGZvbygpIHsgcmV0dXJuIDQy
OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdKSwgNDIpOworfTsKKword2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRlcmFsRmxvYXQg
PSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAiZmxvYXQgZm9vKCkgeyByZXR1cm4g
NDI7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdKSwgNDIpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXR0ZXIt
c3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2V0dGVy
LXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxZjJkNmMzNDFhYjUwYjY2ZjJi
OWFlNzg0MjdhNzI3MWIwNjg5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2V0dGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOCBAQAor
CitQQVNTIHNldHRlcldpdGhNYXRjaGVkVHlwZSAKK1BBU1Mgc2V0dGVyV2l0aE5vR2V0dGVyT3Zl
cmxvYWQgCitQQVNTIHNldHRlcldpdGhOb0dldHRlck92ZXJsb2FkRml4ZWQgCitQQVNTIHJlY3Vy
c2l2ZVNldHRlcnMgCitQQVNTIGxvbmVTZXR0ZXIgCitQQVNTIGxvbmVTZXR0ZXJQb2ludGVyIAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2V0dGVyLXNwZWMtdGVzdHMu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXR0ZXItc3BlYy10ZXN0cy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg2MDBkNmE3YzgxY2Q0NGQ4MjQ5NDcxMTJmNjA3NTQ3OWVhZDY0OWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2V0dGVyLXNwZWMtdGVzdHMu
aHRtbApAQCAtMCwwICsxLDEzNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNo
YXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRs
ZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuc2V0
dGVyV2l0aE1hdGNoZWRUeXBlID0gYXN5bmMgKCkgPT4KK3sKKyAgICBjb25zdCBwcm9ncmFtID0g
YAorICAgICAgICBpbnQgb3BlcmF0b3IuZm9vKGludCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIDU7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLmZvbz0oaW50LCBpbnQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiA1NDM7CisgICAgICAgIH0KKyAgICAgICAg
aW50IGZvbygpIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgeC5mb28gPSA0MjsK
KyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9CisgICAgICAgIGludCBiYXIoKSB7Cisg
ICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIHJldHVybiB4LmZvbzsKKyAgICAgICAgfQor
ICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCA1NDMpOworICAgIC8vYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdKSwgNSk7Cit9CisKK3dobHNsVGVzdHMuc2V0dGVyV2l0
aE5vR2V0dGVyT3ZlcmxvYWQgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIHN0cnVj
dCBCYXIgeyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vKEZvbykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNTM0OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgQmFyIG9wZXJhdG9yLmZvbz0oQmFyLCBpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEJhcigpOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICAgICAg
Cit9CisKK3dobHNsVGVzdHMuc2V0dGVyV2l0aE5vR2V0dGVyT3ZlcmxvYWRGaXhlZCA9IGFzeW5j
ICgpID0+Cit7CisgICAgY29uc3QgcHJvZ3JhbSA9YAorICAgICAgICBzdHJ1Y3QgQmFyIHsgfQor
ICAgICAgICBpbnQgb3BlcmF0b3IuZm9vKEJhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIDUzNDsKKyAgICAgICAgfQorICAgICAgICBCYXIgb3BlcmF0b3IuZm9vPShCYXIsIGludCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhcigpOworICAgICAgICB9CisgICAgICAg
IGludCBmb28oKSB7CisgICAgICAgICAgICBCYXIgYmFyOworICAgICAgICAgICAgcmV0dXJuIGJh
ci5mb287CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcigpIHsKKyAgICAgICAgICAgIEJhciBi
YXI7CisgICAgICAgICAgICBiYXIuZm9vID0gNTI7CisgICAgICAgICAgICByZXR1cm4gYmFyLmZv
bzsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTM0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCA1MzQpOworfQorCit3aGxzbFRl
c3RzLnJlY3Vyc2l2ZVNldHRlcnMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0g
YAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAg
aW50IHk7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAgICBpbnQg
YTsKKyAgICAgICAgICAgIGludCBiOworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci5j
KEJhciBiYXIpIHsgcmV0dXJuIGJhci5hOyB9CisgICAgICAgIEJhciBvcGVyYXRvci5iYXIoRm9v
IGZvbykgeyBCYXIgYjsgYi5hID0gZm9vLng7IGIuYiA9IGZvby55OyByZXR1cm4gYjsgfQorICAg
ICAgICBCYXIgb3BlcmF0b3IuYz0oQmFyIGJhciwgaW50IG5ld3ZhbCkgeyBiYXIuYSA9IG5ld3Zh
bDsgcmV0dXJuIGJhcjsgfQorICAgICAgICBGb28gb3BlcmF0b3IuYmFyPShGb28gZm9vLCBCYXIg
bmV3dmFsKSB7IGZvby54ID0gbmV3dmFsLmE7IGZvby55ID0gbmV3dmFsLmI7IHJldHVybiBmb287
IH0KKyAgICAgICAgaW50IGYoKSB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAg
Zm9vLnggPSBmb28ueSA9IDM7CisgICAgICAgICAgICBmb28uYmFyLmMgPSA4OworICAgICAgICAg
ICAgcmV0dXJuIGZvby54KjEwICsgZm9vLnk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmIiwgW10pLCA4Myk7Cit9
CisKK3dobHNsVGVzdHMubG9uZVNldHRlciA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hl
Y2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vPShpbnQsIGlu
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAg
ICAgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3dobHNsVGVzdHMubG9uZVNldHRlclBv
aW50ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3IuZm9vPSh0aHJlYWQgaW50KiBwdHIsIGlu
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHRyOworICAgICAgICAg
ICAgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOwor
PC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2lt
cGxlLWFycmF5cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5
Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1Mg
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS1hcnJheXMuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtYXJyYXlzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRm
ZjkxODI5NjM5MjlmMTEwZWZkYmJhZTA0OTk1N2Q5ZThhM2Q3ZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtYXJyYXlzLmh0bWwKQEAgLTAsMCArMSwx
MjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29u
c3Qgc2hhZGVyU291cmNlID0gYAordm9pZCBmaWxsKHRocmVhZCBpbnRbXSBhcnJheSwgaW50IHZh
bHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKK1tudW10aHJlYWRzKDEsIDEsIDEp
XQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lz
dGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGlu
dFs0Ml0gYXJyYXk7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0dXJu
OworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAg
IGlmIChhcnJheVtpXSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFy
cmF5WzBdID0gNTE3OworICAgIGlmIChhcnJheVswXSAhPSA1MTcpCisgICAgICAgIHJldHVybjsK
KworICAgIHRocmVhZCBpbnRbXSBhcnJheVB0ciA9IEBhcnJheTsKKyAgICBpZiAoYXJyYXlQdHIu
bGVuZ3RoICE9IDQyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnRbNDJdIGFycmF5MjsKKyAg
ICBhcnJheTIgPSBhcnJheTsKKyAgICBpZiAoYXJyYXkyLmxlbmd0aCAhPSA0MikKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChhcnJheTJbMF0gIT0gNTE3KQorICAgICAgICByZXR1cm47CisKKyAg
ICBmaWxsKGFycmF5UHRyLCAxMzM3KTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheVB0
ci5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoYXJyYXlQdHJbaV0gIT0gMTMzNykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFycmF5W2ldICE9IDEzMzcpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFycmF5MlswXSAhPSA1MTcpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoYXJyYXkyLmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0dXJuOworICAg
IGZvciAodWludCBpID0gMTsgaSA8IGFycmF5Mi5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAo
YXJyYXkyW2ldICE9IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYnVmZmVy
WzBdID0gMTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZp
c2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdy
b3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwg
bGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHNpemUgPSBJbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKKworICAg
IGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3Qg
YnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEludDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDA7CisgICAgYnVmZmVyLnVubWFwKCk7CisKKyAg
ICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVz
YWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1
ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmlu
ZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3Qg
YmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6
IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVu
Y29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6
ZSk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5D
b21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRl
UGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goMSwgMSwgMSk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29t
bWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21t
YW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1
bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgIGxldCByZXN1bHRzSW50MzJBcnJheSA9IG5l
dyBJbnQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAgaWYgKHJlc3VsdHNJbnQzMkFy
cmF5WzBdID09PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAg
IHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsK
KyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLWdl
dHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBs
ZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjI3OWM5OGU0Yzc0YzBi
OGNjMDY2NmQzM2RhODdiZDgxNzc1MGU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDQgQEAKKworUEFTUyBzaW1wbGVHZXR0ZXIgCitQQVNTIHNpbXBsZVNldHRlciAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLWdldHRlci1zZXR0ZXIuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hY2MyNjIyYmJhNzAwZmFmM2Y0OWQ2YjFkNDY3MmMzMDYwYzk3NzYzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVy
Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNo
YXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRs
ZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisK
K3dobHNsVGVzdHMuc2ltcGxlR2V0dGVyID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFt
ID0gYAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9
CisgICAgICAgIGludCBvcGVyYXRvci55KEZvbyBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmb28ueDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvby54ID0gNzgwNDsKKyAgICAgICAg
ICAgIHJldHVybiBmb28ueTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzgwNCk7Cit9OworCit3
aGxzbFRlc3RzLnNpbXBsZVNldHRlciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9
IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28s
IGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLnggPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueSA9IDc4MDQ7CisgICAg
ICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDc4MDQpOworfTsK
KworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS10ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2I3NjYzZDA2OWQ0ZDU3ZGQ5YjkzMDViMDZjODhiNDMzY2Q4ZjY0MAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNyBAQAorCitQQVNTIHNpbXBsZVVucmVhY2hhYmxlQ29kZSAKK1BBU1Mgc2lt
cGxlTm9SZXR1cm4gCitQQVNTIHNpbXBsZVJlY3Vyc2l2ZVN0cnVjdCAKK1BBU1Mgc2ltcGxlUmVj
dXJzaW9uIAorUEFTUyBzaW1wbGVSZWN1cnNpb24yIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2ltcGxlLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzNzEzYzUxN2U4ZTYxYmI0OGE0MDZk
ODRkZWRlM2U1YWIxYjI5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zaW1wbGUtdGVzdHMuaHRtbApAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgor
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5zaW1wbGVVbnJlYWNoYWJsZUNvZGUgPSBhc3lu
YyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB2
b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGludCB4OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xU
ZXN0cy5zaW1wbGVOb1JldHVybiA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwo
ImludCBmb28oKSB7IH0iKTsKK30KKword2hsc2xUZXN0cy5zaW1wbGVSZWN1cnNpdmVTdHJ1Y3Qg
PSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAg
ICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAg
fQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5zaW1wbGVSZWN1cnNpb24gPSBhc3luYyAo
KSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB2b2lk
IGZvbyhpbnQgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb28oeCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLnNpbXBsZVJlY3Vyc2lvbjIg
PSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAg
ICAgICBpbnQgYmFyKGludCB4KSB7CisgICAgICAgICAgICAgICAgZm9vKHgpOworICAgICAgICAg
ICAgICAgIHJldHVybiB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oaW50
IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9vKGJhcih4KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS13
aGlsZS1sb29wLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUt
d2hpbGUtbG9vcC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNjZTAyOGI0MDQyZTc5ZGE5MmE1
YWQ3ZjI1NGU3YjljMWMyOGQ4MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zaW1wbGUtd2hpbGUtbG9vcC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisK
K1BBU1Mgc2ltcGxlV2hpbGUgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zaW1wbGUtd2hpbGUtbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBs
ZS13aGlsZS1sb29wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJjZWFjZTg1M2ZiMmIwZmIyZjg2YTBmY2Vl
ZWRkOWM4YzZmNTg3YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zaW1wbGUtd2hpbGUtbG9vcC5odG1sCkBAIC0wLDAgKzEsMjcgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29u
dGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qg
d2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLnNpbXBsZVdoaWxlID0gYXN5bmMgKCkgPT4g
eworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7
CisgICAgICAgICAgICB3aGlsZSAoeCA8IDEzKQorICAgICAgICAgICAgICAgIHggPSB4ICogMjsK
KyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMSldKSwg
MTYpOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLW51bGwtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLW51bGwtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI3MmMxY2FiZTA3YjYwMjRmOWViNzVkM2U2ODkxMDFjMDgxYmIyZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RvcmUtbnVsbC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1Mgc3RvcmVOdWxsIAorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc3RvcmUtbnVsbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3N0b3JlLW51bGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjQ0YjMyYzVlZDZkZTc2ZjI1YTlk
MDc3NDNhN2E3YmNjMTYxY2RiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3N0b3JlLW51bGwuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsK
Kword2hsc2xUZXN0cy5zdG9yZU51bGwgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdm9pZCBmb28oKSB7ICpudWxsID0gNDI7IH0K
KyAgICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0
bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS10by1wcm9w
ZXJ0eS11cGRhdGVzLXByb3Blcmx5LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RvcmUtdG8tcHJvcGVydHkt
dXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLXRvLXByb3BlcnR5
LXVwZGF0ZXMtcHJvcGVybHkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS10
by1wcm9wZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU0ZDU1YzUxNWE2
NzE2YWU1NDM4OWZhZTMxMGRmOGNmZTYyNzZkZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zdG9yZS10by1wcm9wZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwK
QEAgLTAsMCArMSwxNTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7Cisg
ICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCk7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIGludCB4OworICAgIGZsb2F0IHk7Cisg
ICAgaW50IHo7Cit9CisKK3N0cnVjdCBGb28geworICAgIEJhciBiYXI7CisgICAgQmFyIGJhcjI7
Cit9CisKK3RocmVhZCBGb28qIHB0cigpIHsKKyAgICBGb28gbG9jYWw7CisgICAgcmV0dXJuICZs
b2NhbDsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRl
eE91dCByZXN1bHQ7CisKKyAgICB0aHJlYWQgRm9vKiBwID0gcHRyKCk7CisgICAgcC0+YmFyMi55
ID0gMS4wOworICAgIGZsb2F0IHZhbHVlID0gcC0+YmFyMi55OworCisgICAgcmVzdWx0LnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gdmFsdWU7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUg
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUs
IHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAg
ICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxv
Y2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJp
YnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOwor
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zdHJ1Y3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3N0cnVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzYyMGVlMWIyODU4NDZjOGE2
ZmUyZmNmNDQ1Y2E2M2ZjZGE3ZGE1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9zdHJ1Y3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIGVt
cHR5U3RydWN0IAorUEFTUyBzZXR0aW5nQW5BcnJheUluc2lkZUFTdHJ1Y3QgCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdHJ1Y3QuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9zdHJ1Y3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDEwN2M4ZGUxY2I0MzFjMGQ5NzYy
ZTM5MDY0ZjY4NGExZjlhODFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3N0cnVjdC5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0i
bG9uZyI+Cis8dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hs
c2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3
aGxzbFRlc3RzLmVtcHR5U3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGAKKyAgICAgICAgc3RydWN0IFRoaW5neSB7IH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRoaW5neSB0aGluZ3k7CisgICAgICAgICAgICByZXR1cm4gNDY7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDQ2KTsKK307CisKK3dobHNsVGVzdHMuc2V0dGluZ0FuQXJy
YXlJbnNpZGVBU3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnRbMV0gYXJyYXk7CisgICAgICAgIH0K
KyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAg
ICAgICAgICB0aHJlYWQgRm9vKiBiYXIgPSAmZm9vOworICAgICAgICAgICAgYmFyLT5hcnJheVsw
XSA9IDIxOworICAgICAgICAgICAgcmV0dXJuIGZvby5hcnJheVswXTsKKyAgICAgICAgfQorICAg
IGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdKSwgMjEpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zd2l0Y2gtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N3aXRjaC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2YzYmY1MTNjNjlmYzZhNjNmYzgzMTI0ZjMxYmI4M2RmZTQ1MTMwMQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zd2l0Y2gtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHN3aXRjaEJyZWFrIAorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc3dpdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc3dpdGNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQ3MDYxYjE1YTA4ZWM1M2UxMTRhNjcyNzhkNjZj
YzRmZTFhMDY1YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
d2l0Y2guaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1l
dGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgor
PHRpdGxlPlRlc3QgcHJlZml4L3Bvc3RmaXguPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxz
bC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3do
bHNsVGVzdHMuc3dpdGNoQnJlYWsgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0g
YAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcmVz
dWx0ID0gMDsKKyAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgY2FzZSA3Njc6
CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDI3OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSA2OToKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gNzYyNDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9IDQ5OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDc2
NyldKSwgMjcpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg2OSldKSwgNzYyNCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApXSksIDQ5KTsKK30K
KworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXJuYXJ5LXNwZWMtdGVzdC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRlc3QtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjgyYjg4NjRmMTEwMTVmMmY0YzVlNmE3YjBmMDg1MWQ5YTI3Yzc0NzEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRl
c3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHRlcm5hcnlFeHByZXNzaW9u
IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRl
c3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXJuYXJ5LXNwZWMtdGVzdC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ5MGFhODM4ZTc0M2Q2ODAyZmQwMmJhYjMwOGIxYmE3OTc1ZmFjNDMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRl
c3QuaHRtbApAQCAtMCwwICsxLDk1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEg
Y2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRp
dGxlPlRlc3QgaW50IGJpdCBtYXRoLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRl
c3RzLnRlcm5hcnlFeHByZXNzaW9uID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0g
YAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
eCA8IDMgPyA0IDogNTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKGludCB4KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4geCA8IDEwID8gMTEgOiB4IDwgMTIgPyAxNCA6IDE1Owor
ICAgICAgICB9CisgICAgICAgIGludCBiYXooaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAzIDwgNCA/IHggOiA1OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNzY3KV0p
LCA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoMildKSwgNCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDgpXSksIDExKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW21ha2VJbnQoOSld
KSwgMTEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJiYXIiLCBbbWFrZUludCgxMCldKSwgMTQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbbWFrZUludCgxMSldKSwgMTQpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbbWFrZUlu
dCgxMildKSwgMTUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJiYXIiLCBbbWFrZUludCgxMyldKSwgMTUpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXoiLCBbbWFrZUludCgxNCldKSwgMTQpOwor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgKDQg
PCA1ID8geCA6IDcpID0gODsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgYXdhaXQg
Y2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgICAgICBpbnQgeTsKKyAgICAg
ICAgICAgICAgICAoMCA8IDEgPyB4IDogeSkgPSA0MjsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpbnQgeDsKKyAgICAgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgICAgICAgICB0aHJl
YWQgaW50KiB6ID0gJigwIDwgMSA/IHggOiB5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKno7
CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaW50IHg7CisgICAgICAgICAgICAgICAgaW50IHk7CisgICAgICAgICAgICAgICAgdGhyZWFk
IGludFtdIHogPSBAKDAgPCAxID8geCA6IHkpOworICAgICAgICAgICAgICAgIHJldHVybiAqejsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbnQgeDsKKyAgICAgICAgICAgICAgICBmbG9hdCB5OworICAgICAgICAgICAgICAgIHJldHVy
biA0IDwgNSA/IHggOiB5OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBj
aGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiA0IDwgNSA/IDYgOiA3LjA7CisgICAgICAgICAgICB9
CisgICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlc3QtaGFybmVzcy10
ZXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3Mt
dGVzdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTA3NTc3ZDUwNGQ5NmQ3N2RiYzU2MjMxNDQ5
MTYxZTA1MmUxNWM2MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC90ZXN0LWhhcm5lc3MtdGVzdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMyBAQAorCitQQVNT
IFJldHVybiBhIGxpdGVyYWwgb2YgdHlwZSBib29sLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVk
IGZsb2F0NCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCBpbnQgdmFsdWUuIAorUEFT
UyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWludCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3Rl
ZCBmbG9hdCB2YWx1ZS4gCitQQVNTIFVwbG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2YWx1ZS4gCitQ
QVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhw
ZWN0ZWQgaW50IHZhbHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAor
UEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQgdmFsdWUuIAorUEFTUyBVcGxvYWQgbWFueSBi
b29sIHZhbHVlcyBhbmQgcmV0dXJuIGEgY2FsY3VsYXRlZCByZXN1bHQuIAorUEFTUyBSZXR1cm4g
YW4gZXhwZWN0ZWQgZmxvYXQ0IHZhbHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGludCB2
YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCB1aW50IHZhbHVlLiAKK1BBU1MgUmV0dXJu
IGFuIGV4cGVjdGVkIGZsb2F0IHZhbHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0
NCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCBpbnQgdmFsdWUuIAorUEFTUyBSZXR1
cm4gYW4gZXhwZWN0ZWQgdWludCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9h
dCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDQgdmFsdWUuIAorUEFTUyBS
ZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVp
bnQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQgdmFsdWUuIAorUEFTUyBV
cGxvYWQgYW5kIGNhbGN1bGF0ZSBhIHJlc3VsdCBmcm9tIHZhcmllZCBhcmd1bWVudCB0eXBlcy4g
CitQQVNTIFN0b3JlIGludG8gYSBmbG9hdDRbXS4gCitQQVNTIFVwbG9hZCBhIGludFtdIGFuZCBz
dG9yZSBpbnRvIGEgaW50W10uIAorUEFTUyBVcGxvYWQgYSBmbG9hdDR4NFtdIGFuZCBzdG9yZSBp
bnRvIGEgZmxvYXQ0eDRbXS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1
ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCitQQVNTIFJldHVy
biBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCBm
bG9hdDR4NCB2YWx1ZS4gCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90
ZXN0LWhhcm5lc3MtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlc3QtaGFy
bmVzcy10ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUyOTE0NjIwNzJlYjIyZjU2OWJmNjNlM2JmNmJh
Nzk1NzZlNWQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90
ZXN0LWhhcm5lc3MtdGVzdC5odG1sCkBAIC0wLDAgKzEsMjY3IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgor
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K2NvbnN0IGVwc2lsb24gPSAwLjAwMDE7CisKKy8vIEZJWE1FOiBBZGQgInVjaGFyIiBiYWNrIGlu
IHdoZW4gb3BlcmF0b3IrKHVjaGFyLCB1Y2hhcikgaXMgYXZhaWxhYmxlLgorY29uc3QgbnVtZXJp
Y1NjYWxhclR5cGVzID0gWyJpbnQiLCAidWludCIsICJmbG9hdCJdOworCitjb25zdCBudW1lcmlj
U2NhbGFyRnVuY3MgPSB7CisgICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKKyAgICAidWNoYXIi
OiBjYWxsVWNoYXJGdW5jdGlvbiwKKyAgICAidWludCI6IGNhbGxVaW50RnVuY3Rpb24sCisgICAg
ImZsb2F0IjogY2FsbEZsb2F0RnVuY3Rpb24KK307CisKK2NvbnN0IHNjYWxhckFyZ01ha2VycyA9
IHsKKyAgICAiYm9vbCI6IG1ha2VCb29sLAorICAgICJpbnQiOiBtYWtlSW50LAorICAgICJ1Y2hh
ciI6IG1ha2VVY2hhciwKKyAgICAidWludCI6IG1ha2VVaW50LAorICAgICJmbG9hdCI6IG1ha2VG
bG9hdAorfTsKKworY29uc3QgYXJyYXlUeXBlTGVuZ3RocyA9IHsKKyAgICAiZmxvYXQ0IjogNCwK
KyAgICAiZmxvYXQ0eDQiOiAxNgorfTsKKworY29uc3QgYXJyYXlGdW5jcyA9IHsKKyAgICAiZmxv
YXQ0IjogY2FsbEZsb2F0NEZ1bmN0aW9uLAorICAgICJmbG9hdDR4NCI6IGNhbGxGbG9hdDR4NEZ1
bmN0aW9uLAorfTsKKworY29uc3QgYXJyYXlBcmdNYWtlcnMgPSB7CisgICAgImZsb2F0NCI6IG1h
a2VGbG9hdDQsCisgICAgImZsb2F0NHg0IjogbWFrZUZsb2F0NHg0Cit9OworCitjb25zdCBmbG9h
dDR4NGV4cGVjdGVkID0gWzAsIDQsIDgsIDEyLCAxLCA1LCA5LCAxMywgMiwgNiwgMTAsIDE0LCAz
LCA3LCAxMSwgMTVdOworY29uc3QgZmxvYXQ0eDRDb2x1bW5FeHBlY3RlZCA9IFswLCAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1XTsKK2NvbnN0IGZsb2F0
NGV4cGVjdGVkID0gWzAsIDEsIDIsIDNdOworCitsZXQgd2hsc2xUZXN0cyA9IHt9OworCit3aGxz
bFRlc3RzLmxpdGVyYWxzID0gKCkgPT4geworICAgIGNoZWNrQm9vbHMoIlJldHVybiBhIGxpdGVy
YWwgb2YgdHlwZSBib29sLiIsICJyZXR1cm4gdHJ1ZTsiKTsKKyAgICBjaGVja0FycmF5cygiZmxv
YXQ0IiwgInJldHVybiBmbG9hdDQoMCwgMSwgMiwgMyk7IiwgW10sIGZsb2F0NGV4cGVjdGVkKTsK
KyAgICBjaGVja051bWVyaWNTY2FsYXJzKCJyZXR1cm4gNDI7IiwgW10sIDQyKTsKK307CisKK3do
bHNsVGVzdHMuc2luZ2xlQXJndW1lbnQgPSAoKSA9PiB7CisgICAgY2hlY2tCb29scygiVXBsb2Fk
IGFuZCByZXR1cm4gYSBib29sIHZhbHVlLiIsICJyZXR1cm4gaW4wOyIsIFt0cnVlXSk7CisgICAg
Y2hlY2tBcnJheXMoImZsb2F0NCIsICJyZXR1cm4gaW4wOyIsIFtmbG9hdDRleHBlY3RlZF0sIGZs
b2F0NGV4cGVjdGVkKTsKKyAgICBjaGVja051bWVyaWNTY2FsYXJzKCJyZXR1cm4gaW4wOyIsIFs0
Ml0sIDQyKTsKK307CisKK3dobHNsVGVzdHMubWFueUFyZ3VtZW50cyA9ICgpID0+IHsKKyAgICBj
aGVja0Jvb2xzKCJVcGxvYWQgbWFueSBib29sIHZhbHVlcyBhbmQgcmV0dXJuIGEgY2FsY3VsYXRl
ZCByZXN1bHQuIiwKKyAgICAgICAgInJldHVybiBpbjAgJiBpbjEgJiBpbjIgJiBpbjMgJiBpbjQg
JiBpbjUgJiBpbjYgJiBpbjc7IiwKKyAgICAgICAgW3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRy
dWUsIHRydWUsIHRydWUsIHRydWVdKTsKKworICAgIGxldCBib2R5ID0gInJldHVybiBmbG9hdDQo
aW4wLngsIGluMS55LCBpbjIueiwgaW4zLncpOyIKKyAgICBsZXQgYXJncyA9IFtdOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBhcmdzLnB1c2goZmxvYXQ0ZXhwZWN0
ZWQpOworICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCBib2R5LCBhcmdzLCBmbG9hdDRleHBlY3Rl
ZCk7CisKKyAgICBib2R5ID0gYHJldHVybiBpbjAgKyBpbjEgKyBpbjIgKyBpbjMgKyBpbjQgKyBp
bjUgKyBpbjYgKyBpbjc7YDsKKyAgICBjaGVja051bWVyaWNTY2FsYXJzKGJvZHksIFswLCAxLCAy
LCAzLCA0LCA1LCA2LCA3XSwgMjgpOworfTsKKword2hsc2xUZXN0cy5idWZmZXJzV2l0aE9uZVZh
bHVlID0gKCkgPT4geworICAgIGNvbnN0IGJvZHkgPSBgcmV0dXJuIGluMFswXTtgCisgICAgY2hl
Y2tBcnJheXMoImZsb2F0NCIsIGJvZHksIFtbZmxvYXQ0ZXhwZWN0ZWRdXSwgZmxvYXQ0ZXhwZWN0
ZWQpOworICAgIGNoZWNrTnVtZXJpY1NjYWxhcnMoYm9keSwgW1s0Ml1dLCA0Mik7Cit9OworCit3
aGxzbFRlc3RzLm11bHRpcGxlQnVmZmVyQXJndW1lbnRzID0gKCkgPT4geworICAgIGxldCBib2R5
ID0gYAorICAgIGZsb2F0IHggPSBpbjBbMF0ueCArIGluMFsxXS54ICsgaW4wWzJdLnggKyBpbjEu
eCArIGluMlswXS54OworICAgIGZsb2F0IHkgPSBpbjBbMF0ueSArIGluMFsxXS55ICsgaW4wWzJd
LnkgKyBpbjEueSArIGluMlswXS55OworICAgIGZsb2F0IHogPSBpbjBbMF0ueiArIGluMFsxXS56
ICsgaW4wWzJdLnogKyBpbjEueiArIGluMlswXS56OworICAgIGZsb2F0IHcgPSBpbjBbMF0udyAr
IGluMFsxXS53ICsgaW4wWzJdLncgKyBpbjEudyArIGluMlswXS53OworCisgICAgcmV0dXJuIGZs
b2F0NCh4LCB5LCB6LCB3KTtgOworICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCBib2R5LCBbW2Zs
b2F0NGV4cGVjdGVkLCBmbG9hdDRleHBlY3RlZCwgZmxvYXQ0ZXhwZWN0ZWRdLCBmbG9hdDRleHBl
Y3RlZCwgW2Zsb2F0NGV4cGVjdGVkXV0sIFswLCA1LCAxMCwgMTVdKTsKKworICAgIGJvZHkgPSBg
cmV0dXJuIGluMFswXSArIGluMFsxXSArIGluMFsyXSArIGluMSArIGluMlswXTtgOworICAgIGNo
ZWNrTnVtZXJpY1NjYWxhcnMoYm9keSwgW1swLCAxLCAyXSwgMywgWzRdXSwgMTApOworfTsKKwor
d2hsc2xUZXN0cy5tdWx0aXBsZUFyZ3VtZW50VHlwZXMgPSAoKSA9PiB7CisgICAgY29uc3Qgc3Jj
ID0gYGZsb2F0IHRlc3QoaW50IGksIHVjaGFyIGMsIGZsb2F0NCBmNCwgZGV2aWNlIHVpbnRbXSB1
LCBkZXZpY2UgZmxvYXRbXSBmcykKKyAgICB7CisgICAgICAgIHJldHVybiBmbG9hdChpKSArIGZs
b2F0KGMpICsgZjQueCArIGY0LnkgKyBmNC56ICsgZjQudyArIGZsb2F0KHVbMF0pICsgZnNbMF0g
KyBmc1sxXTsKKyAgICB9YDsKKyAgICBjb25zdCBpID0gbWFrZUludCgxKTsKKyAgICBjb25zdCBj
ID0gbWFrZVVjaGFyKDIpOworICAgIGNvbnN0IGY0ID0gbWFrZUZsb2F0NChbNCwgNSwgNiwgN10p
OworICAgIGNvbnN0IHUgPSBtYWtlVWludChbM10pOworICAgIGNvbnN0IGZzID0gbWFrZUZsb2F0
KFs4LCA5XSk7CisgICAgd2ViR1BVUHJvbWlzZVRlc3QoKCkgPT4geworICAgICAgICByZXR1cm4g
Y2FsbEZsb2F0RnVuY3Rpb24oc3JjLCAidGVzdCIsIFtpLCBjLCBmNCwgdSwgZnNdKS50aGVuKHJl
c3VsdCA9PiB7CisgICAgICAgICAgICBhc3NlcnRfYXBwcm94X2VxdWFscyhyZXN1bHQsIDQ1LCBl
cHNpbG9uLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICAgICAgfSk7Cisg
ICAgfSwgIlVwbG9hZCBhbmQgY2FsY3VsYXRlIGEgcmVzdWx0IGZyb20gdmFyaWVkIGFyZ3VtZW50
IHR5cGVzLiIpOworfTsKKword2hsc2xUZXN0cy5idWZmZXJTdG9yZXMgPSAoKSA9PiB7CisgICAg
bGV0IHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNlIGZsb2F0NFtdIG91dCkgeworICAgICAgICBvdXRb
MF0gPSBmbG9hdDQoMCwgMSwgMiwgMyk7CisgICAgfWA7CisgICAgY29uc3QgZmxvYXQ0T3V0ID0g
bWFrZUZsb2F0NChbWzAsIDAsIDAsIDBdXSk7CisgICAgY2FsbFZvaWRGdW5jdGlvbihzcmMsICJ0
ZXN0IiwgZmxvYXQ0T3V0KTsKKworICAgIHdlYkdQVVByb21pc2VUZXN0KCgpID0+IHsKKyAgICAg
ICAgcmV0dXJuIGZsb2F0NE91dC5nZXRBcnJheUJ1ZmZlcigpLnRoZW4oYXJyYXlCdWZmZXIgPT4g
eworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZl
cik7CisgICAgICAgICAgICBmb3IgKGxldCBpOyBpIDwgNDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0W2ldLCBpLCAiVGVzdCBzdG9yZWQgZXhwZWN0
ZWQgdmFsdWVzLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9LCAiU3RvcmUg
aW50byBhIGZsb2F0NFtdLiIpOworCisgICAgc3JjID0gYHZvaWQgdGVzdChkZXZpY2UgaW50W10g
aW4sIGRldmljZSBpbnRbXSBvdXQpIHsKKyAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNTsg
aSA9IGkgKyAxKQorICAgICAgICAgICAgb3V0W2ldID0gaW5baV07CisgICAgfWA7CisgICAgY29u
c3QgYXJyYXkgPSBbMCwgMSwgMiwgMywgNF07CisgICAgY29uc3QgaW5wdXQgPSBtYWtlSW50KGFy
cmF5KTsKKyAgICBjb25zdCBvdXRwdXQgPSBtYWtlSW50KFswLCAwLCAwLCAwLCAwXSk7CisgICAg
Y2FsbFZvaWRGdW5jdGlvbihzcmMsICJ0ZXN0IiwgW2lucHV0LCBvdXRwdXRdKTsKKworICAgIHdl
YkdQVVByb21pc2VUZXN0KCgpID0+IHsKKyAgICAgICAgcmV0dXJuIG91dHB1dC5nZXRBcnJheUJ1
ZmZlcigpLnRoZW4oYXJyYXlCdWZmZXIgPT4geworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0g
bmV3IFVpbnQzMkFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHMoYXJyYXksIHJlc3VsdCwgIlRlc3Qgc3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKKyAg
ICAgICAgfSk7CisgICAgfSwgIlVwbG9hZCBhIGludFtdIGFuZCBzdG9yZSBpbnRvIGEgaW50W10u
Iik7Cit9OworCit3aGxzbFRlc3RzLmZsb2F0NHg0dGVzdHMgPSAoKSA9PiB7CisgICAgY29uc3Qg
c3JjID0gYHZvaWQgdGVzdChkZXZpY2UgZmxvYXQ0eDRbXSBpbiwgZGV2aWNlIGZsb2F0NHg0W10g
b3V0KSB7CisgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkKKyAgICAg
ICAgICAgIG91dFtpXSA9IGluW2ldOworICAgIH1gOworICAgIGNvbnN0IGlucHV0ID0gbWFrZUZs
b2F0NHg0KFtmbG9hdDR4NGV4cGVjdGVkLCBmbG9hdDR4NGV4cGVjdGVkLCBmbG9hdDR4NGV4cGVj
dGVkLCBmbG9hdDR4NGV4cGVjdGVkXSk7CisgICAgY29uc3Qgb3V0cHV0ID0gbWFrZUZsb2F0NHg0
KG5ldyBBcnJheSg2NCkuZmlsbCgwKSk7CisgICAgY2FsbFZvaWRGdW5jdGlvbihzcmMsICJ0ZXN0
IiwgW2lucHV0LCBvdXRwdXRdKTsKKworICAgIHdlYkdQVVByb21pc2VUZXN0KCgpID0+IHsKKyAg
ICAgICAgcmV0dXJuIG91dHB1dC5nZXRBcnJheUJ1ZmZlcigpLnRoZW4oYXJyYXlCdWZmZXIgPT4g
eworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZl
cik7CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAgICAgICAg
ICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikKKyAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0W2kgKiAxNiArIGpdLCBmbG9hdDR4NGV4cGVjdGVk
W2pdLCBlcHNpbG9uLCAiVGVzdCBzdG9yZWQgZXhwZWN0ZWQgdmFsdWVzLiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9LCAiVXBsb2FkIGEgZmxvYXQ0eDRbXSBhbmQgc3RvcmUg
aW50byBhIGZsb2F0NHg0W10uIik7CisKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0eDQiLCAicmV0
dXJuIGZsb2F0NHg0KGZsb2F0NCgwLCAxLCAyLCAzKSwgZmxvYXQ0KDQsIDUsIDYsIDcpLCBmbG9h
dDQoOCwgOSwgMTAsIDExKSwgZmxvYXQ0KDEyLCAxMywgMTQsIDE1KSk7IiwgW10sIGZsb2F0NHg0
ZXhwZWN0ZWQpOworICAgIGNoZWNrQXJyYXlzKCJmbG9hdDR4NCIsICJyZXR1cm4gaW4wOyIsIFtm
bG9hdDR4NGV4cGVjdGVkXSwgZmxvYXQ0eDRleHBlY3RlZCk7CisgICAgbGV0IG11bHRpcGxlNHg0
YXJncyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgICAgICBj
b25zdCBhcmcgPSBuZXcgQXJyYXkoMTYpOworICAgICAgICBhcmcuZmlsbCgwKTsKKyAgICAgICAg
YXJnW2ldID0gaTsKKyAgICAgICAgbXVsdGlwbGU0eDRhcmdzLnB1c2goYXJnKTsKKyAgICB9Cisg
ICAgY2hlY2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBpbjAgKyBpbjEgKyBpbjIgKyBpbjMg
KyBpbjQgKyBpbjUgKyBpbjYgKyBpbjcgKyBpbjggKyBpbjkgKyBpbjEwICsgaW4xMSArIGluMTIg
KyBpbjEzICsgaW4xNCArIGluMTU7IiwgbXVsdGlwbGU0eDRhcmdzLCBmbG9hdDR4NENvbHVtbkV4
cGVjdGVkKTsKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0eDQiLCAicmV0dXJuIGluMFswXTsiLCBb
W2Zsb2F0NHg0ZXhwZWN0ZWRdXSwgZmxvYXQ0eDRleHBlY3RlZCk7Cit9OworCit3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibG9hZCIsICgpID0+IHsKKyAgICB0cnkgeworICAgICAgICBmb3IgKGNv
bnN0IG5hbWUgaW4gd2hsc2xUZXN0cykgeworICAgICAgICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dp
dGgoIl8iKSkKKyAgICAgICAgICAgICAgICB3aGxzbFRlc3RzW25hbWVdKCk7CisgICAgICAgIH0K
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAKKyAgICAgICAgdGhyb3cg
ZTsKKyAgICB9Cit9KTsKKworLyogSGVscGVyIGZ1bmN0aW9ucyAqLworCitjb25zdCBjaGVja051
bWVyaWNTY2FsYXJzID0gKGJvZHksIGFyZ1ZhbHVlcywgZXhwZWN0ZWQpID0+IHsKKyAgICBsZXQg
ZnVuY3Rpb25zID0gW107CisgICAgbGV0IHNyYyA9ICIiOworICAgIGZvciAobGV0IHR5cGUgb2Yg
bnVtZXJpY1NjYWxhclR5cGVzKSB7CisgICAgICAgIGxldCBuYW1lLCB2YWx1ZXM7CisgICAgICAg
IFtzcmMsIG5hbWUsIHZhbHVlc10gPSBhcHBlbmRTY2FsYXJGdW5jdGlvblRvU291cmNlKHNyYywg
dHlwZSwgYm9keSwgYXJnVmFsdWVzKTsKKyAgICAgICAgZnVuY3Rpb25zLnB1c2goeyB0eXBlOiB0
eXBlLCBuYW1lOiBuYW1lLCBhcmdzOiB2YWx1ZXMsIGV4cGVjdGVkOiBleHBlY3RlZCB9KTsKKyAg
ICB9CisKKyAgICBmb3IgKGNvbnN0IGYgb2YgZnVuY3Rpb25zKSB7CisgICAgICAgIGNvbnN0IGNh
bGxGdW5jID0gbnVtZXJpY1NjYWxhckZ1bmNzW2YudHlwZV07CisgICAgICAgIHdlYkdQVVByb21p
c2VUZXN0KGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBjYWxsRnVuYyhzcmMsIGYu
bmFtZSwgZi5hcmdzKS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2Fw
cHJveF9lcXVhbHMocmVzdWx0LCBmLmV4cGVjdGVkLCBlcHNpbG9uLCAiVGVzdCByZXR1cm5lZCBl
eHBlY3RlZCB2YWx1ZS4iKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCBgUmV0dXJuIGFu
IGV4cGVjdGVkICR7Zi50eXBlfSB2YWx1ZS5gKTsKKyAgICB9Cit9OworCitjb25zdCBjaGVja0Jv
b2xzID0gKG1zZyA9ICJSZXR1cm4gYW4gZXhwZWN0ZWQgYm9vbCB2YWx1ZS4iLCBib2R5LCBhcmdW
YWx1ZXMgPSBbXSwgZXhwZWN0ZWQgPSB0cnVlKSA9PiB7CisgICAgY29uc3QgW3NyYywgbmFtZSwg
dmFsdWVzXSA9IGFwcGVuZFNjYWxhckZ1bmN0aW9uVG9Tb3VyY2UoIiIsICJib29sIiwgYm9keSwg
YXJnVmFsdWVzKTsgCisKKyAgICB3ZWJHUFVQcm9taXNlVGVzdChhc3luYyAoKSA9PiB7CisgICAg
ICAgIHJldHVybiBjYWxsQm9vbEZ1bmN0aW9uKHNyYywgbmFtZSwgdmFsdWVzKS50aGVuKHJlc3Vs
dCA9PiB7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZXhwZWN0ZWQsICJUZXN0
IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOworICAgICAgICB9LCBlID0+IHsKKyAgICAgICAg
ICAgIGlmICghKGUgaW5zdGFuY2VvZiBXZWJHUFVVbnN1cHBvcnRlZEVycm9yKSkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBlOworICAgICAgICB9KTsKKyAgICB9LCBtc2cpOworfTsKKworY29uc3Qg
Y2hlY2tBcnJheXMgPSAodHlwZSwgYm9keSwgYXJnVmFsdWVzID0gW10sIGV4cGVjdGVkKSA9PiB7
CisgICAgbGV0IGlucHV0QXJncyA9IFtdOworICAgIGxldCB2YWx1ZXMgPSBbXTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IGFyZ1ZhbHVlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAvLyBTdXBw
b3J0IGFycmF5cyBvZiBmbG9hdDQsIGluY2x1ZGluZyBvbmUgd2l0aCBhIHNpbmdsZSBmbG9hdDQu
CisgICAgICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gYXJnVmFsdWVzW2ldLmZsYXQoKS5sZW5ndGg7
CisgICAgICAgIGNvbnN0IGlzQnVmZmVyID0gYXJnVmFsdWVzW2ldLmxlbmd0aCA9PT0gMSB8fCB0
b3RhbExlbmd0aCA+IGFycmF5VHlwZUxlbmd0aHNbdHlwZV07CisgICAgICAgIGlucHV0QXJncy5w
dXNoKGAke2lzQnVmZmVyID8gImRldmljZSAiIDogIiJ9JHt0eXBlfSR7aXNCdWZmZXIgPyAiW10i
IDogIiJ9IGluJHtpfWApOworICAgICAgICB2YWx1ZXMucHVzaChhcnJheUFyZ01ha2Vyc1t0eXBl
XShhcmdWYWx1ZXNbaV0pKTsKKyAgICB9CisKKyAgICBjb25zdCBzcmMgPSBgJHt0eXBlfSAke3R5
cGV9VGVzdCgke2lucHV0QXJncy5qb2luKCIsICIpfSkgeyAke2JvZHl9IH0KKyAgICBgOworCisg
ICAgd2ViR1BVUHJvbWlzZVRlc3QoYXN5bmMgKCkgPT4geworICAgICAgICByZXR1cm4gYXJyYXlG
dW5jc1t0eXBlXShzcmMsIGAke3R5cGV9VGVzdGAsIHZhbHVlcykudGhlbihyZXN1bHQgPT4gewor
ICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheVR5cGVMZW5ndGhzW3R5cGVdOyAr
K2kpCisgICAgICAgICAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0W2ldLCBleHBl
Y3RlZFtpXSwgZXBzaWxvbiwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAg
ICAgIH0pOworICAgIH0sIGBSZXR1cm4gYW4gZXhwZWN0ZWQgJHt0eXBlfSB2YWx1ZS5gKTsKK30K
KworY29uc3QgYXBwZW5kU2NhbGFyRnVuY3Rpb25Ub1NvdXJjZSA9IChzcmMsIHR5cGUsIGJvZHks
IGFyZ1ZhbHVlcykgPT4geworICAgIGNvbnN0IG5hbWUgPSBgJHt0eXBlfVRlc3RgOworCisgICAg
bGV0IGlucHV0QXJncyA9IFtdOworICAgIGxldCB2YWx1ZXMgPSBbXTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IGFyZ1ZhbHVlcy5sZW5ndGg7ICsraSkgeworICAgICAgICBjb25zdCBpc0J1ZmZl
ciA9IEFycmF5LmlzQXJyYXkoYXJnVmFsdWVzW2ldKTsKKyAgICAgICAgaW5wdXRBcmdzLnB1c2go
YCR7aXNCdWZmZXIgPyAiZGV2aWNlICIgOiAiIn0ke3R5cGV9JHtpc0J1ZmZlciA/ICJbXSIgOiAi
In0gaW4ke2l9YCk7CisgICAgICAgIHZhbHVlcy5wdXNoKHNjYWxhckFyZ01ha2Vyc1t0eXBlXShh
cmdWYWx1ZXNbaV0pKTsKKyAgICB9CisKKyAgICBzcmMgKz0gYCR7dHlwZX0gJHtuYW1lfSgke2lu
cHV0QXJncy5qb2luKCIsICIpfSkgeyAke2JvZHl9IH0KKyAgICBgOworICAgIAorICAgIHJldHVy
biBbc3JjLCBuYW1lLCB2YWx1ZXNdOworfTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLWdldGRpbWVuc2lvbnMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLWdldGRpbWVuc2lvbnMt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZh
ZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4
dHVyZXMtZ2V0ZGltZW5zaW9ucy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1nZXRkaW1lbnNpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtZ2V0ZGltZW5zaW9ucy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE5ZjEyZjhhMWYzNmZiYThlOTNkM2E3MWFiYzA3ZmY0MDI2MjFmODQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtZ2V0ZGlt
ZW5zaW9ucy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorW251bXRocmVhZHMo
MSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0
aGVUZXh0dXJlIDogcmVnaXN0ZXIodDApLCBkZXZpY2UgdWludFtdIHRoZUJ1ZmZlciA6IHJlZ2lz
dGVyKHUxKSkgeworICAgIHVpbnQgd2lkdGg7CisgICAgdWludCBoZWlnaHQ7CisgICAgdWludCBu
dW1iZXJPZkxldmVsczsKKyAgICBHZXREaW1lbnNpb25zKHRoZVRleHR1cmUsIDAsICZ3aWR0aCwg
JmhlaWdodCwgJm51bWJlck9mTGV2ZWxzKTsKKyAgICB0aGVCdWZmZXJbMF0gPSB3aWR0aDsKKyAg
ICB0aGVCdWZmZXJbMV0gPSBoZWlnaHQ7CisgICAgdGhlQnVmZmVyWzJdID0gbnVtYmVyT2ZMZXZl
bHM7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxp
dHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5
b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2
aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNy
ZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHRleHR1cmVEZXNjcmlwdG9yID0ge3NpemU6IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0
aDogMX0sIGZvcm1hdDogInJnYmE4dW5vcm0iLCB1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlNBTVBM
RUR9OworICAgIGNvbnN0IHRleHR1cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgdGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDMsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9S
QUdFIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplOiBVaW50MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDN9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmdz
ID0gW3tiaW5kaW5nOiAwLCByZXNvdXJjZTogdGV4dHVyZVZpZXd9LCB7YmluZGluZzogMSwgcmVz
b3VyY2U6IGJ1ZmZlckJpbmRpbmd9XTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0g
e2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogYmluZEdyb3VwQmluZGluZ3N9Owor
ICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1h
bmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0Qmlu
ZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEs
IDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVm
ZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1
bHRzVWludDMyQXJyYXkgPSBuZXcgVWludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAg
ICBpZiAocmVzdWx0c1VpbnQzMkFycmF5WzBdID09IDIKKyAgICAgICAgJiYgcmVzdWx0c1VpbnQz
MkFycmF5WzFdID09IDIKKyAgICAgICAgJiYgcmVzdWx0c1VpbnQzMkFycmF5WzJdID09IDEpCisg
ICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7
CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIpOwor
ICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1sb2FkLWV4cGVjdGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC1l
eHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC90ZXh0dXJlcy1sb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE0ZmUwZmM4NGU5ZDQy
Njc3OGMyODExNmJlZTJhZjNhNGFiNmYwNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC90ZXh0dXJlcy1sb2FkLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisK
K2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0
dXJlIDogcmVnaXN0ZXIodDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gTG9hZCh0aGVU
ZXh0dXJlLCBpbnQyKDAsIDApKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAg
ICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1
dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAg
Y29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlz
aWJpbGl0eTogNywgdHlwZTogInNhbXBsZWQtdGV4dHVyZSJ9XX07CisgICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdy
b3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZy
YWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9y
U3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBs
YXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2
ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0g
PSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZl
ckRlc2NyaXB0b3IgPSB7c2l6ZTogVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAy
ICogMiwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQyB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07CisgICAgY29uc3QgdGV4dHVyZURhdGFCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHRleHR1cmVEYXRhQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdGV4dHVyZURh
dGFCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHRleHR1cmVEYXRhQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXkgPSBuZXcgVWludDhB
cnJheSh0ZXh0dXJlRGF0YUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZl
clVpbnQ4QXJyYXlbMF0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzFd
ID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsyXSA9IDI1NTsKKyAgICB0
ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbM10gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZm
ZXJVaW50OEFycmF5WzRdID0gMTI4OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs1
XSA9IDEyODsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbNl0gPSAxMjg7CisgICAg
dGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzddID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVm
ZmVyVWludDhBcnJheVs4XSA9IDEyODsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlb
OV0gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzEwXSA9IDEyODsKKyAg
ICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTFdID0gMjU1OworICAgIHRleHR1cmVEYXRh
QnVmZmVyVWludDhBcnJheVsxMl0gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFy
cmF5WzEzXSA9IDEyODsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTRdID0gMTI4
OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxNV0gPSAyNTU7CisgICAgdGV4dHVy
ZURhdGFCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHRleHR1cmVEZXNjcmlwdG9yID0ge3Np
emU6IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDogMX0sIGZvcm1hdDogInJnYmE4dW5vcm0i
LCB1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlNBTVBMRUQgfCBHUFVUZXh0dXJlVXNhZ2UuVFJBTlNG
RVJfRFNUfTsKKyAgICBjb25zdCB0ZXh0dXJlID0gZGV2aWNlLmNyZWF0ZVRleHR1cmUodGV4dHVy
ZURlc2NyaXB0b3IpOworICAgIGNvbnN0IHRleHR1cmVWaWV3ID0gdGV4dHVyZS5jcmVhdGVEZWZh
dWx0VmlldygpOworCisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZ3MgPSBbe2JpbmRpbmc6IDAs
IHJlc291cmNlOiB0ZXh0dXJlVmlld31dOworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3Ig
PSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBiaW5kR3JvdXBCaW5kaW5nc307
CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1
Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJn
cmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBD
aGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dh
cENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcg
PSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorCisgICAgY29u
c3QgYnVmZmVyQ29weVZpZXcgPSB7YnVmZmVyOiB0ZXh0dXJlRGF0YUJ1ZmZlciwgcm93UGl0Y2g6
IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogMiwgaW1hZ2VIZWlnaHQ6IFVpbnQ4
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogMiAqIDJ9OworICAgIGNvbnN0IHRleHR1cmVD
b3B5VmlldyA9IHt0ZXh0dXJlOiB0ZXh0dXJlfTsKKyAgICBjb25zdCBjb3B5U2l6ZSA9IHt3aWR0
aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDogMX07CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZl
clRvVGV4dHVyZShidWZmZXJDb3B5VmlldywgdGV4dHVyZUNvcHlWaWV3LCBjb3B5U2l6ZSk7CisK
KyAgICBjb25zdCBjbGVhckNvbG9yID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNv
bnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCBy
ZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNs
ZWFyQ29sb3J9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9
CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2
aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVh
cmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3RleHR1cmVzLXNhbXBsZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3RleHR1cmVzLXNhbXBsZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYz
MzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4
dHVyZXMtc2FtcGxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtc2Ft
cGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTM0NWU0NzcwNGZmMWEwYWVkZTQ0YjI2MWM2MDYwOWJhZGQ5
ZTY3YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJl
cy1zYW1wbGUuaHRtbApAQCAtMCwwICsxLDE0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXgg
ZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1Zf
UG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZy
YWdtZW50U2hhZGVyKFRleHR1cmUyRDxmbG9hdDQ+IHRoZVRleHR1cmUgOiByZWdpc3Rlcih0MCks
IHNhbXBsZXIgdGhlU2FtcGxlciA6IHJlZ2lzdGVyKHMxKSkgOiBTVl9UYXJnZXQgMCB7CisgICAg
cmV0dXJuIFNhbXBsZSh0aGVUZXh0dXJlLCB0aGVTYW1wbGVyLCBmbG9hdDIoMC41LCAwLjUpKTsK
K30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdl
ID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsK
KyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29u
c3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25l
In07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhh
QmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMu
QUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0
IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAg
IGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07
CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7
dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInNh
bXBsZWQtdGV4dHVyZSJ9LCB7YmluZGluZzogMSwgdmlzaWJpbGl0eTogNywgdHlwZTogInNhbXBs
ZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3Jv
dXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChw
aXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwg
cmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRl
eElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0g
e3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4
QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgdGV4dHVyZURhdGFCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IFVpbnQ4QXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA0ICogMiAqIDIsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9TUkMgfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHRleHR1cmVE
YXRhQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih0ZXh0dXJlRGF0YUJ1ZmZlckRlc2NyaXB0
b3IpOworICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB0ZXh0
dXJlRGF0YUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdGV4dHVyZURhdGFCdWZm
ZXJVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGV4dHVyZURhdGFCdWZmZXJBcnJheUJ1ZmZl
cik7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzBdID0gMjU1OworICAgIHRleHR1
cmVEYXRhQnVmZmVyVWludDhBcnJheVsxXSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVp
bnQ4QXJyYXlbMl0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzNdID0g
MjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs0XSA9IDI1NTsKKyAgICB0ZXh0
dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbNV0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJV
aW50OEFycmF5WzZdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs3XSA9
IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbOF0gPSAyNTU7CisgICAgdGV4
dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzldID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVy
VWludDhBcnJheVsxMF0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzEx
XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTJdID0gMjU1OworICAg
IHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxM10gPSAyNTU7CisgICAgdGV4dHVyZURhdGFC
dWZmZXJVaW50OEFycmF5WzE0XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJy
YXlbMTVdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCB0ZXh0dXJlRGVzY3JpcHRvciA9IHtzaXplOiB7d2lkdGg6IDIsIGhlaWdodDogMiwgZGVwdGg6
IDF9LCBmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgdXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5TQU1QTEVE
IHwgR1BVVGV4dHVyZVVzYWdlLlRSQU5TRkVSX0RTVH07CisgICAgY29uc3QgdGV4dHVyZSA9IGRl
dmljZS5jcmVhdGVUZXh0dXJlKHRleHR1cmVEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB0ZXh0dXJl
VmlldyA9IHRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IHNhbXBsZXJE
ZXNjcmlwdG9yID0ge21hZ0ZpbHRlcjogImxpbmVhciIsIG1pbkZpbHRlcjogImxpbmVhciJ9Owor
ICAgIGNvbnN0IHNhbXBsZXIgPSBkZXZpY2UuY3JlYXRlU2FtcGxlcihzYW1wbGVyRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5ncyA9IFt7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IHRleHR1cmVWaWV3fSwge2JpbmRpbmc6IDEsIHJlc291cmNlOiBzYW1wbGVyfV07CisgICAg
Y29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmlu
ZGluZ3M6IGJpbmRHcm91cEJpbmRpbmdzfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisKKyAgICBjb25zdCBidWZmZXJDb3B5VmlldyA9IHtidWZmZXI6IHRl
eHR1cmVEYXRhQnVmZmVyLCByb3dQaXRjaDogVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDQgKiAyLCBpbWFnZUhlaWdodDogVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAy
ICogMn07CisgICAgY29uc3QgdGV4dHVyZUNvcHlWaWV3ID0ge3RleHR1cmU6IHRleHR1cmV9Owor
ICAgIGNvbnN0IGNvcHlTaXplID0ge3dpZHRoOiAyLCBoZWlnaHQ6IDIsIGRlcHRoOiAxfTsKKyAg
ICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9UZXh0dXJlKGJ1ZmZlckNvcHlWaWV3LCB0ZXh0
dXJlQ29weVZpZXcsIGNvcHlTaXplKTsKKworICAgIGNvbnN0IGNsZWFyQ29sb3IgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcn1dOworICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0g
e2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJl
bmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBh
c3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQ
aXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVm
ZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9
IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChb
Y29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlv
bihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0
aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90d28tZGltZW5zaW9uYWwtYXJyYXktZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIz
MTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdHdvLWRp
bWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNpb25hbC1hcnJheS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNpb25hbC1hcnJheS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNkYTM1OWI2YzhmMjExY2IwODkxNTZiN2JkYWUxZTk3OGZlYTRiMjMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdHdvLWRpbWVuc2lvbmFsLWFycmF5
Lmh0bWwKQEAgLTAsMCArMSwxMjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordm9pZCBmaWxsKHRocmVhZCBm
bG9hdFsxMF1bXSBhcnJheSwgZmxvYXRbMTBdIHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAw
OyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1
ZTsKKyAgICB9Cit9CisKK3ZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBhcnJheSwgZmxvYXQgdmFs
dWUpIHsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgPSBpICsgMSkg
eworICAgICAgICBhcnJheVtpXSA9IHZhbHVlOworICAgIH0KK30KKworYm9vbCBjb250YWlucyh0
aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0IHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkg
PSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKKyAgICAgICAgZm9yICh1aW50IGog
PSAwOyBqIDwgYXJyYXlbal0ubGVuZ3RoOyBqID0gaiArIDEpIHsKKyAgICAgICAgICAgIGlmIChh
cnJheVtpXVtqXSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY29udGFpbnModGhyZWFk
IGZsb2F0W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwg
YXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKKyAgICAgICAgaWYgKGFycmF5W2ldICE9IHZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZp
Y2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7CisgICAgZmxvYXRbMTBdWzVdIGFycmF5OworICAgIGlmIChhcnJheS5s
ZW5ndGggIT0gNSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY29udGFpbnMoQGFycmF5LCAw
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVu
Z3RoOyBpID0gaSArIDEpIHsKKyAgICAgICAgZmxvYXRbMTBdIHZhbHVlOworICAgICAgICBmaWxs
KEB2YWx1ZSwgZmxvYXQoaSkpOworICAgICAgICBhcnJheVtpXSA9IHZhbHVlOworICAgIH0KKwor
ICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAg
ICAgIGZsb2F0WzEwXSB2YWx1ZSA9IGFycmF5W2ldOworICAgICAgICBpZiAoIWNvbnRhaW5zKEB2
YWx1ZSwgZmxvYXQoaSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJ1ZmZl
clswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2Us
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAg
ICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJV
c2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRF
bmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNp
emUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
Q29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0
ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRH
cm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNv
bXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVz
dWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBu
ZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJB
cnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAg
dGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R5cGUtbWlz
bWF0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0
Y2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1Nzg2ODViZDBjYzM1OGUzYzhjNTU1ZTAxZWNk
ZjcyYWE4NjI1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
dHlwZS1taXNtYXRjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1MgdHlwZU1p
c21hdGNoUmV0dXJuIAorUEFTUyB0eXBlTWlzbWF0Y2hWYXJpYWJsZURlY2wgCitQQVNTIHR5cGVN
aXNtYXRjaEFzc2lnbm1lbnQgCitQQVNTIHR5cGVNaXNtYXRjaFJldHVyblBhcmFtIAorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdHlwZS1taXNtYXRjaC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YWVk
MjQ0M2M2ZDkzZDJiZTNiYWI5Zjc2MmM2YjZkYmFiOTQ0ODk5Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0Y2guaHRtbApAQCAtMCwwICsxLDYy
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRh
IG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRl
c3QgaGFybmVzcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4KKworY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLnR5cGVN
aXNtYXRjaFJldHVybiA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMTAuNTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNs
VGVzdHMudHlwZU1pc21hdGNoVmFyaWFibGVEZWNsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgZm9vKHVpbnQgeCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgeSA9IHg7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLnR5cGVNaXNtYXRjaEFzc2lnbm1lbnQgPSBhc3lu
YyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
dm9pZCBmb28odWludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB5Owor
ICAgICAgICAgICAgICAgIHkgPSB4OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKwor
d2hsc2xUZXN0cy50eXBlTWlzbWF0Y2hSZXR1cm5QYXJhbSA9IGFzeW5jICgpID0+Cit7CisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKHVpbnQgeCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworCis8L3NjcmlwdD4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJpdHdpc2Ut
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VpbnQtYml0d2lzZS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNkNjg0ZjUzNTkxMTViMDQ0MjY1MjNlZTY2ZGU5MjA0Nzhm
MGY1OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJp
dHdpc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorCitQQVNTIHVpbnRCaXRBbmQgCitQ
QVNTIHVpbnRCaXRPciAKK1BBU1MgdWludEJpdFhvciAKK1BBU1MgdWludEJpdE5vdCAKK1BBU1Mg
dWludExTaGlmdCAKK1BBU1MgdWludFJTaGlmdCAKK1BBU1MgdWludFNpbXBsZU1hdGggCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJpdHdpc2UuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJpdHdpc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjU5
MTM5OWFkYTZmMWM1NDZhOTZkMzVjYmFlM2M4NGFhNzdiNWM2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VpbnQtYml0d2lzZS5odG1sCkBAIC0wLDAgKzEsMTA4
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRh
IG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRl
c3QgaGFybmVzcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0
cy51aW50Qml0QW5kID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAg
ICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGEgJiBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxV
aW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgxKSwgbWFrZVVpbnQoNyldKSwg
MSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZVVpbnQoNjU1MzUpLCBtYWtlVWludCg0MildKSwgNDIpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1h
dGgucG93KDIsIDMyKSAtIDEpLCBtYWtlVWludChNYXRoLnBvdygyLCAzMikgLSA3KV0pLCA0Mjk0
OTY3Mjg5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFrZVVpbnQoODU3MzIpXSksIDApOworfQorCit3aGxz
bFRlc3RzLnVpbnRCaXRPciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhIHwgYjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMSksIG1ha2VVaW50KDcp
XSksIDcpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KSwgbWFrZVVpbnQoNDIpXSksIDY1NTM1KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludChNYXRoLnBvdygyLCAzMikgLSAxKSwgbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpICAtIDcp
XSksIDQyOTQ5NjcyOTUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDApLCBtYWtlVWludCg4NTczMildKSwgODU3MzIp
OworfQorCit3aGxzbFRlc3RzLnVpbnRCaXRYb3IgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHBy
b2dyYW0gPSBgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDEp
LCBtYWtlVWludCg3KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg2NTUzNSksIG1ha2VVaW50KDQyKV0pLCA2
NTQ5Myk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1ha2VVaW50KE1hdGgucG93
KDIsIDMyKSAtIDcpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDApLCBtYWtlVWludCg4NTczMildKSwgODU3
MzIpOworfQorCit3aGxzbFRlc3RzLnVpbnRCaXROb3QgPSBhc3luYyAoKSA9PiB7IAorICAgIGxl
dCBwcm9ncmFtID0gYAorICAgICAgICB1aW50IGZvbyh1aW50IGEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiB+YTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMSldKSwgNDI5
NDk2NzI5NCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpXSksIDQyOTQ5MDE3NjApOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1h
dGgucG93KDIsIDMyKSAtIDEpXSksIDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVp
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDApXSksIDQyOTQ5NjcyOTUpOwor
fQorCit3aGxzbFRlc3RzLnVpbnRMU2hpZnQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dy
YW0gPSBgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYSA8PCBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgxKSwg
bWFrZVVpbnQoNyldKSwgMTI4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg2NTUzNSksIG1ha2VVaW50KDIpXSksIDI2
MjE0MCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1ha2VVaW50KDUpXSksIDQy
OTQ5NjcyNjQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VVaW50KDApLCBtYWtlVWludCgzKV0pLCAwKTsKK307CisKK3dobHNs
VGVzdHMudWludFJTaGlmdCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhID4+IGI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDEpLCBtYWtlVWludCg3
KV0pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlVWludCg2NTUzNSksIG1ha2VVaW50KDIpXSksIDE2MzgzKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludChNYXRoLnBvdygyLCAzMikgLSAxKSwgbWFrZVVpbnQoNSldKSwgMTM0MjE3NzI3KTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlVWludCgwKSwgbWFrZVVpbnQoMyldKSwgMCk7Cit9OworCit3aGxzbFRlc3RzLnVpbnRTaW1w
bGVNYXRoID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gInVpbnQgZm9vKHVpbnQg
eCwgdWludCB5KSB7IHJldHVybiB4ICsgeTsgfSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1ha2VVaW50KDUp
XSksIDEyKTsKKworICAgIHByb2dyYW0gPSAidWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0
dXJuIHggLSB5OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQoNSldKSwgMik7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVp
bnQoNSksIG1ha2VVaW50KDcpXSksIDQyOTQ5NjcyOTQpOworCisgICAgcHJvZ3JhbSA9ICJ1aW50
IGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCAqIHk7IH0iOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBt
YWtlVWludCg1KV0pLCAzNSk7CisKKyAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcms6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk2MDIKKyAgICAvLyBwcm9ncmFt
ID0gInVpbnQgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4IC8geTsgfSI7CisgICAgLy8g
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZVVpbnQoNyksIG1ha2VVaW50KDIpXSksIDMpOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsK
Kzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12YXJpYWJsZS0yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTIuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTIuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmU4
NTJmMzk5ZTlhZGIwNTAxNzg0OTA2MjVjOTFiMDg1YjAyYjllCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi5odG1sCkBA
IC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21w
dXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1
MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBmbG9hdDQg
dmVjID0gZmxvYXQ0KHgseCx4LHgpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIo
KTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKwor
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKwor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGlu
ZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0
ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IpOworfQorCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgp
LnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9u
KCkgeworICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIp
OworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxl
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZh
cmlhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRk
MjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAor
UEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12YXJp
YWJsZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFi
bGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTdjZDYyMzY1NzU0OWEzOGM5NjVhYWNhZGE5ZGFiNzA1MWEz
NTMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VzZS11bmRl
ZmluZWQtdmFyaWFibGUuaHRtbApAQCAtMCwwICsxLDUxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10
aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0
W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRo
cmVhZElEKSB7CisgICAgZmxvYXQgZm9vOworICAgIGlmIChmb28pIHsKKyAgICAgICAgeCA9IHgg
KyAxOworICAgIH0KK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0
IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29u
c3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKK30KKwor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dpbmctZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3ZhcmlhYmxlLXNoYWRvd2luZy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWRlZTViNTg5YjQ3Yzg1YWIyYTQ4MDU5MWYwNzc3MjFmZWUwMjk4MQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dpbmct
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHZhcmlhYmxlU2hhZG93aW5nIAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUtc2hhZG93aW5n
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUtc2hhZG93aW5nLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2VjMWE0MzVkY2YxMDVlZmI1ZjZlNjIxMGY3MzZlYTYwMTdmNzJmYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dp
bmcuaHRtbApAQCAtMCwwICsxLDQ2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEg
Y2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRp
dGxlPlRlc3QgcHJlZml4L3Bvc3RmaXguPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNs
VGVzdHMudmFyaWFibGVTaGFkb3dpbmcgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFt
ID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHk7Cisg
ICAgICAgICAgICBpbnQgeCA9IDc7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IHggPSA4OworICAgICAgICAgICAgICAgIHkgPSB4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDgpOworCisgICAgcHJvZ3JhbSA9
IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5OworICAg
ICAgICAgICAgaW50IHggPSA3OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB4
ID0gODsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHkgPSB4OworICAgICAgICAgICAgcmV0
dXJuIHk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDcpOworfQorCitydW5UZXN0cyh3aGxzbFRl
c3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3ZlY3Rvci1zeW50YXgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3ZlY3Rvci1zeW50YXgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMGVkMDlhZjk5MjAz
ODAyYjYzOTE2YzZhNTY4MDFhNzQ1NmQwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvdmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBA
CisKK1BBU1MgdmVjdG9yVHlwZVN5bnRheCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3ZlY3Rvci1zeW50YXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC92
ZWN0b3Itc3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MxNWYzOTJiMWRmOWYyNzdmODk4MGU5M2Ri
NDY1YThjMjk5OWQxMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC92ZWN0b3Itc3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisK
K3dobHNsVGVzdHMudmVjdG9yVHlwZVN5bnRheCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHBy
b2dyYW0gPSBgCisgICAgICAgIGludCBmb28yKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50
MiB4OworICAgICAgICAgICAgdmVjdG9yPGludCwgMj4geiA9IGludDIoMywgNCk7CisgICAgICAg
ICAgICB4ID0gejsKKyAgICAgICAgICAgIHJldHVybiB4Lnk7CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgZm9vMygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludDMgeDsKKyAgICAgICAgICAg
IHZlY3RvcjxpbnQsIDM+IHogPSBpbnQzKDMsIDQsIDUpOworICAgICAgICAgICAgeCA9IHo7Cisg
ICAgICAgICAgICByZXR1cm4geC56OworICAgICAgICB9CisKKyAgICAgICAgaW50IGZvbzQoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQ0IHg7CisgICAgICAgICAgICB2ZWN0b3I8aW50LDQ+
IHogPSBpbnQ0KDMsIDQsIDUsIDYpOworICAgICAgICAgICAgeCA9IHo7CisgICAgICAgICAgICBy
ZXR1cm4geC53OworICAgICAgICB9YDsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgNSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDYpOwor
CisgICAgcHJvZ3JhbSA9IGAKKyAgICAgICAgdHlwZWRlZiBpID0gaW50OworICAgICAgICBpbnQg
Zm9vMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludDIgeDsKKyAgICAgICAgICAgIHZlY3Rv
cjxpLCAyPiB6ID0gaW50MigzLCA0KTsKKyAgICAgICAgICAgIHggPSB6OworICAgICAgICAgICAg
cmV0dXJuIHgueTsKKyAgICAgICAgfWA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgNCk7Cit9CitydW5UZXN0cyh3aGxzbFRl
c3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3doaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC93aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmODY5
YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CitkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvd2hpbGUtbG9vcC1icmVhay5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3do
aWxlLWxvb3AtYnJlYWsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTA2MzAzYTI4YjVmNDRiYTE4YmRiYzM0
NGQ4NGZkODgxOTljMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3doaWxlLWxvb3AtYnJlYWsuaHRtbApAQCAtMCwwICsxLDE0NiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2Ug
PSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlv
bjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91
dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBib29sIGIg
PSB0cnVlOworICAgIHVpbnQgaSA9IDA7CisgICAgd2hpbGUgKGkgPCAxMCkgeworICAgICAgICBp
ZiAoYikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2hhZGUgPSBz
aGFkZSArIDEuMDsKKyAgICAgICAgaSA9IGkgKyAxOworICAgIH0KKworICAgIHJlc3VsdC5wb3Np
dGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRl
LCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkg
eworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Cisg
ICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1h
dDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJM
b2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRy
aWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtz
dHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9
IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0
c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBb
e2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Cisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1h
cFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsK
KworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTldID0gMC4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygp
OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJB
cnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1
ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29u
c3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGlu
Z307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExh
eW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3Vw
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENo
YWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25z
dCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlw
dG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0
dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0
ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVh
dGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBi
OiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBv
dXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBz
dG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtj
b2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5k
ZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNz
RGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZl
cjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250
aW51ZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZElu
U29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWU3ZGI5YWIzZTJhMzk3MjIxNzlmMjAxYjRmNmE3ODM2MGY5ZTllMwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwK
QEAgLTAsMCArMSwxNDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7Cisg
ICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBW
ZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICB1aW50IGkgPSAwOwor
ICAgIHdoaWxlICgoc2hhZGUgPSBzaGFkZSArIDAuMSwgaSA8IDEwKSkgeworICAgICAgICBpZiAo
YikgeworICAgICAgICAgICAgaSA9IGkgKyAxOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgc2hhZGUgPSAwLjA7CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9u
ID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNo
YWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBj
b25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
ZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmds
ZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3
IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNv
bnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAi
cmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8g
R1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxs
OworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0
aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0
ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlk
ZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsK
KworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7Ymlu
ZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0
ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25T
dGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxl
Q291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZF
UlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVy
MCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNF0gPSAwLjE7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4xOworCisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4xOworCisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
Nl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxOV0gPSAwLjE7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJl
c291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBi
aW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0
LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5E
ZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3
YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3Ip
OworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUo
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVm
YXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNv
bW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEs
IGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1
dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3Jl
T3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9y
QXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBh
c3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNj
cmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0s
IFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAg
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
fSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC93aGxzbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3dobHNs
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTdjYTBkZDNiYmFmOGNkMTAxMzEyYjA4ZWE3OWM4Y2U4MWY4NmM0
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93aGxzbC5odG1s
CkBAIC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4
U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgaSA6IGF0dHJpYnV0
ZSgxKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDog
U1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBwb3NpdGlvbjsKK30KK2A7CisKK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0In07CisgICAgY29uc3QgaW5wdXQwID0g
e3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1
dDEgPSB7c3RyaWRlOiA0LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUxXX07CisgICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MCwgaW5wdXQxXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9y
bS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlv
dXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIw
RGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
OV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgp
OworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMURlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMSA9IGRl
dmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMURlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjFBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjEubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0MzJB
cnJheVswXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsxXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsyXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0
MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMS51bm1hcCgpOworCisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
MTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5k
aW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMCwgdmVydGV4
QnVmZmVyMV0sIFswLCAwXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rp
b24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2Fu
dmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5ndGgtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3dyb25nLWFyZ3VtZW50LWxlbmd0aC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjJjZTM2OTQ1ODE5ODU3YWZlMWQwNDE3MzRkYzBkMWUxNTEy
YjI4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy1h
cmd1bWVudC1sZW5ndGgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjEgQEAKKworUEFTUyBiaXRB
bmRXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBiaXROb3RXcm9uZ0FyZ3VtZW50TGVuZ3RoIAor
UEFTUyBiaXRPcldyb25nQXJndW1lbnRMZW5ndGggCitQQVNTIGJpdFhvcldyb25nQXJndW1lbnRM
ZW5ndGggCitQQVNTIGRlY1dyb25nQXJndW1lbnRMZW5ndGggCitQQVNTIGRpdmlkZVdyb25nQXJn
dW1lbnRMZW5ndGggCitQQVNTIGRvdE9wZXJhdG9yU2V0dGVyV3JvbmdBcmd1bWVudExlbmd0aCAK
K1BBU1MgZG90T3BlcmF0b3JXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBncmVhdGVyRXF1YWxX
cm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBncmVhdGVyV3JvbmdBcmd1bWVudExlbmd0aCAKK1BB
U1MgaW5jV3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgaW5kZXhPcGVyYXRvclNldHRlcldyb25n
QXJndW1lbnRMZW5ndGggCitQQVNTIGluZGV4T3BlcmF0b3JXcm9uZ0FyZ3VtZW50TGVuZ3RoIAor
UEFTUyBsU2hpZnRXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBtaW51c1dyb25nQXJndW1lbnRM
ZW5ndGggCitQQVNTIG1vZHVsb1dyb25nQXJndW1lbnRMZW5ndGggCitQQVNTIHBsdXNXcm9uZ0Fy
Z3VtZW50TGVuZ3RoIAorUEFTUyByU2hpZnRXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyB0aW1l
c1dyb25nQXJndW1lbnRMZW5ndGggCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC93cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC93cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWM0MTkxYjEwZjVjMGFh
ZWNjYmZmNTY0NWQ0MzNjZmU2Mjc1ZDkyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3dyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sCkBAIC0wLDAgKzEsMzY0IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5h
bWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgaW50IGJpdCBtYXRoLjwv
dGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgor
Y29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmJpdEFuZFdyb25nQXJndW1lbnRM
ZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvciYoRm9v
KSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAg
aW50IG9wZXJhdG9yJihGb28pIHsgcmV0dXJuIDUzNDsgfQorICAgICAgICBgKTsKKyAgICAgICAg
CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9v
IHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yJihGb28sIEZvbywgRm9vKSB7IHJldHVybiA3
NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmJpdE5vdFdyb25nQXJn
dW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yfigpIHsgcmV0dXJuIDMyOyB9CisgICAgICAg
IGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAg
ICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3J+KEZvbywgRm9vKSB7
IHJldHVybiA1MzQ7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5iaXRP
cldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFp
bCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGlu
dCBvcGVyYXRvcnwoKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yfChGb28pIHsgcmV0dXJuIDUzNDsgfQorICAgICAgICBg
KTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yfChGb28sIEZvbywgRm9v
KSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmJp
dFhvcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yXigpIHsgcmV0dXJuIDMy
OyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3Je
KEZvbykgeyByZXR1cm4gNTM0OyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBj
aGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAg
ICAgICBpbnQgb3BlcmF0b3JeKEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9CisgICAgICAg
IGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMuZGVjV3JvbmdBcmd1bWVudExlbmd0aCA9IGFz
eW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBpbnQgb3BlcmF0b3ItLSgpIHsgcmV0dXJuIDMyOyB9CisgICAgICAgIGApOworICAgICAgICAK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28g
eyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3ItLShGb28sIEZvbykgeyByZXR1cm4gNzY7IH0K
KyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5kaXZpZGVXcm9uZ0FyZ3VtZW50
TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIGludCBvcGVyYXRvci8oKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsK
KyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yLyhGb28pIHsgcmV0dXJuIDUz
NDsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9y
LyhGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9
Cit3aGxzbFRlc3RzLmRvdE9wZXJhdG9yU2V0dGVyV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5j
ICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgRm9vIG9wZXJhdG9yLmZvbz0oKSB7IHJldHVybiA0
MjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgRm9vIG9wZXJhdG9y
LmZvbz0oRm9vKSB7IHJldHVybiA0MjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAg
ICAgICAgICAgRm9vIG9wZXJhdG9yLmZvbz0oRm9vLCBpbnQsIGludCkgeyByZXR1cm4gNDI7IH0K
KyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5kb3RPcGVyYXRvcldyb25nQXJn
dW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbygpIHsgcmV0dXJuIDQyOyB9CisgICAg
ICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAg
ICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vKEZvbywg
aW50KSB7IHJldHVybiA0MjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3Rz
LmdyZWF0ZXJFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KCkg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj49KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKKyAgICAg
ICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsgfQorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KEZvbywgRm9vLCBGb28pIHsgcmV0
dXJuIHRydWU7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5ncmVhdGVy
V3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPigpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAg
YAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I+
KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQg
Y2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvcj4oRm9vLCBGb28sIEZvbykgeyByZXR1cm4gdHJ1ZTsgfQorICAg
ICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmluY1dyb25nQXJndW1lbnRMZW5ndGgg
PSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgaW50IG9wZXJhdG9yKysoKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAg
ICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yKysoRm9vLCBGb28pIHsgcmV0dXJuIDc2
OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMuaW5kZXhPcGVyYXRvclNl
dHRlcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KCkgeyByZXR1cm4g
NDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCkgeyByZXR1cm4gNDI7IH0KKyAg
ICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgaW50KSB7IHJldHVybiA0MjsgfQorICAgICAg
ICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAg
ICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiA0MjsgfQor
ICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmluZGV4T3BlcmF0b3JXcm9uZ0Fy
Z3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdKCkgeyByZXR1cm4gNDI7IH0KKyAgICAg
ICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgaW50IG9wZXJhdG9yW10oaW50KSB7IHJldHVybiA0MjsgfQorICAgICAgICBgKTsKKyAg
ICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQg
b3BlcmF0b3JbXShpbnQsIGludCwgaW50KSB7IHJldHVybiA0MjsgfQorICAgICAgICBgKTsKKyAg
ICAgICAgCit9Cit3aGxzbFRlc3RzLmxTaGlmdFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAo
KSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50
IG9wZXJhdG9yPDwoKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yPDwoRm9vKSB7IHJldHVybiA1MzQ7IH0KKyAgICAgICAg
YCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAg
ICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcjw8KEZvbywgRm9vLCBG
b28pIHsgcmV0dXJuIDc2OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMu
bWludXNXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVj
a0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvci0oKSB7IHJldHVybiAz
MjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9y
LShGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9
Cit3aGxzbFRlc3RzLm1vZHVsb1dyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgorewor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9y
JSgpIHsgcmV0dXJuIDMyOyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVj
a0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAg
ICBpbnQgb3BlcmF0b3IlKEZvbykgeyByZXR1cm4gNTM0OyB9CisgICAgICAgIGApOworICAgICAg
ICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBG
b28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IlKEZvbywgRm9vLCBGb28pIHsgcmV0dXJu
IDc2OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMucGx1c1dyb25nQXJn
dW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yKygpIHsgcmV0dXJuIDMyOyB9CisgICAgICAg
IGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAg
ICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IrKEZvbywgRm9vLCBG
b28pIHsgcmV0dXJuIDc2OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMu
clNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hl
Y2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3I+PigpIHsgcmV0dXJu
IDMyOyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0
b3I+PihGb28pIHsgcmV0dXJuIDUzNDsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yPj4oRm9vLCBGb28sIEZvbykgeyByZXR1cm4gNzY7IH0KKyAg
ICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy50aW1lc1dyb25nQXJndW1lbnRMZW5n
dGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yKigpIHsgcmV0dXJuIDMyOyB9CisgICAgICAgIGApOworICAg
ICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVj
dCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IqKEZvbykgeyByZXR1cm4gNTM0OyB9
CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IqKEZv
bywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KKwor
cnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy10eXBlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1
NTE4ZjFiNTlkNjQ2MmZhNjY1N2IxNTU3MmE0MjhiOGQ1MWNhYzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsOCBAQAorCitQQVNTIGRlY1dyb25nVHlwZXMgCitQQVNTIGluY1dyb25nVHlwZXMgCitQ
QVNTIGdyZWF0ZXJUaGFuV3JvbmdSZXR1cm5UeXBlIAorUEFTUyBncmVhdGVyRXF1YWxXcm9uZ1Jl
dHVyblR5cGUgCitQQVNTIGluZGV4U2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlIAorUEFTUyBzZXR0
ZXJXaXRoTWlzbWF0Y2hlZFR5cGUgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC93cm9uZy10eXBlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3dyb25nLXR5
cGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmUxYTE2MTY5MjlhYjNiMWFiMWE4ZDgzNjUxZGRlYzVmOGE3
NzU1MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy10
eXBlcy5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0
YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8
dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNs
VGVzdHMuZGVjV3JvbmdUeXBlcyA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3ItLShmbG9hdCkgeyByZXR1cm4g
MzI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQorCit3aGxzbFRlc3RzLmluY1dyb25nVHlw
ZXMgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yKysoZmxvYXQpIHsgcmV0dXJuIDMyOyB9CisgICAgICAgIGAp
OworICAgICAgICAKK30KKword2hsc2xUZXN0cy5ncmVhdGVyVGhhbldyb25nUmV0dXJuVHlwZSA9
IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAg
ICAgICBpbnQgb3BlcmF0b3I+KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSArIGI7IH0KKyAgICAg
ICAgYCk7CisgICAgICAgIAorfQorCit3aGxzbFRlc3RzLmdyZWF0ZXJFcXVhbFdyb25nUmV0dXJu
VHlwZSA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICBpbnQgb3BlcmF0b3I+PShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9
CisgICAgICAgIGApOworICAgICAgICAKK30KKword2hsc2xUZXN0cy5pbmRleFNldHRlcldpdGhN
aXNtYXRjaGVkVHlwZSA9IGFzeW5jICgpID0+Cit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICBmbG9hdCBvcGVyYXRvcltdKGludCwgdWludCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gNS40MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGludCBvcGVyYXRvcltdPShpbnQsIHVpbnQsIGludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hs
c2xUZXN0cy5zZXR0ZXJXaXRoTWlzbWF0Y2hlZFR5cGUgPSBhc3luYyAoKSA9PgoreworICAgIGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgZmxvYXQgb3BlcmF0b3IuZm9vKGludCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNS40MzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvci5mb289KGludCwgaW50KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGAp
OworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12
YWx1ZXMtMi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZi
NjVmOGIyMDJmYjlmZDIyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3Qmxh
Y2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvemVy
by1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvemVy
by1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBlOWQ4M2RiY2IzNmIyZjU4
MGNmNjlmN2JhOGQ3MGUyMjhjZDMwNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbApAQCAtMCwwICsxLDE2MiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25z
dCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwor
c3RydWN0IEJhciB7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB5MTsKKyAgICBmbG9hdCB5MjsK
KyAgICBmbG9hdCB5MzsKKyAgICBmbG9hdCB5NDsKKyAgICBmbG9hdCB5NTsKKyAgICBmbG9hdCB5
NjsKKyAgICBmbG9hdCB5NzsKKyAgICBmbG9hdCB5ODsKKyAgICBmbG9hdCB5OTsKKyAgICBmbG9h
dCB5MTA7CisgICAgZmxvYXQgeTExOworICAgIGZsb2F0IHkxMjsKKyAgICBmbG9hdCB5MTM7Cisg
ICAgZmxvYXQgeTE0OworICAgIGZsb2F0IHkxNTsKKyAgICBmbG9hdCB5MTY7CisgICAgZmxvYXQg
eTE3OworICAgIGZsb2F0IHkxODsKKyAgICBmbG9hdCB5MTk7CisgICAgZmxvYXQgeTIwOworfQor
Cit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1
dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3Vs
dDsKKworICAgIEJhciBiYXI7CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAg
ICByZXN1bHQuc2hhZGUgPSBiYXIueTIwOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6
IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEu
MCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0
IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNl
dDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0
OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0
ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1
dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNv
bnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdt
ZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3Rh
dGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5j
cmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTld
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3Vy
Y2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAg
cmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
ZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5p
c2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30K
KworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRl
dmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd0JsYWNrU3F1
YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTEyNTY4ZmFjYzEyZTM4MDkyNjk5M2M2ZTQyNDU2NTU4NzZlN2U5MgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWwK
QEAgLTAsMCArMSwxNDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7Cisg
ICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCk7Cit9CisKK3RocmVhZCBmbG9hdCogcHRyKCkgeworICAgIGZsb2F0IGxvY2FsOwor
ICAgIHJldHVybiAmbG9jYWw7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkp
IHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0KiBwID0gcHRyKCk7
CisgICAgKnAgPSAxLjA7CisgICAgZmxvYXQgdmFsdWUgPSAqcHRyKCk7IC8vIGNhbGxpbmcgcHRy
KCkgemVybyBpbml0aWFsaXplcy4KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwor
ICAgIHJlc3VsdC5zaGFkZSA9IHZhbHVlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6
IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEu
MCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0
IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNl
dDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0
OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0
ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1
dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNv
bnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdt
ZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3Rh
dGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5j
cmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTld
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3Vy
Y2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAg
cmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
ZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5p
c2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30K
KworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRl
dmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd0JsYWNrU3F1
YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="390034"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
    <flag name="commit-queue"
          id="390035"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374243</attachid>
            <date>2019-07-16 14:59:54 -0700</date>
            <delta_ts>2019-07-16 15:01:30 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-199838-20190716145953.patch</filename>
            <type>text/plain</type>
            <size>911002</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NDk1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmQ2NTFhODExZGM1OWE0NjA1OTU3
MGJiZjc1OTFkNDRjYTVmOTNiMC4uYjhjOTY4MmIyOThmN2U0OWQxYTMwMTVkNjhkZmMwMGVhYTIz
Y2U3OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMCBAQAorMjAxOS0wNy0xNiAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTW92ZSBXSExTTCB0
ZXN0cyB0byB0aGVpciBvd24gZm9sZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTk4MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICB3ZWJncHUvd2hsc2wtZm9vLmh0bWwgPT4gd2ViZ3B1L3dobHNsL2Zv
by5odG1sCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy13azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJiaXRy
YXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJiaXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9j
YXRpb25zLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2FyYml0cmFyeS12
ZXJ0ZXgtYXR0cmlidXRlLWxvY2F0aW9ucy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWFyYml0cmFyeS12ZXJ0ZXgtYXR0cmlidXRlLWxvY2F0aW9ucy5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4cGVjdGVk
LnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmd1bWVudC1ldmFs
dWF0aW9uLW9yZGVyLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJndW1l
bnQtZXZhbHVhdGlvbi1vcmRlci5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWFyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVjLXRlc3RzLWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1sZW5ndGgtc3Bl
Yy10ZXN0cy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1z
cGVjLXRlc3RzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJyYXktc3Bl
Yy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5
LXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYmFkLWFkZC1leHBlY3Rl
ZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC1leHBl
Y3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JhZC1hZGQuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtYWRkLmh0bWwuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL2JhZC1hbmRlci1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtYmFkLWFuZGVyLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvYmFkLWFuZGVyLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtYmFkLWFuZGVyLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JhZC1saXRlcmFscy1l
eHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWxp
dGVyYWxzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYmFkLWxpdGVyYWxz
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWxpdGVyYWxz
Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQu
dHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJpdHdpc2UtYm9vbC1v
cHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9iaXR3aXNlLWJvb2wtb3Bz
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYml0d2lzZS1ib29s
LW9wcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9ib29scy1leHBlY3RlZC50eHQ6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMtZXhwZWN0ZWQudHh0Lgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9ib29scy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWJvb2xzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1ZmZl
ci1mcmFnbWVudC1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWJ1ZmZlci1mcmFnbWVudC1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9idWZmZXItZnJhZ21lbnQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1idWZmZXItZnJhZ21lbnQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYnVm
ZmVyLWxlbmd0aC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2J1ZmZlci1sZW5ndGguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1idWZmZXItbGVuZ3RoLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1ZmZlci12ZXJ0
ZXgtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1i
dWZmZXItdmVydGV4LWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1ZmZl
ci12ZXJ0ZXguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZm
ZXItdmVydGV4Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0y
LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWls
dGluLXZlY3RvcnMtMi1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1aWx0
aW4tdmVjdG9ycy0yLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
YnVpbHRpbi12ZWN0b3JzLTIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYnVpbHRpbi12
ZWN0b3JzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1idWlsdGluLXZlY3RvcnMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9i
dWlsdGluLXZlY3RvcnMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1idWlsdGluLXZlY3RvcnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvY2FzdHMtZXhw
ZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLWV4
cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvY2FzdHMuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jYXN0cy5odG1sLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9jaGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJp
YWJsZXMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1l
eHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2NoZWNrZXItc2hvdWxkLXNldC10
eXBlLW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJlYWQtbW9k
aWZ5LXdyaXRlLXZhcmlhYmxlcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9jb21tZW50
LXBhcnNpbmctZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWNvbW1lbnQtcGFyc2luZy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2NvbW1lbnQtcGFyc2luZy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWNvbW1lbnQtcGFyc2luZy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9jb21wdXRl
LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21w
dXRlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvY29tcHV0ZS5odG1sOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtY29weS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL2NvcHkuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5
Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVyZW5j
ZS1vcmRlcmluZy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RlcmVmZXJl
bmNlLW9yZGVyaW5nLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZGVyZWZl
cmVuY2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVjay1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5
cGUtY2hlY2stZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZGVyZWZlcmVu
Y2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVjay5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5o
dG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3At
YnJlYWstZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9v
cC1icmVhay5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdo
aWxlLWxvb3AtYnJlYWsuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9v
cC1jb250aW51ZS1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1jb250aW51ZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUuaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvZG9udC1jcmFzaC1wYXJzaW5nLWVudW0tZXhwZWN0ZWQuaHRtbDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb250LWNyYXNoLXBhcnNpbmctZW51bS1l
eHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9kb250LWNyYXNoLXBhcnNpbmct
ZW51bS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvbnQtY3Jh
c2gtcGFyc2luZy1lbnVtLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RvdC1leHByZXNz
aW9ucy1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWRvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9k
b3QtZXhwcmVzc2lvbnMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kb3QtZXhwcmVzc2lvbnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG91YmxlLW5v
dC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG91
YmxlLW5vdC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RvdWJsZS1ub3Qu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3VibGUtbm90Lmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxp
Y2F0ZS1jdG9ycy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxpY2F0
ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3Qt
cHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZHVw
bGljYXRlcy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtZHVwbGljYXRlcy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxp
Y2F0ZXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNh
dGVzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUt
bGlmZXRpbWUtMi1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi1leHBlY3RlZC5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTIu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZW5zdXJl
LXByb3Blci12YXJpYWJsZS1saWZldGltZS0zLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0z
LWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFy
aWFibGUtbGlmZXRpbWUtMy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1sLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLWV4cGVjdGVkLmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJp
YWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9lbnN1
cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9lbnVtLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0OiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy1leHBlY3RlZC50
eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2VudW0tc3BlYy10ZXN0cy5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9lcXVhbGl0eS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXF1YWxpdHktZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9lcXVhbGl0eS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWVxdWFsaXR5Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2V4cGVjdGVk
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZmxvYXQtbWF0aC1leHBlY3RlZC50eHQ6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZmxvYXQtbWF0aC1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGguaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1mbG9hdC1tYXRoLmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2Zvci1sb29wLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1mb3ItbG9vcC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2Zvci1sb29wLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZm9y
LWxvb3AuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZ2V0dGVyLXNldHRlci10eXBlLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1nZXR0ZXIt
c2V0dGVyLXR5cGUtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9nZXR0ZXIt
c2V0dGVyLXR5cGUuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1n
ZXR0ZXItc2V0dGVyLXR5cGUuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaHVnZS1hcnJh
eS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVn
ZS1hcnJheS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2h1Z2UtYXJyYXku
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC1leHBlY3RlZC50eHQ6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaWYtc3RhdGVtZW50LWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaWYtc3RhdGVtZW50Lmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaWYtc3RhdGVtZW50Lmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0OiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmNyZW1lbnQtZGVjcmVtZW50Lmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5jcmVtZW50LWRlY3JlbWVu
dC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1hbmRlci1leHBlY3RlZC50eHQ6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXItZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1hbmRlci5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWFuZGVyLmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL2luZGV4LWdldHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0OiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWdldHRlci1zZXR0ZXItZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRl
ci5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1zZXR0ZXItZ2V0dGVyLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0
ZXItZ2V0dGVyLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW5kZXgtc2V0
dGVyLWdldHRlci5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlu
ZGV4LXNldHRlci1nZXR0ZXIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW50LWJpdC1t
YXRoLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbnQtYml0
LW1hdGguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0
LW1hdGguaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW50LWxpdGVyYWwtY29tcGFyZS1l
eHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxp
dGVyYWwtY29tcGFyZS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2ludC1s
aXRlcmFsLWNvbXBhcmUuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1pbnQtbGl0ZXJhbC1jb21wYXJlLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvZ2lj
YWwtbmVnYXRpb24tZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWxvZ2ljYWwtbmVnYXRpb24tZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbG9naWNhbC1uZWdhdGlvbi5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9s
b29wcy1icmVhay1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2xvb3BzLWJyZWFrLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
bG9vcHMtYnJlYWsuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMtY29udGludWUt
ZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29w
cy1jb250aW51ZS1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9sb29wcy1j
b250aW51ZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3Bz
LWNvbnRpbnVlLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLWV4cGVjdGVkLmh0
bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQu
aHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMtc3BlYy10ZXN0cy1leHBlY3RlZC50
eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0
cy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1zcGVjLXRl
c3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLmh0bWw6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvbG90cy1vZi1sb2NhbC12YXJpYWJsZXMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvdHMtb2YtbG9jYWwtdmFyaWFibGVzLWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG90cy1vZi1sb2NhbC12YXJpYWJsZXMuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb3RzLW9mLWxvY2FsLXZh
cmlhYmxlcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9sdmFsdWVzLWV4cGVjdGVkLnR4
dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sdmFsdWVzLWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbHZhbHVlcy5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVz
dHMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5
LXJlZi1zcGVjLXRlc3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21ha2UtYXJyYXkt
cmVmZXJlbmNlLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvbWF0cmljZXMtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cmljZXMtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMuaHRtbDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpeC0yLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtMi1leHBlY3RlZC50eHQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL21hdHJpeC0yLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbWF0
cml4LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1t
YXRyaXgtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9tYXRyaXgtbWVtb3J5
LWxheW91dC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9tYXRyaXgtbWVtb3J5LWxheW91dC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5b3V0Lmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL21hdHJpeC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW1hdHJpeC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Np
b24tcnZhbHVlLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5odG1sLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2
YWx1ZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtbG9vcC1leHBlY3RlZC5o
dG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLWV4
cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL25lc3RlZC1sb29wLmh0bWw6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvbnVsbC1hcmctZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLWV4cGVjdGVkLnR4dC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvbnVsbC1hcmcuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1udWxsLWFyZy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9udWxsLWFy
cmF5LXJlZi5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwt
YXJyYXktcmVmLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL251bGwtZGVyZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwt
ZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9udWxsLWRl
cmVmZXJlbmNlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVs
bC1kZXJlZmVyZW5jZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vb2ItYWNjZXNzLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNj
ZXNzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb29iLWFjY2Vzcy5odG1s
OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQtZXhwZWN0ZWQudHh0OiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9yLW92ZXJsb2FkLWV4
cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9h
ZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vdmVybG9hZC1leHBlY3RlZC50eHQ6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcmxvYWQtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vdmVybG9hZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL292ZXJyaWRlLXN1YnNjcmlwdC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVzLWVxdWFscy1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
cG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVzdHMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgtcHJlZml4LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXguaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1wb3N0Zml4LXByZWZpeC5odG1sLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtZXhwZWN0ZWQudHh0LgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMtZXhwZWN0
ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5
LXdyaXRlLWhpZ2gtem9tYmllcy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3JlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmllcy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmllcy5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLmh0bWwuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLWV4cGVjdGVkLnR4dDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1cnNpdmUtc3RydWN0cy1leHBlY3Rl
ZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWw6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVjdXJzaXZlLXN0cnVjdHMuaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvcmV0dXJuLWxvY2FsLXZhcmlhYmxlLWV4cGVjdGVk
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2Fs
LXZhcmlhYmxlLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3JldHVybi1s
b2NhbC12YXJpYWJsZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXJldHVybi1sb2NhbC12YXJpYWJsZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9yZXR1
cm4tc3BlYy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9yZXR1cm4tc3BlYy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3NldHRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3NldHRlci1zcGVjLXRlc3RzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3NpbXBsZS1hcnJheXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLWdldHRlci1zZXR0ZXIuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zaW1wbGUtdGVzdHMuaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLWV4cGVjdGVkLnR4dC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtd2hpbGUtbG9vcC5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9zdG9yZS1udWxsLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvc3RvcmUtbnVsbC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXN0b3JlLW51bGwuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
c3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXN0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMt
cHJvcGVybHktZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc3RvcmUtdG8t
cHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXN0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMtcHJvcGVybHkuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvc3RydWN0LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9zdHJ1Y3QuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1zdHJ1Y3QuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc3dpdGNoLWV4cGVjdGVk
LnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zd2l0Y2guaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvdGVybmFyeS1zcGVjLXRlc3QtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXRlcm5hcnktc3BlYy10ZXN0LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRlc3QuaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXJuYXJ5LXNwZWMtdGVzdC5odG1sLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3RleHR1cmVzLWdldGRpbWVuc2lvbnMtZXhwZWN0ZWQudHh0
OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVu
c2lvbnMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXh0dXJlcy1nZXRk
aW1lbnNpb25zLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtZ2V0ZGltZW5zaW9ucy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXh0dXJl
cy1sb2FkLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdGV4dHVyZXMtbG9hZC1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC90
ZXh0dXJlcy1sb2FkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGV4dHVyZXMtbG9hZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXh0dXJlcy1zYW1w
bGUtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10
ZXh0dXJlcy1zYW1wbGUtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvdGV4
dHVyZXMtc2FtcGxlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGV4dHVyZXMtc2FtcGxlLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNp
b25hbC1hcnJheS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvdHdvLWRpbWVuc2lvbmFsLWFycmF5Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5Lmh0bWwuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0LgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC90eXBlLW1pc21hdGNoLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdHlwZS1taXNtYXRjaC5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC91aW50LWJpdHdpc2UtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXVpbnQtYml0d2lzZS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3VpbnQtYml0d2lzZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXVpbnQtYml0d2lzZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC91c2UtdW5k
ZWZpbmVkLXZhcmlhYmxlLTItZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUtMi5o
dG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZp
bmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvdXNlLXVu
ZGVmaW5lZC12YXJpYWJsZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
dmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC12YXJpYWJsZS1zaGFkb3dpbmctZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dpbmcuaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC12YXJpYWJsZS1zaGFkb3dpbmcuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvdmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3ZlY3Rvci1zeW50YXguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC12ZWN0b3Itc3ludGF4Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3doaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtYnJlYWsuaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUuaHRtbDogUmVu
YW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3dobHNsLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvd3Jvbmct
YXJndW1lbnQtbGVuZ3RoLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5ndGgtZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdyb25nLXR5cGVzLWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLTItZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTItZXhwZWN0ZWQu
aHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0
bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXpl
LXZhbHVlcy0yLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12
YWx1ZXMtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWwuCisKIDIwMTktMDct
MTYgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hM
U0xdIERlc3VnYXIgZm9yIGxvb3BzIGFuZCB3aGlsZSBsb29wcwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggZDQxNGQ4NjgwMzhhMDU3OTQzZDc2NGJlMWJjZWZkZDJiYTNkZGFlMS4uYjhiYTliN2VkZjJl
MGRhN2RlMTg2NWI2ZWZhYzI1YzZjZDRmNDVkOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNDM5
LDcgKzM0MzksNyBAQCBmYXN0L2RvbS9saW5raWZ5LXBob25lLW51bWJlcnMuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTk5MDM5IGVkaXRpbmcvZGVsZXRpbmcvc21h
cnQtZGVsZXRlLXBhcmFncmFwaC0wMDMuaHRtbCBbIFNraXAgXQogCi13ZWJraXQub3JnL2IvMTk5
MDI4IHdlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3MtdGVzdC5odG1sIFsgU2xvdyBdCit3ZWJraXQu
b3JnL2IvMTk5MDI4IHdlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC5odG1sIFsgU2xvdyBd
CiAKIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzc29tLXZpZXcvb2Zmc2V0
VG9wTGVmdC1pbmxpbmUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTUyNTA5NzhkMzdlZmNh
MjZlYTI4MTdlOTY4ODJiZWU1NjJjODJkNC4uZDY1N2JjNzNmZmEyNWY0MzQwZjVlNzRmNzNhYzJl
YmMxNGM5ZjQ4MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtOTY3LDQgKzk2Nyw0IEBAIHdlYmtpdC5vcmcvYi8xOTU2MzUgc2Nyb2xsaW5n
Y29vcmRpbmF0b3IvbWFjL211bHRpcGxlLWZpeGVkLmh0bWwgWyBQYXNzIFRpbWVvdXQKICMgPHJk
YXI6Ly9wcm9ibGVtLzUxNTI0OTU4PiBSRUdSRVNTSU9OOiBbIENhdGFsaW5hIFdLMiBdIGh0dHAv
d3B0L3dlYmF1dGhuL3B1YmxpYy1rZXktY3JlZGVudGlhbC1jcmVhdGUtc3VjY2Vzcy11MmYuaHR0
cHMuaHRtbCBpcyBmYWlsaW5nCiBbIENhdGFsaW5hKyBdIGh0dHAvd3B0L3dlYmF1dGhuL3B1Ymxp
Yy1rZXktY3JlZGVudGlhbC1jcmVhdGUtc3VjY2Vzcy11MmYuaHR0cHMuaHRtbCBbIEZhaWx1cmUg
XQogCi13ZWJraXQub3JnL2IvMTk5NjUxIFsgTW9qYXZlIERlYnVnIF0gd2ViZ3B1L3dobHNsLWJ1
aWx0aW4tdmVjdG9ycy0yLmh0bWwgWyBTbG93IF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
Cit3ZWJraXQub3JnL2IvMTk5NjUxIFsgTW9qYXZlIERlYnVnIF0gd2ViZ3B1L3dobHNsL2J1aWx0
aW4tdmVjdG9ycy0yLmh0bWwgWyBTbG93IF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1s
b2NhdGlvbnMtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1
M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJi
aXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2Nh
dGlvbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhMDQxNDdkNTAxMDY1
Yzg0MmJhYWNmMTNiMzM3ZWRhMTQ2MDkyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJiaXRyYXJ5LXZlcnRl
eC1hdHRyaWJ1dGUtbG9jYXRpb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25z
dCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQot
dmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDE3MyksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDQ5OCkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVz
dWx0OwotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9
IHNoYWRlOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAg
cmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRl
ckxvY2F0aW9uOiAxNzMsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEg
PSB7c2hhZGVyTG9jYXRpb246IDQ5OCwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAg
ICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMCwg
YXR0cmlidXRlMV19OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBj
b25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3Rh
Z2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBk
ZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBp
cGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVS
ZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzdd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0g
LTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZm
ZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVm
ZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3Vy
Y2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBy
ZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHti
aW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3Vw
RGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3Jv
dXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0
Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2Us
IGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNv
bmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0
VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBj
b25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7
fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBj
b2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2
ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNv
bG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAg
ICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBh
c3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFz
cygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
LSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2Jv
ZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJndW1l
bnQtZXZhbHVhdGlvbi1vcmRlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDczNjJjMmE4MjNlNjYyNmE2NTg5NjIwMTRjOGE3N2UzMTc0OGMyZGYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWFyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXItZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgZXZhbHVhdGlvbk9yZGVyRm9yQXJn
dW1lbnRzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJndW1lbnQt
ZXZhbHVhdGlvbi1vcmRlci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFyZ3VtZW50
LWV2YWx1YXRpb24tb3JkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBl
YThkMTY1ZDBmMGQyZTAwODYxYjc1OGM0MjhiNjEyZTExN2I0My4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJn
dW1lbnQtZXZhbHVhdGlvbi1vcmRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBu
YW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5Db3B5aW5nLjwvdGl0bGU+Ci08
c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hs
c2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmV2YWx1YXRpb25PcmRlckZvckFyZ3VtZW50cyA9
IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkg
eyByZXR1cm4gKmJhcigxMCkgKyAqYmFyKDIwKTsgfQotCi0gICAgICAgIHRocmVhZCBpbnQqIGJh
cihpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gdmFsdWU7Ci0gICAg
ICAgICAgICByZXR1cm4gJng7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYmF6KCkgeyByZXR1
cm4gcGx1cyhiYXIoMTApLCBiYXIoMjApKTsgfQotCi0gICAgICAgIGludCBwbHVzKHRocmVhZCBp
bnQqIHgsIHRocmVhZCBpbnQqIHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqeCAr
ICp5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgNDApOwotfTsKLQotcnVuVGVz
dHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1sZW5ndGgtc3BlYy10ZXN0cy1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MzNlOGFhZjAyZTNhNDA0ZGQy
NDIwZjFjOWE5NGY3YjA3ZjRhN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIG5v
bkFycmF5UmVmQXJyYXlMZW5ndGhGYWlsIAotUEFTUyBub25BcnJheVJlZkFycmF5TGVuZ3RoU3Vj
Y2VlZCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0
aC1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktbGVuZ3Ro
LXNwZWMtdGVzdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3NzA0Y2Fl
ODM4YjllNWE4NTIwM2Y4M2JjNzg2YzMwZjM1YjA4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktbGVu
Z3RoLXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Ci08c2Ny
aXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xU
ZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLm5vbkFycmF5UmVmQXJyYXlMZW5ndGhGYWlsID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAg
IHRocmVhZCB1aW50KiBsZW5ndGhQdHIoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGludFs0Ml0gYXJyYXk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICYoYXJyYXkubGVuZ3RoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMubm9uQXJyYXlSZWZB
cnJheUxlbmd0aFN1Y2NlZWQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICB1aW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJy
YXk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAg
IHVpbnQgYmFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50Wzc1NF0gYXJyYXk7Ci0gICAg
ICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3RoOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzU0
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImJh
ciIsIFtdKSwgNzU0KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4NWIxZjZl
NmZmMDk0MWZjNjM4NGQ5MmM4MzgyYjI3ZDJiMDJiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktc3Bl
Yy10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotUEFT
UyBhcnJheVJlZlRvQXJyYXlSZWYgCi1QQVNTIGFzc2lnbkxlbmd0aCAKLVBBU1MgYXNzaWduTGVu
Z3RoSGVscGVyIAotUEFTUyBidWlsZEFycmF5VGhlblN1bUl0IAotUEFTUyBidWlsZEFycmF5VGhl
blN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSAKLVBBU1MgcGFzc2luZ0FycmF5VG9GdW5jdGlvbiAK
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LXNwZWMtdGVzdHMu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1zcGVjLXRlc3RzLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MmNkNGQwNzZjY2M0MzZiZDBjMTg3NTQzYTBm
NDVhN2JmZGUxZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LXNwZWMtdGVzdHMuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEg
Y2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRp
dGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5hcnJheVJlZlRvQXJyYXlSZWYgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgeDsKLSAgICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gQHg7Ci0gICAgICAgICAgICB0aHJl
YWQgaW50W11bXSBwcCA9IEBwOwotICAgICAgICAgICAgaW50W110aHJlYWRbXXRocmVhZCBxcSA9
IHBwOwotICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICB4ID0gNDI7Ci0g
ICAgICAgICAgICBwWzBdID0gNzY7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAgICAgICAg
ICAgIHBwWzBdWzBdID0gMzk7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAgICAgICAgICAg
IHFxWzBdWzBdID0gODM7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDc2ICsgMzkgKyA4Myk7Ci19Ci0K
LXdobHNsVGVzdHMuYXNzaWduTGVuZ3RoID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdm9pZCBmb28oKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJyYXk7Ci0gICAgICAgICAgICAgICAgKEBhcnJh
eSkubGVuZ3RoID0gNDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0K
LQotd2hsc2xUZXN0cy5hc3NpZ25MZW5ndGhIZWxwZXIgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdh
aXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGJhcih0aHJlYWQgZmxv
YXRbXSBhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcnJheS5sZW5ndGgg
PSA0MjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZvaWQgZm9vKCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmbG9hdFs3NTRdIGFycmF5OwotICAgICAgICAgICAgICAgIGJh
cihAYXJyYXkpOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5i
dWlsZEFycmF5VGhlblN1bUl0ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50WzQyXSBhcnJheTsK
LSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQyOyBpID0gaSArIDEpCi0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBpbnQoaSArIDUpOwotICAgICAgICAgICAgaW50IHJlc3VsdDsK
LSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQyOyBpID0gaSArIDEpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYXJyYXlbaV07Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0MiAqIDUgKyA0MiAqIDQxIC8gMik7Ci19
Ci0KLXdobHNsVGVzdHMuYnVpbGRBcnJheVRoZW5TdW1JdFVzaW5nQXJyYXlSZWZlcmVuY2UgPSBh
c3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBiYXIodGhyZWFk
IGludFtdIGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkg
PCA0MjsgaSA9IGkgKyAxKQotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaW50KGkgKyA1KTsK
LSAgICAgICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkg
PCA0MjsgaSA9IGkgKyAxKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGFycmF5
W2ldOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBpbnQg
Zm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50WzQyXSBhcnJheTsKLSAgICAgICAgICAg
IHJldHVybiBiYXIoQGFycmF5KTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIgKiA1ICsgNDIg
KiA0MSAvIDIpOwotfQotCi13aGxzbFRlc3RzLnBhc3NpbmdBcnJheVRvRnVuY3Rpb24gPSBhc3lu
YyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50WzEwXSBhcnI7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9
IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgYXJyW2ldID0gaW50KGkp
ICsgMTsKLSAgICAgICAgICAgIHJldHVybiBzdW0oYXJyKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGludCBzdW0oaW50WzEwXSB4cykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHQgPSAwOwot
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspCi0gICAgICAg
ICAgICAgICAgdCA9IHQgKyB4c1tpXTsKLSAgICAgICAgICAgIHJldHVybiB0OwotICAgICAgICB9
Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCA1NSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+
Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC1leHBlY3RlZC50
eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYjQ1MmU2OTIxOTZjNTFjNmQzNDE4
Y2EwYTM2ZDNiZmM1MGQxZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hZGQtZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgYmFkQWRkIAotCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWJhZC1hZGQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFl
MDQxNjljYTYzMWE5MDczMTJiYzc0YzdkMmM4ZGE1NzE5NjQ2Yy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFk
LWFkZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hs
c2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13
aGxzbFRlc3RzLmJhZEFkZCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAot
ICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCwgdWludCB5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHVpbnQgeiA9IHggKyB5OwotICAgICAgICAgICAgfQotICAg
ICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtYW5kZXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRlci1leHBlY3RlZC50eHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGE3NGM5ZGZlNzFiNWM5NDY1MDI0ZDY5ODll
YTk5OTdiNGNlMWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRlci1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotUEFTUyBpbmRleEFuZGVyRG9lc250UmV0dXJuUG9p
bnRlciAKLVBBU1MgaW5kZXhBbmRlckRvZXNudFRha2VSZWZlcmVuY2UgCi1QQVNTIGFuZGVyRG9l
c250UmV0dXJuUG9pbnRlciAKLVBBU1MgYW5kZXJEb2VzbnRUYWtlUmVmZXJlbmNlIAotUEFTUyBh
bmRlcldpdGhCYWRJbmRleCAKLVBBU1MgYW5kZXJXaXRoTm90aGluZ1dyb25nIAotUEFTUyBhbmRl
cldpdGhXcm9uZ051bWJlck9mQXJndW1lbnRzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYmFkLWFuZGVyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFk
LWFuZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOTdhYjhlNGVhMjY5
MDQwOWFhZmI2Nzg2Y2IyZDk2Y2Y4YzY3MzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRlci5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Ci08dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5pbmRleEFuZGVyRG9lc250UmV0dXJuUG9pbnRlciA9IGFzeW5jICgpID0+
Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGludCBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZvby0+eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7
Ci19Ci0KLXdobHNsVGVzdHMuaW5kZXhBbmRlckRvZXNudFRha2VSZWZlcmVuY2UgPSBhc3luYyAo
KSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3Ry
dWN0IEZvbyB7Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXShGb28gZm9vLCB1aW50KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLng7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IGApOwotfQotCi13aGxzbFRlc3RzLmFuZGVyRG9lc250UmV0dXJuUG9pbnRlciA9IGFzeW5jICgp
ID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVj
dCBGb28gewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmb28tPng7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwot
fQotCi13aGxzbFRlc3RzLmFuZGVyRG9lc250VGFrZVJlZmVyZW5jZSA9IGFzeW5jICgpID0+Ci17
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9v
IHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRo
cmVhZCBpbnQqIG9wZXJhdG9yJi5mb28oRm9vIGZvbykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJmZvby54OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQot
d2hsc2xUZXN0cy5hbmRlcldpdGhCYWRJbmRleCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQg
Y2hlY2tGYWlsKGBpbnQgZm9vKHRocmVhZCBpbnRbXSB4KSB7IHJldHVybiB4Wy0xXTsgfWApOwot
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKGBpbnQgZm9vKHRocmVhZCBpbnRbXSB4KSB7IHJldHVybiB4
WzEuZl07IH1gKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgaW50IGZvbyh0aHJlYWQgaW50W10g
eCwgaW50IHkpIHsgcmV0dXJuIHhbeV07IH1gKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgaW50
IGZvbyh0aHJlYWQgaW50W10geCwgZmxvYXQgeSkgeyByZXR1cm4geFt5XTsgfWApOwotfQotCi13
aGxzbFRlc3RzLmFuZGVyV2l0aE5vdGhpbmdXcm9uZyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImLmZvbyh0aHJlYWQgRm9vKiBm
b28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICB9Ci0g
ICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBGb28geDsKLSAgICAgICAg
ICAgIHgueCA9IDEzOwotICAgICAgICAgICAgcmV0dXJuIHguZm9vOwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCAxMyk7Ci19Ci0KLXdobHNsVGVzdHMuYW5kZXJXaXRoV3JvbmdOdW1iZXJPZkFyZ3Vt
ZW50cyA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28oKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImLmZvbyh0aHJlYWQgRm9vKiBm
b28sIGludCBibGFoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAmZm9v
LT54OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1iYWQtbGl0ZXJhbHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWJhZC1saXRlcmFscy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY2YTE2YTJmOTA0NWE4Njg2YTM0ZDlmN2IwYjA0YjRlZWJiNzI5MGMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWJhZC1saXRlcmFscy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAK
LQotUEFTUyBiYWRJbnRMaXRlcmFsRm9ySW50IAotUEFTUyBiYWRJbnRMaXRlcmFsRm9yRmxvYXQg
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtbGl0ZXJhbHMuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtbGl0ZXJhbHMuaHRtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODhlMDIwNWM1ODQ2MTUzNDQ3YzM4MmIxNzU2YmNhNDNlMWFj
ODczMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWxpdGVyYWxzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAt
MSwyNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYt
OD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgcHJl
Zml4L3Bvc3RmaXguPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuYmFkSW50
TGl0ZXJhbEZvckludCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKCAidm9p
ZCBmb28oKSB7IGludCB4ID0gMzAwMDAwMDAwMDsgfSIpOwotfQotCi13aGxzbFRlc3RzLmJhZElu
dExpdGVyYWxGb3JGbG9hdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKCJ2
b2lkIGZvbygpIHsgZmxvYXQgeCA9IDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDA7IH0iKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLWV4
cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxZGQ2Njc4MWZiMWQx
ODA1NDc4YmE0OTU4NGE2YzY0YTgzNzc3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYml0d2lzZS1ib29sLW9w
cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotUEFTUyBib29s
Qml0QW5kIAotUEFTUyBib29sQml0T3IgCi1QQVNTIGJvb2xCaXRYb3IgCi1QQVNTIGJvb2xCaXRO
b3QgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wt
b3BzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYml0d2lzZS1ib29sLW9wcy5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDZlODNjZDI0NjEwN2I2N2U3ZjMzOWVl
OGQ0ZTVmNTA3MWQ1MmViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxt
ZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4K
LTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCBlcHNp
bG9uID0gMC4wMDAxOwotCi1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuYm9v
bEJpdEFuZCA9IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBzb3VyY2UgPSBgCi0gICAgICAgIGJv
b2wgZm9vKGJvb2wgYSwgYm9vbCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSAm
IGI7Ci0gICAgICAgIH0KLSAgICBgOwotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdh
aXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VC
b29sKHRydWUpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCBy
ZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCBy
ZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChm
YWxzZSksIG1ha2VCb29sKGZhbHNlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwg
ZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9v
IiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChmYWxzZSldKTsKLSAgICAgICAgYXNzZXJ0X2Vx
dWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7Ci0gICAg
ICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQg
dmFsdWUuIik7Ci0gICAgfQotfTsKLQotd2hsc2xUZXN0cy5ib29sQml0T3IgPSBhc3luYyAoKSA9
PiB7Ci0gICAgY29uc3Qgc291cmNlID0gYAotICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wg
YikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgfCBiOwotICAgICAgICB9Ci0gICAg
YDsKLQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
c291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOwotICAgICAg
ICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFs
dWUuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbChmYWxz
ZSldKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5l
ZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQg
PSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKSwg
bWFrZUJvb2woZmFsc2UpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAi
VGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtl
Qm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVz
dWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci19Owot
Ci13aGxzbFRlc3RzLmJvb2xCaXRYb3IgPSBhc3luYyAoKSA9PiB7Ci0gICAgY29uc3Qgc291cmNl
ID0gYAotICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wgYikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGEgXiBiOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIHsKLSAgICAgICAg
bGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VC
b29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3Vs
dCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgIH0KLQotICAg
IHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAi
Zm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2woZmFsc2UpXSk7Ci0gICAgICAgIGFzc2Vy
dF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7
Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKGZhbHNlKV0pOwot
ICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0
ZWQgdmFsdWUuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQg
Y2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9v
bCh0cnVlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0
dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgfQotfTsKLQotd2hsc2xUZXN0cy5ib29sQml0
Tm90ID0gYXN5bmMgKCkgPT4gewotICAgIGNvbnN0IHNvdXJjZSA9IGAKLSAgICAgICAgYm9vbCBm
b28oYm9vbCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gfmE7Ci0gICAgICAgIH0K
LSAgICBgOwotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSldKTsKLSAgICAgICAgYXNzZXJ0X2Vx
dWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFs
cyhyZXN1bHQsIHRydWUsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgIH0K
LX07Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWJvb2xzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDQ1YWJiOGMxYzQwYmM2NzJjNzc5OGI5YjJjMmQ1NGYyMzVmNzhjNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYm9vbHMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCww
IEBACi0KLVBBU1MgYm9vbGVhbk1hdGggCi1QQVNTIGlkZW50aXR5Qm9vbCAKLVBBU1MgbGl0ZXJh
bEJvb2wgCi1QQVNTIG9wZXJhdG9yQm9vbCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWJvb2xzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMuaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVmNzFhNDk5ZTM2MTYxMzMxZDhkNmEx
Yjk2ZmRhNTk2YmQ0NzI2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMuaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDEyNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNl
dD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkJv
b2xzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmJvb2xlYW5NYXRoID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgYm9vbCBmb28oKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZSAmJiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGJvb2wgZm9vMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlICYm
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vMygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZSAmJiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9v
NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZSAmJiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBib29sIGZvbzUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZSB8fCB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vNigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlIHx8IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJv
b2wgZm9vNygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZSB8fCB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vOCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZSB8fCBmYWxzZTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIHRydWUpOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtd
KSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9n
cmFtLCAiZm9vMyIsIFtdKSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFtdKSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgdHJ1ZSk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb282Iiwg
W10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzciLCBbXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIsIFtdKSwgZmFsc2UpOwotfQotCi0KLXdobHNsVGVz
dHMuaWRlbnRpdHlCb29sID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gImJvb2wg
Zm9vKGJvb2wgeCkgeyByZXR1cm4geDsgfSI7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
Qm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSldKSwgdHJ1ZSk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUJvb2woZmFsc2UpXSksIGZhbHNlKTsKLX0KLQotd2hsc2xUZXN0cy5saXRlcmFsQm9vbCA9
IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9ICJib29sIGZvbygpIHsgcmV0dXJuIHRy
dWU7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCB0cnVlKTsKLX0KLQotd2hsc2xUZXN0cy5vcGVyYXRvckJvb2wgPSBhc3lu
YyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBib29sIGJvb2xGcm9tVWNo
YXJGYWxzZSgpIHsgcmV0dXJuIGJvb2wodWNoYXIoMCkpOyB9Ci0gICAgICAgIGJvb2wgYm9vbEZy
b21VY2hhclRydWUoKSB7IHJldHVybiBib29sKHVjaGFyKDEpKTsgfQotCi0gICAgICAgIGJvb2wg
Ym9vbEZyb21VaW50RmFsc2UoKSB7IHJldHVybiBib29sKHVpbnQoMCkpOyB9Ci0gICAgICAgIGJv
b2wgYm9vbEZyb21VaW50VHJ1ZSgpIHsgcmV0dXJuIGJvb2wodWludCgxKSk7IH0KLQotICAgICAg
ICBib29sIGJvb2xGcm9tSW50RmFsc2UoKSB7IHJldHVybiBib29sKGludCgwKSk7IH0KLSAgICAg
ICAgYm9vbCBib29sRnJvbUludFRydWUoKSB7IHJldHVybiBib29sKGludCgxKSk7IH0KLQotICAg
ICAgICBib29sIGJvb2xGcm9tRmxvYXRGYWxzZSgpIHsgcmV0dXJuIGJvb2woZmxvYXQoMCkpOyB9
Ci0gICAgICAgIGJvb2wgYm9vbEZyb21GbG9hdFRydWUoKSB7IHJldHVybiBib29sKGZsb2F0KDEp
KTsgfQotICAgICAgICBib29sIGJvb2xGcm9tRmxvYXROYU4oZmxvYXQgYXJnKSB7IHJldHVybiBi
b29sKGFyZyk7IH0KLSAgICBgOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1
bmN0aW9uKHByb2dyYW0sICJib29sRnJvbVVjaGFyRmFsc2UiLCBbXSksIGZhbHNlKTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tVWNo
YXJUcnVlIiwgW10pLCB0cnVlKTsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21VaW50RmFsc2UiLCBbXSksIGZhbHNlKTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tVWlu
dFRydWUiLCBbXSksIHRydWUpOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1
bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUludEZhbHNlIiwgW10pLCBmYWxzZSk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUludFRy
dWUiLCBbXSksIHRydWUpOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJib29sRnJvbUZsb2F0RmFsc2UiLCBbXSksIGZhbHNlKTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tRmxvYXRU
cnVlIiwgW10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24ocHJvZ3JhbSwgImJvb2xGcm9tRmxvYXROYU4iLCBbbWFrZUZsb2F0KHByb2dyYW0sIE5hTild
KSwgdHJ1ZSk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAg
IHZvaWQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdDMgeDsKLSAg
ICAgICAgICAgICAgICBib29sIHIgPSBib29sKHgpOwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIHZvaWQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdDN4MyB4
OwotICAgICAgICAgICAgICAgIGJvb2wgciA9IGJvb2woeCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGApOwotICAgICAgICAKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJh
Z21lbnQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJh
Z21lbnQtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2Ey
NjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVy
LWZyYWdtZW50LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJh
Z21lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJhZ21lbnQuaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBiYWJhMDM3ZjFjZTJiMDc5YTVkNjky
YjIyY2Q5ZTMyMjNmOTg5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWZyYWdtZW50Lmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxo
ZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9o
ZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi12ZXJ0ZXggZmxv
YXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IGkg
OiBhdHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0K
LQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uLCBjb25zdGFudCBmbG9hdFtdIHRoZUJ1ZmZlciA6IHJlZ2lzdGVyKGIwKSkgOiBTVl9U
YXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NCh0aGVCdWZmZXJbMF0sIHRoZUJ1ZmZlclswXSwg
dGhlQnVmZmVyWzBdLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
LSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAg
IGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFu
Z2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAi
Y3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAg
Y29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6
ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAv
LyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51
bGw7Ci0gICAgCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjog
MSwgZm9ybWF0OiAiZmxvYXQifTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0
cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OwotICAgIGNvbnN0IGlucHV0MSA9IHtzdHJpZGU6IDQs
IGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTFdfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQw
LCBpbnB1dDFdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0
c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBb
e2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0g
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1h
cFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs0XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
OF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTVdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMUFycmF5
QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
dmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVy
MUFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzBdID0gMTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxv
YXQzMkFycmF5WzJdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzNdID0gMTsK
LSAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVy
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0
IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZl
ckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZl
cik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNl
QnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVz
b3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7Ymlu
ZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERl
c2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3Vw
QmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAo
YmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENv
bnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBm
b3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25m
aWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4
dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRl
eHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29u
c3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30K
LSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29s
b3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVU
YXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xv
cjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAg
Y29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5j
b2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2ZXJ0ZXhCdWZmZXIxXSwgWzAsIDBd
KTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBh
c3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVu
Y29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVm
ZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAg
c3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5j
dGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3
V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsK
LTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWJ1ZmZlci1sZW5ndGgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWJ1ZmZlci1sZW5ndGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1idWZmZXItbGVuZ3RoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUg
KzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBD
T01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWxl
bmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci1sZW5ndGguaHRtbApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMyMmM2ZGQ1NjlmY2Y2MWNhNzE0OTFjMzVm
NjE5ZWNhODM3NTg5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWxlbmd0aC5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsNzggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1bbnVtdGhyZWFkcygxLCAxLCAx
KV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSB1aW50W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Ci0gICAg
YnVmZmVyWzBdID0gYnVmZmVyLmxlbmd0aDsKLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0
KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IGNv
bXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVT
aGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGlu
Z3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1d
fTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5
b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCBj
b21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IFVpbnQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogMTMzNzsKLQotICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVS
X1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNj
cmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVyVWludDMyQXJyYXkgPSBuZXcgVWludDMyQXJy
YXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlclVpbnQzMkFycmF5WzBdID0gMDsKLSAg
ICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAw
LCByZXN1bHRzQnVmZmVyLCAwLCAxICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpOwot
ICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0
ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwotICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1
ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRVaW50MzJBcnJheSA9IG5ldyBV
aW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRVaW50MzJBcnJh
eVswXSA9PSAxMzM3KQotICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAg
IHRlc3RGYWlsZWQoIiIpOwotICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlz
aEpTVGVzdCgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsK
LSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0
ZXN0UGFzc2VkKCIiKTsKLSAgICBmaW5pc2hKU1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+
Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZl
cnRleC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci12ZXJ0
ZXgtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1
MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZl
cnRleC1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hpdGVTcXVhcmVPbkJs
dWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRleC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci12ZXJ0ZXguaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwZjI4MDgxYzYxOGUwYjAzMDg3MTk5NzZkOWJiNWM1
NWI3YzZjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRleC5odG1sCisrKyAvZGV2L251bGwK
QEAgLTEsMTA3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5
PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdmVydGV4IGZsb2F0NCB2ZXJ0ZXhT
aGFkZXIoY29uc3RhbnQgZmxvYXQ0W10gYnVmZmVyIDogcmVnaXN0ZXIoYjApLCB1aW50IGlkIDog
U1ZfVmVydGV4SUQpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBidWZmZXJbaWRdOwotfQot
Ci1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb24pIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoMS4wLCAxLjAsIDEuMCwg
MS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hh
ZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNl
LCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVu
dFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFk
ZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0g
ICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6
ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxl
bmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIs
IGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0
ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogW119OwotCi0gICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5
OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91
dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNp
emUgPSA0ICogNCAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDsKLQotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3Vy
Y2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7Ci0gICAgcmVzb3VyY2VC
dWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzVdID0gMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOwot
ICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZl
ckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs5
XSA9IC0wLjU7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwotICAg
IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMTJdID0gMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzEz
XSA9IDAuNTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0gICAg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51
bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVm
ZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJl
c291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0g
e2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsK
LSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERl
c2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUi
KTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdy
YTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENo
YWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2Fw
Q2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9
IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRF
bmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3Qg
cmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVu
dHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxs
LCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwot
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRl
clBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5S
ZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0Qmlu
ZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGluLXZlY3RvcnMtMi1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0b3JzLTItZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTdiMDE3MmVlY2M2MTUyM2YxMWNm
NWQyNmIxMTkwNGU4MTY0YWUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGluLXZlY3RvcnMtMi1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotUEFTUyBidWlsdGluVmVj
dG9yR2V0dGVycyAKLVBBU1MgYnVpbHRpblZlY3RvclNldHRlcnMgCi0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGluLXZlY3RvcnMtMi5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy0yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY1NTdhODM2NmY1ZjIzOTNlZWY0N2U1YWY1ZTZkNDIwZjhhMTY2YjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy0yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4
MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4K
LTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgbG9vcHMu
PC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+
Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLWNvbnN0IGNoZWNrRnVuY3MgPSB7Ci0gICAgInVp
bnQiOiBjYWxsVWludEZ1bmN0aW9uLAotICAgICJpbnQiOiBjYWxsSW50RnVuY3Rpb24sCi0gICAg
ImZsb2F0IjogY2FsbEZsb2F0RnVuY3Rpb24KLX07Ci1jb25zdCB0eXBlTmFtZXMgPSBbICJ1aW50
IiwgImludCIsICJmbG9hdCIgXTsKLWNvbnN0IHNpemVzID0gWyAyLCAzLCA0IF07Ci1jb25zdCBl
bGVtZW50cyA9IFsgIngiLCAieSIsICJ6IiwgInciIF07Ci1jb25zdCBpbml0aWFsaXplckxpc3Qg
PSBbIDEsIDIsIDMsIDQgXTsKLQotd2hsc2xUZXN0cy5idWlsdGluVmVjdG9yR2V0dGVycyA9IGFz
eW5jICgpID0+Ci17Ci0KLSAgICBsZXQgdGVzdHMgPSBbXTsKLSAgICBsZXQgc3JjID0gIiI7Ci0g
ICAgZm9yIChsZXQgdHlwZU5hbWUgb2YgdHlwZU5hbWVzKSB7Ci0gICAgICAgIGZvciAobGV0IHNp
emUgb2Ygc2l6ZXMpIHsKLSAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dHlwZU5hbWV9JHtz
aXplfSR7ZWxlbWVudHNbaV19YDsKLSAgICAgICAgICAgICAgICBzcmMgKz0gYCR7dHlwZU5hbWV9
ICR7ZnVuY3Rpb25OYW1lfSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3NpemV9IHggPSAke3R5cGVOYW1lfSR7c2l6
ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6ZSkuam9pbigiLCAiKX0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LiR7ZWxlbWVudHNbaV19OwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYDsKLSAgICAgICAgICAg
ICAgICB0ZXN0cy5wdXNoKHsgdHlwZTogdHlwZU5hbWUsIG5hbWU6IGZ1bmN0aW9uTmFtZSwgZXhw
ZWN0YXRpb246IGluaXRpYWxpemVyTGlzdFtpXSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGxldCBwcm9ncmFtID0gc3JjOwotICAgIGZvciAobGV0IHRlc3Qgb2Yg
dGVzdHMpIHsKLSAgICAgICAgY29uc3QgY2hlY2tGdW5jID0gY2hlY2tGdW5jc1t0ZXN0LnR5cGVd
OwotICAgICAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNoZWNrRnVuYyhwcm9ncmFtLCB0ZXN0Lm5h
bWUsIFtdKSwgdGVzdC5leHBlY3RhdGlvbik7Ci0gICAgfQotfTsKLQotd2hsc2xUZXN0cy5idWls
dGluVmVjdG9yU2V0dGVycyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHRlc3RzID0gW107Ci0g
ICAgbGV0IHNyYyA9ICIiOwotICAgIGZvciAobGV0IHR5cGVOYW1lIG9mIHR5cGVOYW1lcykgewot
ICAgICAgICBmb3IgKGxldCBzaXplIG9mIHNpemVzKSB7Ci0gICAgICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFt
ZSA9IGAke3R5cGVOYW1lfSR7c2l6ZX0ke2VsZW1lbnRzW2ldfWA7Ci0gICAgICAgICAgICAgICAg
c3JjICs9IGAke3R5cGVOYW1lfSAke2Z1bmN0aW9uTmFtZX0oKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dHlwZU5hbWV9JHtzaXplfSB4
ID0gJHt0eXBlTmFtZX0ke3NpemV9KCR7aW5pdGlhbGl6ZXJMaXN0LnNsaWNlKDAsIHNpemUpLmpv
aW4oIiwgIil9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LiR7ZWxlbWVudHNbaV19
ID0gMzQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguJHtlbGVtZW50c1tp
XX07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBg
OwotICAgICAgICAgICAgICAgIHRlc3RzLnB1c2goeyB0eXBlOiB0eXBlTmFtZSwgbmFtZTogZnVu
Y3Rpb25OYW1lLCBleHBlY3RhdGlvbjogMzQgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBsZXQgcHJvZ3JhbSA9IHNyYzsKLSAgICBmb3IgKGxldCB0ZXN0IG9mIHRl
c3RzKSB7Ci0gICAgICAgIGNvbnN0IGNoZWNrRnVuYyA9IGNoZWNrRnVuY3NbdGVzdC50eXBlXTsK
LSAgICAgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjaGVja0Z1bmMocHJvZ3JhbSwgdGVzdC5uYW1l
LCBbXSksIHRlc3QuZXhwZWN0YXRpb24pOwotICAgIH0KLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTAxYzdhMjgyZWY2YjVlMjc5NjU3MDJjMTlhY2Y0ZTE1NGU4Y2FhNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDQgKzAsMCBAQAotCi1QQVNTIGJ1aWx0aW5WZWN0b3JJbmRleFNldHRlcnMgCi1QQVNTIGJ1aWx0
aW5WZWN0b3JzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRp
bi12ZWN0b3JzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0b3Jz
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNDk0ZjMxYjVkZjljZjliMTU1
OTQxMjM2MWI3YzY1ZDhkZjg4NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Ci08dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRl
c3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotY29uc3Qg
Y2hlY2tGdW5jcyA9IHsKLSAgICAidWludCI6IGNhbGxVaW50RnVuY3Rpb24sCi0gICAgImludCI6
IGNhbGxJbnRGdW5jdGlvbiwKLSAgICAiZmxvYXQiOiBjYWxsRmxvYXRGdW5jdGlvbgotfTsKLWNv
bnN0IHR5cGVOYW1lcyA9IFsgInVpbnQiLCAiaW50IiwgImZsb2F0IiBdOwotY29uc3Qgc2l6ZXMg
PSBbIDIsIDMsIDQgXTsKLWNvbnN0IGVsZW1lbnRzID0gWyAieCIsICJ5IiwgInoiLCAidyIgXTsK
LWNvbnN0IGluaXRpYWxpemVyTGlzdCA9IFsgMSwgMiwgMywgNCBdOwotCi13aGxzbFRlc3RzLmJ1
aWx0aW5WZWN0b3JJbmRleFNldHRlcnMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCB0ZXN0cyA9
IFtdOwotICAgIGxldCBzcmMgPSAiIjsKLSAgICBmb3IgKGxldCB0eXBlTmFtZSBvZiB0eXBlTmFt
ZXMpIHsKLSAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBzaXplcykgewotICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBmdW5j
dGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0ke3NpemV9JHtlbGVtZW50c1tpXX1gOwotICAgICAgICAg
ICAgICAgIHNyYyArPSBgJHt0eXBlTmFtZX0gJHtmdW5jdGlvbk5hbWV9KCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3R5cGVOYW1lfSR7
c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtzaXplfSgke2luaXRpYWxpemVyTGlzdC5zbGljZSgwLCBz
aXplKS5qb2luKCIsICIpfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeFske2l9XSA9
IDM0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4WyR7aX1dOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYDsKLSAgICAgICAg
ICAgICAgICB0ZXN0cy5wdXNoKHsgdHlwZTogdHlwZU5hbWUsIG5hbWU6IGZ1bmN0aW9uTmFtZSwg
ZXhwZWN0YXRpb246IDM0IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbGV0IHByb2dyYW0gPSBzcmM7Ci0gICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgewotICAg
ICAgICBjb25zdCBjaGVja0Z1bmMgPSBjaGVja0Z1bmNzW3Rlc3QudHlwZV07Ci0gICAgICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2hlY2tGdW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0
LmV4cGVjdGF0aW9uKTsKLSAgICB9Ci19OwotCi13aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JzID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludDIgYSA9IGludDIoMywgNCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gYVswXTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vMigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludDIgYSA9IGludDIoMywgNCk7Ci0gICAgICAgICAgICBpbnQzIGIgPSBpbnQz
KGEsIDUpOwotICAgICAgICAgICAgcmV0dXJuIGJbMV07Ci0gICAgICAgIH0KLSAgICAgICAgaW50
IGZvbzMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQzIGEgPSBpbnQzKDMsIDQsIDUpOwot
ICAgICAgICAgICAgaW50NCBiID0gaW50NCg2LCBhKTsKLSAgICAgICAgICAgIHJldHVybiBiWzFd
OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb280KCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50MiBhID0gaW50MigzLCA0KTsKLSAgICAgICAgICAgIGludDIgYiA9IGludDIoNSwgNik7Ci0g
ICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0KGEsIGIpOwotICAgICAgICAgICAgcmV0dXJuIGNbMl07
Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb281KCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50NCBhID0gaW50NCgzLCA0LCA1LCA2KTsKLSAgICAgICAgICAgIGludDIgYiA9IGludDIoNCwg
NSk7Ci0gICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0KDMsIGIsIDYpOwotICAgICAgICAgICAgcmV0
dXJuIGEgPT0gYzsKLSAgICAgICAgfQotICAgICAgICBib29sIGZvbzYoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQyIGEgPSBpbnQyKDQsIDUpOwotICAgICAgICAgICAgaW50MyBiID0gaW50
MygzLCBhKTsKLSAgICAgICAgICAgIGludDMgYyA9IGludDMoMywgNCwgNik7Ci0gICAgICAgICAg
ICByZXR1cm4gYiA9PSBjOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vdSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVpbnQyIGEgPSB1aW50MigzLCA0KTsKLSAgICAgICAgICAgIHJldHVy
biBhWzBdOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vdTIoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB1aW50MiBhID0gdWludDIoMywgNCk7Ci0gICAgICAgICAgICB1aW50MyBiID0gdWlu
dDMoYSwgNSk7Ci0gICAgICAgICAgICByZXR1cm4gYlsxXTsKLSAgICAgICAgfQotICAgICAgICB1
aW50IGZvb3UzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdWludDMgYSA9IHVpbnQzKDMsIDQs
IDUpOwotICAgICAgICAgICAgdWludDQgYiA9IHVpbnQ0KDYsIGEpOwotICAgICAgICAgICAgcmV0
dXJuIGJbMV07Ci0gICAgICAgIH0KLSAgICAgICAgdWludCBmb291NCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVpbnQyIGEgPSB1aW50MigzLCA0KTsKLSAgICAgICAgICAgIHVpbnQyIGIgPSB1
aW50Mig1LCA2KTsKLSAgICAgICAgICAgIHVpbnQ0IGMgPSB1aW50NChhLCBiKTsKLSAgICAgICAg
ICAgIHJldHVybiBjWzJdOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vdTUoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1aW50NCBhID0gdWludDQoMywgNCwgNSwgNik7Ci0gICAgICAgICAg
ICB1aW50MiBiID0gdWludDIoNCwgNSk7Ci0gICAgICAgICAgICB1aW50NCBjID0gdWludDQoMywg
YiwgNik7Ci0gICAgICAgICAgICByZXR1cm4gYSA9PSBjOwotICAgICAgICB9Ci0gICAgICAgIGJv
b2wgZm9vdTYoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50MiBhID0gdWludDIoNCwgNSk7
Ci0gICAgICAgICAgICB1aW50MyBiID0gdWludDMoMywgYSk7Ci0gICAgICAgICAgICB1aW50MyBj
ID0gdWludDMoMywgNCwgNik7Ci0gICAgICAgICAgICByZXR1cm4gYiA9PSBjOwotICAgICAgICB9
Ci0gICAgICAgIGZsb2F0IGZvb2YoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDIgYSA9
IGZsb2F0MigzLiwgNC4pOwotICAgICAgICAgICAgcmV0dXJuIGFbMF07Ci0gICAgICAgIH0KLSAg
ICAgICAgZmxvYXQgZm9vZjIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDIgYSA9IGZs
b2F0MigzLiwgNC4pOwotICAgICAgICAgICAgZmxvYXQzIGIgPSBmbG9hdDMoYSwgNS4pOwotICAg
ICAgICAgICAgcmV0dXJuIGJbMV07Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vZjMoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDMgYSA9IGZsb2F0MygzLiwgNC4sIDUuKTsKLSAg
ICAgICAgICAgIGZsb2F0NCBiID0gZmxvYXQ0KDYuLCBhKTsKLSAgICAgICAgICAgIHJldHVybiBi
WzFdOwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvb2Y0KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZmxvYXQyIGEgPSBmbG9hdDIoMy4sIDQuKTsKLSAgICAgICAgICAgIGZsb2F0MiBiID0g
ZmxvYXQyKDUuLCA2Lik7Ci0gICAgICAgICAgICBmbG9hdDQgYyA9IGZsb2F0NChhLCBiKTsKLSAg
ICAgICAgICAgIHJldHVybiBjWzJdOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vZjUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDQgYSA9IGZsb2F0NCgzLiwgNC4sIDUuLCA2Lik7
Ci0gICAgICAgICAgICBmbG9hdDIgYiA9IGZsb2F0Mig0LiwgNS4pOwotICAgICAgICAgICAgZmxv
YXQ0IGMgPSBmbG9hdDQoMy4sIGIsIDYuKTsKLSAgICAgICAgICAgIHJldHVybiBhID09IGM7Ci0g
ICAgICAgIH0KLSAgICAgICAgYm9vbCBmb29mNigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0MiBhID0gZmxvYXQyKDQuLCA1Lik7Ci0gICAgICAgICAgICBmbG9hdDMgYiA9IGZsb2F0Mygz
LiwgYSk7Ci0gICAgICAgICAgICBmbG9hdDMgYyA9IGZsb2F0MygzLiwgNC4sIDYuKTsKLSAgICAg
ICAgICAgIHJldHVybiBiID09IGM7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDMpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
MyIsIFtdKSwgMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzQiLCBbXSksIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW10pLCBmYWxzZSk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb291IiwgW10p
LCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvb3UyIiwgW10pLCA0KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvb3UzIiwgW10pLCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U0IiwgW10pLCA1KTsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U1IiwgW10pLCB0cnVlKTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U2
IiwgW10pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vZiIsIFtdKSwgMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
RmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vZjIiLCBbXSksIDQpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvb2YzIiwgW10pLCAzKTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNCIs
IFtdKSwgNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJmb29mNSIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9v
bEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNiIsIFtdKSwgZmFsc2UpOwotfTsKLQotcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWNhc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1jYXN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVi
N2NlNGM3ZDhlNDFhN2VhNWZhOTNkYzM2NDkxMWEyZTQzMWJkYTIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNh
c3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIGNh
c3RzIAotUEFTUyBzZWxmQ2FzdHMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1jYXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZmVmNDJiYzg2NGM3NzBiMzMxMmMwYjU2OTQx
Y2UyZGRmNmI2MGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAt
MSw1OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYt
OD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkJhZCBhZGQu
PC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+
Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuY2FzdHMgPSBhc3luYyAoKSA9
PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAg
ICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIHN0cnVjdCBCYXIgewotICAgICAgICAgICAg
aW50IHk7Ci0gICAgICAgIH0KLSAgICAgICAgb3BlcmF0b3IgQmFyKEZvbyBmb28pIHsKLSAgICAg
ICAgICAgIEJhciBiOwotICAgICAgICAgICAgYi55ID0gZm9vLnggKyA3OwotICAgICAgICAgICAg
cmV0dXJuIGI7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJheihpbnQgeikgewotICAgICAgICAg
ICAgRm9vIGZvbzsKLSAgICAgICAgICAgIGZvby54ID0gejsKLSAgICAgICAgICAgIEJhciBiID0g
QmFyKGZvbyk7Ci0gICAgICAgICAgICByZXR1cm4gYi55OwotICAgICAgICB9Ci0gICAgYDsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW21h
a2VJbnQoNildKSwgMTMpOwotfQotCi13aGxzbFRlc3RzLnNlbGZDYXN0cyA9IGFzeW5jICgpID0+
Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAg
ICAgaW50IHg7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICBmb28ueCA9IDIxOwotICAgICAgICAgICAgRm9v
IGJhciA9IEZvbyhmb28pOwotICAgICAgICAgICAgYmFyLnggPSA0MjsKLSAgICAgICAgICAgIHJl
dHVybiBmb28ueCArIGJhci54OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAyMSArIDQyKTsKLX0K
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJl
YWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFy
aWFibGVzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5
MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tl
ci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnkt
d3JpdGUtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tlci1z
aG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNzk5YmY1YTNjMDRjYjU1OWUwNzdmYjMyMGZlZWRk
MzM4YjA3NjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJlYWQt
bW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1jb25zdCBz
aGFkZXJTb3VyY2UgPSBgCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21w
dXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRo
cmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIGZsb2F0NCB2ZWM7Ci0gICAgdmVj
WzBdICs9IDQyLjA7Ci0gICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gdmVjWzBdOwotfQot
YDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3
LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7
Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29u
c3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVD
b21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBz
aXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKLQotICAgIGNvbnN0IGJ1
ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8
IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJheUJ1
ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVyRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5T
VE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0g
e2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3Jv
dXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRH
cm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5j
b3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKLSAg
ICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQ
YXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGlu
ZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwot
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBjb21wdXRlUGFz
c0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZm
ZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0Zsb2F0MzJB
cnJheVswXSA9PSA0MikKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7
Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAg
dGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbW1lbnQt
cGFyc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tbWVudC1w
YXJzaW5nLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiNDA5
MWJkODExYmY3NWZlZDM2MmVlZjQwNTIyNzViNmNmN2ZjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tbWVu
dC1wYXJzaW5nLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1Q
QVNTIGNvbW1lbnRQYXJzaW5nIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtY29tbWVudC1wYXJzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tbWVu
dC1wYXJzaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMzg1ZmFmYzY1
YjU3NTY1YjEzM2EyMmQ3NDVjNTk1MzM2M2FmMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbW1lbnQtcGFy
c2luZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJq
cy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMuY29tbWVudFBhcnNpbmcgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIC8qIHRoaXMgY29tbWVudAotICAgICAgICBydW5zIG92ZXIgbXVs
dGlwbGUgbGluZXMgKi8KLSAgICAgICAgYm9vbCBmb28oKSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdKSwgdHJ1ZSk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgLyogdGhpcyBjb21tZW50Ci0gICAgICAgIHJ1bnMgb3ZlciBtdWx0aXBsZSBsaW5lcwotICAg
ICAgICBib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRl
c3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1jb21wdXRlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtY29tcHV0ZS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAK
LVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUK
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIzYjBlOWE0YmJiYmUxMWIzMmUyYmVmN2NlZTVkMThkOTI0ZDBkOTQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWNvbXB1dGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVy
U291cmNlID0gYAotW251bXRocmVhZHMoMiwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNo
YWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJ
RCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0g
PSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBj
b25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJj
b21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1
ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA4OwotCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZl
ckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAxOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFy
cmF5WzJdID0gMzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVs0XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7
Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRv
ciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdl
LlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1
bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7
Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6
ZX07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTog
YnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6
IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29u
c3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZl
ciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIu
ZGlzcGF0Y2goMiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAg
ICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2
aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1
bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAg
IGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJh
eUJ1ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAm
JiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJB
cnJheVsyXSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zs
b2F0MzJBcnJheVs1XSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0g
NwotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQ
YXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0
c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAg
ICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpT
VGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1jb3B5LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDZhNGJkY2Y0MzY2OGFjZDRhMGU3N2M0ZmYzNmU5MzkxMjBkZWE3Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Y29weS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBj
b3B5QXJyYXkgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5Lmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29weS5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4MGMxOTdiMmQ5MWFjNjBmNjk1YTI2NmFkYzcwN2NmZTI5NGJlNTVlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1jb3B5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9
InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkNvcHlpbmcuPC90aXRsZT4KLTxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRl
c3RzID0ge307Ci0KLXdobHNsVGVzdHMuY29weUFycmF5ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludFsxMF0geHM7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7
IGkrKykKLSAgICAgICAgICAgICAgICB4c1tpXSA9IGludChpKSArIDE7Ci0gICAgICAgICAgICBp
bnRbMTBdIHlzID0geHM7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCB4cy5sZW5n
dGg7IGkrKykKLSAgICAgICAgICAgICAgICB4c1tpXSA9IDA7Ci0gICAgICAgICAgICBpbnQgc3Vt
ID0gMDsKLSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHlzLmxlbmd0aDsgaSsrKQot
ICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIHlzW2ldOwotICAgICAgICAgICAgcmV0dXJuIHN1
bTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTUpOwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3Rz
KTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1kZXJlZmVyZW5jZS1vcmRlcmluZy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY1YzYxN2VlZjVmZTQ3MjQyMmVkMGE0ZmI1ZjgyNmQwMGEyMzhmY2Yu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGNhbGxBcmd1bWVudHNBcmVDb3BpZWRJbW1l
ZGlhdGVseUFmdGVyRXZhbHVhdGlvbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjM0YmFiZjY3MWE0MzcwNzcyYTMxMTJlYTBiMDRjNDVhMjNkYjY3MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+RGVyZWZlcmVuY2Ugb3JkZXJp
bmcuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuY2FsbEFyZ3VtZW50c0Fy
ZUNvcGllZEltbWVkaWF0ZWx5QWZ0ZXJFdmFsdWF0aW9uID0gYXN5bmMgKCkgPT4gewotICAgIGxl
dCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpiYXIoNSkgKyAqYmFyKDcpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGlu
dCogYmFyKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHggPSB2YWx1ZTsK
LSAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAgfQotICAgIGA7Ci0KLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMik7Ci19
OwotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5
cGUtY2hlY2stZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVy
ZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUy
NDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2st
ZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBo
dG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFj
a2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXIt
c2hvdWxkLXR5cGUtY2hlY2suaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVy
ZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQyY2VjOTZjY2FkZmM4ZmRiOTc0OGRiNWE0YWVjOWUzYTliNzljNDkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhl
YWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hl
YWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAi
PjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0
ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNo
YWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihm
bG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEp
KSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIHRocmVhZCBmbG9hdCogcHRyMiA9ICZz
aGFkZTsKLSAgICAqcHRyMiA9IHNoYWRlOwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247Ci0gICAgcmVzdWx0LnNoYWRlID0gKnB0cjI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
MCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFk
ZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwg
b2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBm
b3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0
cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0
dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0g
ICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNv
bnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwg
dmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5k
R3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0g
PSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOwotCi0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxOV0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsK
LSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owot
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0g
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd1doaXRl
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3Nj
cmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+
Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLWRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzNjFjYTU1ZDJkOGIyZDMxNjcxMjVjY2Y1YTllYzYzMjAyN2Y2MzhjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3Jp
cHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9h
dDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgw
KTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91
dCByZXN1bHQ7Ci0KLSAgICBib29sIGIgPSB0cnVlOwotICAgIGRvIHsKLSAgICAgICAgaWYgKGIp
IHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKHNoYWRlID0g
MS4wLCBmYWxzZSkpOwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVz
dWx0LnNoYWRlID0gc2hhZGU7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBm
bG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFy
Z2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0K
LWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
LQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
LSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmli
dXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsK
LSAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9h
dCIsIG9mZnNldDogMTZ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0
cmlidXRlMV07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDog
YXR0cmlidXRlc307Ci0gICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVy
dGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTog
NywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ip
OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRz
OiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFn
ZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRl
cHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJl
bmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJh
eUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZl
cjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7Ci0KLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAt
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAw
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7
Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZl
ckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZm
ZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZm
ZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJj
ZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJl
c291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2Jp
bmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBE
ZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91
cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
KGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRD
b250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwg
Zm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29u
ZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRl
eHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNv
bnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9
Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNv
bG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZl
VGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29s
b3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAg
IGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVu
Y29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFz
c0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwot
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd0JsYWNrU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGls
ZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZG8td2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1jb250aW51ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5Nzg5NmU4MGVlOWE5N2E4ZGQwOTgyMTJjYmFmYjM4YWJhNDBhODhlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwKKysrIC9kZXYvbnVsbApA
QCAtMSwxNDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlw
dCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+
Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4K
LTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAg
ICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZl
cnRleE91dCByZXN1bHQ7Ci0KLSAgICBib29sIGIgPSB0cnVlOwotICAgIHVpbnQgaSA9IDA7Ci0g
ICAgZG8gewotICAgICAgICBpZiAoYikgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgc2hhZGUgPSAwLjA7Ci0gICAgfSB3aGlsZSAoKGkgPSBpICsgMSwgc2hhZGUg
PSBzaGFkZSArIDAuMSwgaSA8IDEwKSk7Ci0KLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlv
bjsKLSAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgw
KSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRl
LCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdt
ZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNo
YWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsK
LSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9k
ZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JC
bGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3Jt
IiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldy
aXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBj
b25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBv
ZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZv
cm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRy
aWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0
cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAg
ICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBm
cmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xv
clN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwg
bGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZp
Y2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4
QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXko
dmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9
IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE5XSA9IDAuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9X
UklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1
ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZm
ZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwot
ICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0g
e2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0g
Y2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3Ig
PSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0g
Y29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29u
c3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmlldygp
OwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29k
ZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0g
ICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZp
ZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3Jl
IiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9
IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50
cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIg
PSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIu
ZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7
Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQo
ZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVT
cXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0Pgot
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1do
aXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRv
LXdoaWxlLWxvb3AuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29w
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOWM1YzgxMGZjOTQ3Nzg0NzBi
ZjE4MWEyMmIyYzI3ZmM1ZjRjZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08
L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBW
ZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0
IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGRvIHsKLSAgICAgICAgc2hhZGUg
PSAxLjA7Ci0gICAgfSB3aGlsZShmYWxzZSk7Ci0KLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3Np
dGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNo
YWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVu
dFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlw
IjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxs
TW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29s
b3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVu
b3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xv
cldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
LCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
LSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7Ci0KLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDAuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0tZXhwZWN0ZWQuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAz
ZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0tZXhwZWN0
ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0uaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzZjI0NTAxMjZmZmMyNDkyYmQ1ZTFl
MTg4MTA2YjEyNDFmZDBjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0u
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLQot
ZW51bSBEb250Q3Jhc2ggewotICAgIFZhbHVlCi19Ci0KLXZlcnRleCBmbG9hdDQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgaSA6IGF0dHJpYnV0ZSgx
KSkgOiBTVl9Qb3NpdGlvbiB7Ci0gICAgcmV0dXJuIHBvc2l0aW9uOwotfQotCi1mcmFnbWVudCBm
bG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1Zf
VGFyZ2V0IDAgewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOwotICAgIAotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0In07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKLSAgICBjb25zdCBpbnB1dDEg
PSB7c3RyaWRlOiA0LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUxXX07Ci0gICAgY29uc3QgaW5w
dXRzID0gW2lucHV0MCwgaW5wdXQxXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1i
dWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9n
eSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZl
cnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDEuMDsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEyXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwot
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMURlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMSA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMURlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjFBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjEubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJh
eVswXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsxXSA9IDE7Ci0gICAgdmVy
dGV4QnVmZmVyMUZsb2F0MzJBcnJheVsyXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJB
cnJheVszXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMS51bm1hcCgpOwotCi0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsK
LSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owot
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMCwgdmVydGV4QnVm
ZmVyMV0sIFswLCAwXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRl
dmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24o
KSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFz
KTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAz
ZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLWV4cGVjdGVkLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08
L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWY4ZDUwYmY4ZTQ1NDljMjkwNTJmNWVkMTBkMzI0YTI3ZDhhMDQxNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9z
aXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0K
LQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1
bHQ7Ci0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0g
c2hhZGU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50
U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICBy
ZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
dmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9Owot
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0g
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlv
bigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiMjc0MzE4OWVkZjhkNWUyMzBjNThlYzI1ODA4YTA2MzMzOTZjODcw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kb3VibGUtbm90LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBA
IC0xLDMgKzAsMCBAQAotCi1QQVNTIGRvdWJsZU5vdCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kb3VibGUtbm90Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOWY1YmQ3
YzNjNWNhZjVmMTM4YjA0MWEyZDY5ZDg4NGVmNDhhZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1u
b3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Ci08dGl0bGU+Q29weWluZy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNs
LXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hs
c2xUZXN0cy5kb3VibGVOb3QgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICBib29sIGZvbyhib29sIHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAh
IXg7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRydWUpXSksIHRydWUpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VC
b29sKGZhbHNlKV0pLCBmYWxzZSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3Jp
cHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGlj
YXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3Rv
cnMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1QQVNTIAotUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1w
cm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1
cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNDIzOGQzN2ZlYzgzM2ZkYzliYmFjM2UyNmUz
MWJlNDcyYzEzOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1jb25zdCBz
aGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgWFlaIHsKLSAgICBpbnQgeDsKLSAgICBpbnQgeTsKLSAg
ICBpbnQgejsKLX0KLQotdHlwZWRlZiBYWVoxID0gWFlaOwotdHlwZWRlZiBYWVoyID0gWFlaOwot
dHlwZWRlZiBYWVozID0gWFlaOwotCi1bbnVtdGhyZWFkcygyLCAxLCAxKV0KLWNvbXB1dGUgdm9p
ZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxv
YXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIHRocmVhZCBpbnQqIHg7
Ci0gICAgdGhyZWFkIGludCogeTsKLSAgICB0aHJlYWQgZmxvYXQqIGYxOwotICAgIHRocmVhZCBm
bG9hdCogZjI7Ci0gICAgWFlaMSBhOwotICAgIFhZWjIgYjsKLSAgICBYWVozIGM7Ci0gICAgdGhy
ZWFkIGludFtdIGludEFycmF5UmVmMTsKLSAgICB0aHJlYWQgaW50W10gaW50QXJyYXlSZWYyOwot
ICAgIGlmICgqeCA9PSAqeSAmJiB4ID09IHkgJiYgeCA9PSBudWxsICYmIGYxID09IG51bGwgJiYg
KmYxID09IDApIHsKLSAgICAgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gYnVmZmVyW3Vp
bnQodGhyZWFkSUQueCldICogMi4wOwotICAgIH0KLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0
YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0
IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1
dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVy
In1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0g
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25z
dCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDg7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZF
Ul9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFw
V3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlb
Ml0gPSAzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7Ci0gICAgYnVmZmVyRmxvYXQz
MkFycmF5WzRdID0gNTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OwotICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVs2XSA9IDc7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKLSAg
ICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAw
LCByZXN1bHRzQnVmZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4KTsK
LSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1
dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBl
bGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXAp
OwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKLSAgICBjb21wdXRl
UGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5k
RW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRC
dWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNC
dWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0Zsb2F0
MzJBcnJheVswXSA9PSAyCi0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAot
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzJdID09IDYKLSAgICAgICAgJiYgcmVzdWx0
c0Zsb2F0MzJBcnJheVszXSA9PSA4Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0g
PT0gNQotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzVdID09IDYKLSAgICAgICAgJiYg
cmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PSA3Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJy
YXlbN10gPT0gOCkKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAgICB0
ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0g
ICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVz
dFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMtZXhwZWN0
ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjBhNGViNGI2ZmJjMGNkOGUy
ODc1NjIzMzUxMmY5MGQ4NGY3YzgwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGVzLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGR1cGxpY2F0ZUZ1bmN0
aW9ucyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGVzLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZWQ5NmM1MWYwM2YwM2ZlN2FjNTJlYTg2YzU0NmRhOWFk
M2IyNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04
PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBwcmVm
aXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5kdXBsaWNh
dGVGdW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAg
ICAgdm9pZCBmb28oKSB7IH0KLSAgICAgICAgdm9pZCBmb28oKSB7IH0KLSAgICBgKTsKLQotICAg
IGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIHZvaWQgZm9vKGludCB4KSB7IH0KLSAgICAgICAg
dHlwZWRlZiBBID0gaW50OwotICAgICAgICB2b2lkIGZvbyhBIHgpIHsgfQotICAgIGApOwotCi0g
ICAgY29uc3QgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGJhcigpIHsKLSAgICAgICAgICAgIHJl
dHVybiA0MjsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKGludCB4KSB7Ci0gICAgICAgICAg
ICByZXR1cm4geDsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGJhcigpOwotICAgICAgICB9Ci0gICAgICAgIGludCBiYXooKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYmFyKDMpOwotICAgICAgICB9Ci0gICAgYDsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10p
LCA0Mik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImJheiIsIFtdKSwgMyk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgb3Bl
cmF0b3ImW10odGhyZWFkIGludFtdIGEsIHVpbnQgYikgewotICAgICAgICAgICAgcmV0dXJuIDQ7
Ci0gICAgICAgIH0KLSAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIHVp
bnQgb3BlcmF0b3IubGVuZ3RoKHRocmVhZCBpbnRbXSBhKSB7Ci0gICAgICAgICAgICByZXR1cm4g
NDsKLSAgICAgICAgfQotICAgIGApOwotCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnRbXSBhLCB0aHJlYWQgaW50W10gYikgewotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNr
RmFpbChgCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PSh0aHJlYWQgaW50KiBhLCB0aHJlYWQgaW50
KiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIGApOwotfTsK
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1l
LTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0yLWV4cGVjdGVkLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08
L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTIu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxp
ZmV0aW1lLTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk4YzMxMDU4NmI2
ZTdmMjc2ZGViZGRlYWYwY2M5NWIxZThmMmVjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Bl
ci12YXJpYWJsZS1saWZldGltZS0yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25z
dCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQot
ZmxvYXQgYXNzaWduVG9QdHIodGhyZWFkIGZsb2F0KiBwdHIsIGZsb2F0IHZhbHVlKSB7Ci0gICAg
cmV0dXJuICpwdHIgPSB2YWx1ZTsKLX0KLQotdGhyZWFkIGZsb2F0KiByZWFsUHRyKGZsb2F0IHZh
bHVlKQotewotICAgIHJldHVybiAmdmFsdWU7Ci19Ci0KLXRocmVhZCBmbG9hdCogZmlyc3RQdHIo
ZmxvYXQgdmFsdWUpIHsKLSAgICByZXR1cm4gcmVhbFB0cih2YWx1ZSk7Ci19Ci0KLXRocmVhZCBm
bG9hdCogc2Vjb25kUHRyKGZsb2F0IHZhbHVlKSB7Ci0gICAgcmV0dXJuIGZpcnN0UHRyKHZhbHVl
KTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91
dCByZXN1bHQ7Ci0KLSAgICB0aHJlYWQgZmxvYXQqIHB0clRvU2hhZGUgPSBmaXJzdFB0cihzaGFk
ZSk7Ci0gICAgdGhyZWFkIGZsb2F0KiBwdHJUb1NoYWRlMiA9IHNlY29uZFB0cigxLjApOwotCi0g
ICAgZmxvYXQgZHVtbXk7Ci0gICAgdGhyZWFkIGZsb2F0KiBkdW1teVB0ciA9ICZkdW1teTsKLQot
ICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZTIsIDAuMCk7Ci0gICAgdGhyZWFkIGZs
b2F0KiBkdW1teTIgPSByZWFsUHRyKHNoYWRlKTsKLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBv
c2l0aW9uOwotCi0gICAgcmVzdWx0LnNoYWRlID0gKnB0clRvU2hhZGUyOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRl
LCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkg
ewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0g
ICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1h
dDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
LSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUt
My1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUz
MjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJv
cGVyLXZhcmlhYmxlLWxpZmV0aW1lLTMtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2Ny
aXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwot
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYThhMjhmNThjYTIyYTE2ZmRiYzU0MDI5NDk0NjZh
YjBiOTNlNTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1l
LTMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAK
LXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwot
ICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi1mbG9hdCBhc3NpZ25Ub1B0cih0
aHJlYWQgZmxvYXQqIHB0ciwgZmxvYXQgdmFsdWUpIHsKLSAgICByZXR1cm4gKnB0ciA9IHZhbHVl
OwotfQotCi10aHJlYWQgZmxvYXQqIHJlYWxQdHIoZmxvYXQgdmFsdWUpCi17Ci0gICAgZmxvYXQg
diA9IHZhbHVlOwotICAgIHJldHVybiAmdjsKLX0KLQotdGhyZWFkIGZsb2F0KiBmaXJzdFB0cihm
bG9hdCB2YWx1ZSkgewotICAgIHJldHVybiByZWFsUHRyKHZhbHVlKTsKLX0KLQotdGhyZWFkIGZs
b2F0KiBzZWNvbmRQdHIoZmxvYXQgdmFsdWUpIHsKLSAgICByZXR1cm4gZmlyc3RQdHIodmFsdWUp
OwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0
IHJlc3VsdDsKLQotICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZSA9IGZpcnN0UHRyKHNoYWRl
KTsKLSAgICB0aHJlYWQgZmxvYXQqIHB0clRvU2hhZGUyID0gc2Vjb25kUHRyKDEuMCk7Ci0KLSAg
ICBmbG9hdCBkdW1teTsKLSAgICB0aHJlYWQgZmxvYXQqIGR1bW15UHRyID0gJmR1bW15OwotCi0g
ICAgZHVtbXkgPSBhc3NpZ25Ub1B0cihwdHJUb1NoYWRlMiwgMC4wKTsKLSAgICB0aHJlYWQgZmxv
YXQqIGR1bW15MiA9IHJlYWxQdHIoc2hhZGUpOwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9z
aXRpb247Ci0KLSAgICByZXN1bHQuc2hhZGUgPSAqcHRyVG9TaGFkZTI7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUg
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUs
IHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAg
ICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwg
Zm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0
dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBh
dHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwot
ICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAs
IHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2Us
IGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNv
bG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAx
LCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMo
KTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41Owot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRd
ID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTldID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJl
c291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7
Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcg
PSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3Vw
QmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29u
c3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGlu
Z3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQg
PSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRv
ciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4g
PSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3
KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsK
LSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJl
VmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3Rv
cmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1l
bnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2Rl
ciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7
Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFy
dChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0
ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9z
Y3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtZXhw
ZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMz
M2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12
YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5z
dXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWE2YTJlZThiNDA3MzYzNjNiNGI2NzM0MzA1NzVhMTI0MzM5ZmQ5Yi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVh
ZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVh
ZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotc3RydWN0IFZlcnRl
eE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLWZsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBmbG9hdCog
cHRyLCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiAqcHRyID0gdmFsdWU7Ci19Ci0KLXRocmVh
ZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gJnZhbHVlOwotfQot
Ci10aHJlYWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7Ci0gICAgcmV0dXJuIHJlYWxQ
dHIodmFsdWUpOwotfQotCi10aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgewot
ICAgIHJldHVybiBmaXJzdFB0cih2YWx1ZSk7Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4
U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0OwotCi0gICAgdGhyZWFkIGZsb2F0KiBw
dHJUb1NoYWRlID0gZmlyc3RQdHIoc2hhZGUpOwotICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFk
ZTIgPSBzZWNvbmRQdHIoMS4wKTsKLQotICAgIGZsb2F0IGR1bW15OwotICAgIHRocmVhZCBmbG9h
dCogZHVtbXlQdHIgPSAmZHVtbXk7Ci0KLSAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hh
ZGUyLCAwLjApOwotICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZSwgc2hhZGUpOwot
Ci0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0KLSAgICByZXN1bHQuc2hhZGUgPSAq
cHRyVG9TaGFkZTI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAg
ewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0K
LWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5
bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25z
dCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVy
aXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAg
Y29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBj
b25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNv
bG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAg
Y29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9
IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmli
dXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsK
LSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3Jt
LWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9
IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsK
LQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOwotICAgIHZlcnRleEJ1ZmZl
cjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
OiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5V
TklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIu
bWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsK
LQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6
ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0g
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
LSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bS1zcGVjLXRlc3RzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtLXNwZWMtdGVzdHMtZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDI0NjRlOTk3N2RmNjUwOGMyODZk
NzA4OGNkOTg0ZTA5NjI4ZGVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtLXNwZWMtdGVzdHMtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0KLVBBU1MgZW51bUR1cGxpY2F0
ZXMgCi1QQVNTIGRlZmF1bHRFbnVtQ29uc3RydWN0b3IgCi1QQVNTIGVudW1BcnJheVJlZkJhc2Ug
Ci1QQVNTIGVudW1GbG9hdEJhc2UgCi1QQVNTIGVudW1QdHJCYXNlIAotUEFTUyBlbnVtU3RydWN0
QmFzZSAKLVBBU1MgZW51bU5vTWVtYmVycyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWVudW0tc3BlYy10ZXN0cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTZh
YjliZDA1MTMyMGJhMzBkM2VhM2FkMTQxMGVhMmE2YzNhZjUwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVt
LXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwhRE9DVFlQ
RSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwv
dGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0Pgot
Y29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmVudW1EdXBsaWNhdGVzID0gYXN5
bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgICAgICBlbnVtIEZvbyB7
Ci0gICAgICAgICAgICAgICAgV2FyID0gNDIsCi0gICAgICAgICAgICAgICAgRmFtaW5lID0gMCwK
LSAgICAgICAgICAgICAgICBQZXN0aWxlbmNlID0gMjMsCi0gICAgICAgICAgICAgICAgRGVhdGgg
PSA0MgotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX07Ci0KLXdobHNsVGVzdHMuZGVmYXVs
dEVudW1Db25zdHJ1Y3RvciA9IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBwcm9ncmFtID0gYAot
ICAgICAgICBlbnVtIFdlZWtkYXkgewotICAgICAgICAgICAgTW9uZGF5LAotICAgICAgICAgICAg
VHVlc2RheSwKLSAgICAgICAgICAgIFdlZG5lc2RheSwKLSAgICAgICAgICAgIFRodXJzZGF5LAot
ICAgICAgICAgICAgUGl6emFkYXkKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgV2Vla2RheSB4ID0gV2Vla2RheSgpOwotICAgICAgICAgICAgcmV0
dXJuIDQyOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKLX07Ci0KLXdobHNsVGVzdHMu
ZW51bUFycmF5UmVmQmFzZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIGVudW0gRm9vIDogdGhyZWFkIGludFtdIHsKLSAgICAgICAg
ICAgICAgICBCYXIKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMu
ZW51bUZsb2F0QmFzZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIGVudW0gRm9vIDogZmxvYXQgewotICAgICAgICAgICAgICAgIEJh
cgotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5lbnVtUHRyQmFz
ZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIGVudW0gRm9vIDogdGhyZWFkIGludCogewotICAgICAgICAgICAgICAgIEJhcgotICAg
ICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5lbnVtU3RydWN0QmFzZSA9
IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIHN0cnVjdCBUaGluZ3kgeyB9Ci0gICAgICAgICAgICBlbnVtIEZvbyA6IFRoaW5neSB7Ci0g
ICAgICAgICAgICAgICAgQmFyCi0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfTsKLQotd2hs
c2xUZXN0cy5lbnVtTm9NZW1iZXJzID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgZW51bSBGb28geyB9Ci0gICAgICAgIGApOwotfTsK
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lcXVhbGl0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtZXF1YWxpdHktZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiMzM4NDc4M2Y0ODUxMGYzNTNjMTUzMjc0NTQ3ZTVhN2U5ZGUwNmNiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1lcXVhbGl0eS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
MSArMCwwIEBACi0KLVBBU1MgZXF1YWxpdHkgCi1QQVNTIG5vdEVxdWFsaXR5IAotUEFTUyBlcXVh
bGl0eVR5cGVGYWlsdXJlIAotUEFTUyBlcXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAotUEFTUyBl
cXVhbHNXcm9uZ1JldHVyblR5cGUgCi1QQVNTIGxlc3NFcXVhbFdyb25nQXJndW1lbnRMZW5ndGgg
Ci1QQVNTIGxlc3NFcXVhbFdyb25nUmV0dXJuVHlwZSAKLVBBU1MgbGVzc1RoYW5Xcm9uZ0FyZ3Vt
ZW50TGVuZ3RoIAotUEFTUyBsZXNzVGhhbldyb25nUmV0dXJuVHlwZSAKLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVxdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZXF1YWxpdHkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3
ZmE3Mzk5MzUyM2VlNjI0MWFhZTdhZjRlYWM1N2VkZDU2MDM4ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXF1
YWxpdHkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxl
PgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0
IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5lcXVhbGl0eSA9IGFzeW5jICgpID0+IHsK
LSAgICBsZXQgcHJvZ3JhbSA9ICJib29sIGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCA9
PSB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQoNSldKSwgZmFsc2UpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50
KDcpLCBtYWtlVWludCg3KV0pLCB0cnVlKTsKLSAgICBwcm9ncmFtID0gImJvb2wgZm9vKGludCB4
LCBpbnQgeSkgeyByZXR1cm4geCA9PSB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtlSW50KDUpXSks
IGZhbHNlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtlSW50KDcpXSksIHRydWUpOwotICAgIHByb2dyYW0g
PSAiYm9vbCBmb28oYm9vbCB4LCBib29sIHkpIHsgcmV0dXJuIHggPT0geTsgfSI7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJv
b2woZmFsc2UpLCBtYWtlQm9vbCh0cnVlKV0pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1h
a2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9v
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbChmYWxz
ZSldKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKHRydWUpXSksIHRydWUpOwot
fQotCi13aGxzbFRlc3RzLm5vdEVxdWFsaXR5ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9n
cmFtID0gImJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ICE9IHk7IH0iOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQo
NyldKSwgZmFsc2UpOwotICAgIHByb2dyYW0gPSAiYm9vbCBmb28oaW50IHgsIGludCB5KSB7IHJl
dHVybiB4ICE9IHk7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgdHJ1ZSk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg3KSwgbWFrZUludCg3KV0pLCBmYWxzZSk7Ci0gICAgcHJvZ3JhbSA9ICJib29sIGZvbyhi
b29sIHgsIGJvb2wgeSkgeyByZXR1cm4geCAhPSB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1h
a2VCb29sKHRydWUpXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChmYWxzZSld
KSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbChmYWxzZSldKSwgZmFsc2UpOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pLCBmYWxzZSk7Ci19OwotCi13aGxzbFRl
c3RzLmVxdWFsaXR5VHlwZUZhaWx1cmUgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tG
YWlsKCJib29sIGZvbyhpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ID09IHk7IH0iKTsKLX07Ci0K
LXdobHNsVGVzdHMuZXF1YWxzV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+IHsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwo
Ci0gICAgICAgIGAKLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShpbnQpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCwgaW50KSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgICAgIGApOwotfTsKLQotd2hsc2xUZXN0cy5lcXVhbHNXcm9uZ1JldHVyblR5cGUgPSBh
c3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPT0oRm9vLCBGb28pIHsg
cmV0dXJuIDQyOyB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLmxlc3NFcXVhbFdyb25n
QXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPD0oKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcjw9KGludCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLQotICAg
IGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcjw9
KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNs
VGVzdHMubGVzc0VxdWFsV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4gewotICAgIGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAg
IGludCBvcGVyYXRvcjw9KEZvbywgRm9vKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLX0K
LQotd2hsc2xUZXN0cy5sZXNzVGhhbldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PiB7
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJh
dG9yPCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgYXdhaXQgY2hlY2tGYWls
KAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPChpbnQpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICAgICAgYCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBib29sIG9wZXJhdG9yPChpbnQsIGludCwgaW50KSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLmxlc3NUaGFuV3JvbmdSZXR1cm5UeXBlID0gYXN5
bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvcjwoRm9vLCBGb28pIHsgcmV0
dXJuIDQyOyB9Ci0gICAgICAgIGApOwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2Ny
aXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIz
M2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2Ny
aXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwot
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWZsb2F0LW1hdGgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZs
b2F0LW1hdGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGVk
YTMwZjY0YjZlODRkZDMwYzBlZDhjN2ZlOTE0YTUzYTRjZjI3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mbG9h
dC1tYXRoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNT
IGZsb2F0TWF0aCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0
LW1hdGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mbG9hdC1tYXRoLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjBhM2MzZWEzMzc2MWMzMGMyMDAyNDhiODgz
MzlmNGVlOGIwMTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0LW1hdGguaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDk5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0
PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVz
dCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5m
bG9hdE1hdGggPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGJv
b2wgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDQyLjUgPT0gNDIuNTsKLSAg
ICAgICAgfQotICAgICAgICBmbG9hdCBiYXIoZmxvYXQgeCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBiYXIoNy41KTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBm
b285KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZsb2F0KDcuNSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZmxvYXQgZm9vMTIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmxvYXQoNyk7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMTMoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmbG9hdCB4ID0gNy41OwotICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHgpOwot
ICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAgImZvbyIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNiIsIFtdKSwgNy41KTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb285IiwgW10pLCA3
LjUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzEyIiwgW10pLCA3KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0
aW9uKHByb2dyYW0sICJmb28xMyIsIFtdKSwgNy41KTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IGJhcihpbnQgeCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBm
b28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhcig0LjApOwotICAgICAgICAg
ICAgfQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAg
ICAgICAgICAgaW50IGJhcihpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJhcig0LjBmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHVpbnQg
YmFyKHVpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4geDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJhcig0LjApOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLQotICAgIGF3
YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdWludCBiYXIodWludCB4KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaW50IGZvbygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFy
KDQuMGYpOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xU
ZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1mb3ItbG9vcC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Zm9yLWxvb3AtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTY3
ZTVmYjNmZThkNDFjZmRhODU5NjU0MTI0Y2E4ZTUzNzgyMzU1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mb3It
bG9vcC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBm
b3JMb29wIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZm9yLWxvb3Au
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mb3ItbG9vcC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyOTlhOWNmODdlYTM2ZmJkYzU4YTdjNWZhMjg4NzZiNzg2YzVl
MDcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1mb3ItbG9vcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUz
ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04Pgot
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+THZhbHVlcy48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5mb3JMb29wID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbzEoaW50IHgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBzdW0gPSAwOwotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAxKSB7Ci0gICAgICAgICAgICAgICAgc3Vt
ID0gc3VtICsgaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzdW07Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50IGZvbzIoaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBzdW0gPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEp
IHsKLSAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHN1bTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vMyhpbnQgeCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAgICAgICAgICBpbnQgaSA9IDEw
MDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAxKSB7Ci0gICAg
ICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBzdW07Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbzQoaW50IHgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBzdW0gPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB4OyBpID0gaSArIDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA9PSA0KQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN1bTsKLSAgICAgICAgfQotICAgICAgICBp
bnQgZm9vNShpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkgPSBpICsgMSkgewotICAgICAgICAgICAg
ICAgIGlmIChpID09IDUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIHN1bSA9IHN1bSArIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3Vt
OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb282KGludCB4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgc3VtID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyA7IGkgPSBpICsg
MSkgewotICAgICAgICAgICAgICAgIGlmIChpID49IHgpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIGk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gc3VtOwotICAgICAgICB9Ci0gICAgICAgIGludCBmb283KGludCB4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3VtID0gMDsKLSAgICAgICAgICAgIGludCBpID0g
MDsKLSAgICAgICAgICAgIGZvciAoIDsgOyBpID0gaSArIDEpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaSA+PSB4KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBz
dW0gPSBzdW0gKyBpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN1bTsKLSAg
ICAgICAgfQotICAgICAgICBpbnQgZm9vOChpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IHN1bSA9IDA7Ci0gICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgICAgICBmb3IgKCA7
IDsgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0geCkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKLSAgICAgICAgICAgICAgICBp
ID0gaSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3VtOwotICAgICAg
ICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vMSIsIFttYWtlSW50KDMpXSksIDMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28xIiwgW21ha2VJbnQoNCldKSwgNik7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFr
ZUludCg1KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzIiLCBbbWFrZUludCgzKV0pLCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFttYWtlSW50KDQpXSksIDYpOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwg
W21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoMyldKSwgMyk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbbWFrZUludCg0KV0pLCA2
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
MyIsIFttYWtlSW50KDUpXSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtlSW50KDMpXSksIDMpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW21ha2VJbnQoNCld
KSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzQiLCBbbWFrZUludCg1KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtlSW50KDYpXSksIDExKTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFttYWtlSW50
KDMpXSksIDMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb281IiwgW21ha2VJbnQoNCldKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg1KV0pLCAxMCk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFr
ZUludCg2KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg3KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzYiLCBbbWFrZUludCgzKV0pLCAzKTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNiIs
IFttYWtlSW50KDQpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNildKSwg
MTUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b282IiwgW21ha2VJbnQoNyldKSwgMjEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW21ha2VJbnQoMyldKSwgMyk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzciLCBbbWFrZUludCg0
KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vNyIsIFttYWtlSW50KDUpXSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDYpXSksIDE1KTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtl
SW50KDcpXSksIDIxKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vOCIsIFttYWtlSW50KDMpXSksIDMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284IiwgW21ha2VJbnQoNCldKSwgNik7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBb
bWFrZUludCg1KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg2KV0pLCAxNSk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg3KV0pLCAy
MSk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZv
byhpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
OyBpID0gaSArIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIHggPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9v
KGludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIDsgeCA8IDEwOyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3Nj
cmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWdl
dHRlci1zZXR0ZXItdHlwZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Z2V0dGVyLXNldHRlci10eXBlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDM1N2VjN2I3YTkwNGUxMGQyZTQxYmIzNmFmZjU2NmNhODMwMWE2NS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtZ2V0dGVyLXNldHRlci10eXBlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDQgKzAsMCBAQAotCi1QQVNTIGdldHRlclR5cGUgCi1QQVNTIHNldHRlclR5cGUgCi0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1nZXR0ZXItc2V0dGVyLXR5cGUuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1nZXR0ZXItc2V0dGVyLXR5cGUuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxZjA0MTYyNDI0NjljMTM4MTM5MGZhNDg3OThjZjkz
Zjg2Zjc2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZ2V0dGVyLXNldHRlci10eXBlLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IGxvb3BzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNz
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmdldHRl
clR5cGUgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgaW50
IG9wZXJhdG9yLngodGhyZWFkIGludFtdIGZvbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZvb1swXTsKLSAgICAgICAgfQotICAgIGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAot
ICAgICAgICBpbnQgb3BlcmF0b3IueChpbnRbM10gZm9vKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZm9vWzBdOwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFp
bChgCi0gICAgICAgIGludCBvcGVyYXRvcltdKHRocmVhZCBpbnRbXSBmb28sIGludCBpbmRleCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZvb1tpbmRleF07Ci0gICAgICAgIH0KLSAg
ICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgaW50IG9wZXJhdG9yLngoaW50
WzNdIGZvbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZvb1swXTsKLSAgICAgICAg
fQotICAgIGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBzdHJ1Y3QgRm9vIHsK
LSAgICAgICAgICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIGludCBvcGVyYXRvcltdKEZv
byBmb28sIHVpbnQ0IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vW2lu
ZGV4LnhdOwotICAgICAgICB9Ci0gICAgYCk7IAotfTsKLQotd2hsc2xUZXN0cy5zZXR0ZXJUeXBl
ID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIHRocmVhZCBp
bnRbXSBvcGVyYXRvci54PSh0aHJlYWQgaW50W10gZm9vLCB1aW50IHgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmb287Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKGAKLSAgICAgICAgaW50WzNdIG9wZXJhdG9yLng9KGludFszXSBmb28sIHVpbnQgeCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZvbzsKLSAgICAgICAgfQotICAgIGApOyAK
LSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICB0aHJlYWQgaW50W10gb3BlcmF0b3JbXT0o
dGhyZWFkIGludFtdIGZvbywgdWludCB4LCB1aW50IHkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmb287Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAK
LSAgICAgICAgaW50WzNdIG9wZXJhdG9yLng9KGludFszXSBmb28sIHVpbnQgeCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZvbzsKLSAgICAgICAgfQotICAgIGApOyAKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGludCB4Owot
ICAgICAgICB9Ci0gICAgICAgIEZvbyBvcGVyYXRvcltdPShGb28gZm9vLCBmbG9hdDQgeSwgdWlu
dCB6KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAgICAgIH0KLSAg
ICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAg
ICAgICAgICBpbnQgeDsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9v
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAgICAgIH0KLSAgICAg
ICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludDQgeCkKLSAgICAgICAgewotICAgICAgICAg
ICAgRm9vIHJlc3VsdDsKLSAgICAgICAgICAgIGZvby54ID0geC54OwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIGApOyAKLX07Ci0KLXJ1blRlc3RzKHdobHNsVGVz
dHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1odWdlLWFycmF5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1odWdlLWFycmF5LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
aHVnZS1hcnJheS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBB
U1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXkuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwOGEyZmYyMmViYTU1ZWY2NmU3NGIyOWY0ZTIzYTk5ZjAyYWI5MzIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCww
IEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0
IHNoYWRlclNvdXJjZSA9IGAKLXZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBhcnJheSwgZmxvYXQg
dmFsdWUpIHsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewot
ICAgICAgICBhcnJheVtpXSA9IHZhbHVlOwotICAgIH0KLX0KLQotW251bXRocmVhZHMoMSwgMSwg
MSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Ci0gICAg
ZmxvYXRbMTAwMF0gYXJyYXk7Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxMDAwKQotICAgICAg
ICByZXR1cm47Ci0gICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgaWYgKGFycmF5W2ldICE9IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXJyYXlbMF0gPSAwLjEzMzc7Ci0gICAgaWYgKGFycmF5WzBdICE9IDAuMTMzNykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgdGhyZWFkIGZsb2F0W10gYXJyYXlQdHIgPSBAYXJyYXk7Ci0g
ICAgaWYgKGFycmF5UHRyLmxlbmd0aCAhPSAxMDAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm
aWxsKGFycmF5UHRyLCAwLjEwMTApOwotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5UHRy
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhcnJheVB0cltpXSAhPSAwLjEwMTApCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhcnJheVtpXSAhPSAwLjEwMTApCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmlsbChAYXJyYXksIDAuMDEwMSk7Ci0gICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFycmF5
UHRyW2ldICE9IDAuMDEwMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGFycmF5
W2ldICE9IDAuMDEwMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBidWZmZXJb
MF0gPSAxOwotfQotYDsKLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0
IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNv
dXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0
IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlz
aWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3Jv
dXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBs
YXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZp
Y2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3Qgc2l6ZSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxOwotCi0gICAg
Y29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBi
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7Ci0g
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAg
IGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNh
Z2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcg
PSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5k
aW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBi
aW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczog
W2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29k
ZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5j
b2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXpl
KTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNv
bXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQ
aXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3Jv
dXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBjb21w
dXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3Vs
dHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgbGV0IHJlc3VsdHNJbnQzMkFycmF5ID0gbmV3
IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0ludDMyQXJy
YXlbMF0gPT09IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAg
dGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNo
SlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwot
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRl
c3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pZi1zdGF0ZW1l
bnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVudC1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzgzZTdmYWQ0NmZl
MzU3ZDE5ZTExMGFkNTZjZDg0NTIxYTZiYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVudC1l
eHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotUEFTUyBpZlN0YXRl
bWVudCAKLVBBU1MgaWZFbHNlU3RhdGVtZW50IAotUEFTUyBpZkVsc2VJZlN0YXRlbWVudCAKLVBB
U1MgaWZFbHNlSWZFbHNlU3RhdGVtZW50IAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtaWYtc3RhdGVtZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaWYt
c3RhdGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MjY0OGNkNWRj
MTNhMzAyMzVhYTJkZDk1ZGM1YmM5Zjg1NjFmNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVu
dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMuaWZTdGF0ZW1lbnQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBw
cm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAgICAg
eSA9IDg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4geTsKLSAgICAgICAgfQot
ICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDMpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0pLCA2KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSld
KSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDYpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCld
KSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDkpXSksIDYpOwotfQotCi13aGxzbFRlc3RzLmlmRWxzZVN0YXRlbWVu
dCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28o
aW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgIGlm
ICh4ID09IDcpIHsKLSAgICAgICAgICAgICAgICB5ID0gODsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgeSA9IDk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4geTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDMpXSksIDkpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0p
LCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNSldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDYpXSksIDkpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0p
LCA4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoOCldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDkpOwotfQotCi13aGxzbFRl
c3RzLmlmRWxzZUlmU3RhdGVtZW50ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9
IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkg
PSA2OwotICAgICAgICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgIHkgPSA4Owot
ICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDgpIHsKLSAgICAgICAgICAgICAgICB5ID0gOTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICB9Ci0gICAgYDsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoMyldKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg1KV0pLCA2KTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNildKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoOSldKSwgNik7Ci19Ci0KLXdobHNsVGVzdHMuaWZFbHNlSWZFbHNlU3RhdGVtZW50
ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhp
bnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkgPSA2OwotICAgICAgICAgICAgaWYg
KHggPT0gNykgewotICAgICAgICAgICAgICAgIHkgPSA4OwotICAgICAgICAgICAgfSBlbHNlIGlm
ICh4ID09IDgpIHsKLSAgICAgICAgICAgICAgICB5ID0gOTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgeSA9IDEwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzKV0pLCAxMCk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQp
XSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2KV0pLCAxMCk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDcpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOSldKSwgMTApOwotfQotCi1y
dW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjhlNTBlNzE0NzUwYjZjZWFjNzYyMjJm
MDVjZWJhNjJkMWE1MGMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmNyZW1lbnQtZGVjcmVtZW50LWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGluY3JlbWVudEFu
ZERlY3JlbWVudCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3Jl
bWVudC1kZWNyZW1lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmNyZW1lbnQt
ZGVjcmVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NjY1OWE3M2Zk
ZDc3OGY5ZDFjYTZkZjhhOWIyOTJhZDI4NDUxZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1k
ZWNyZW1lbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTwhRE9DVFlQRSBo
dG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Ci08dGl0bGU+Q29weWluZy48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5pbmNyZW1lbnRBbmREZWNyZW1lbnQgPSBhc3luYyAoKSA9PiB7Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28xKCkgeyBpbnQgeCA9IDA7IHJldHVybiB4
Kys7IH0KLSAgICAgICAgaW50IGZvbzIoKSB7IGludCB4ID0gMDsgeCsrOyByZXR1cm4geDsgfQot
ICAgICAgICBpbnQgZm9vMygpIHsgaW50IHggPSAwOyByZXR1cm4gKyt4OyB9Ci0gICAgICAgIGlu
dCBmb280KCkgeyBpbnQgeCA9IDA7ICsreDsgcmV0dXJuIHg7IH0KLSAgICAgICAgaW50IGZvbzUo
KSB7IGludCB4ID0gMDsgcmV0dXJuIHgtLTsgfQotICAgICAgICBpbnQgZm9vNigpIHsgaW50IHgg
PSAwOyB4LS07IHJldHVybiB4OyB9Ci0gICAgICAgIGludCBmb283KCkgeyBpbnQgeCA9IDA7IHJl
dHVybiAtLXg7IH0KLSAgICAgICAgaW50IGZvbzgoKSB7IGludCB4ID0gMDsgLS14OyByZXR1cm4g
eDsgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzEiLCBbXSksIDApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCAxKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgMSk7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDEpOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb281IiwgW10p
LCAwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vNiIsIFtdKSwgLTEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb283IiwgW10pLCAtMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbXSksIC0xKTsKLX07Ci0KLXJ1blRlc3RzKHdo
bHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1pbmRleC1hbmRlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtaW5kZXgtYW5kZXItZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NmNiNDk0NGVjYjgzNTljYzU0N2QyOWIxNTJiYjIxMTAwNzFmMzZmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1pbmRleC1hbmRlci1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICsw
LDAgQEAKLQotUEFTUyBpbmRleEFuZGVyV2l0aE5vdGhpbmdXcm9uZyAKLVBBU1MgaW5kZXhBbmRl
cldpdGhXcm9uZ051bWJlck9mQXJndW1lbnRzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bmRleC1hbmRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTcyODc4YmFm
MWE0NWFkNDI3MjVmNjUyZjY0YTU2YmE5NGJhMDFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1hbmRl
ci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08
aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0K
LXdobHNsVGVzdHMuaW5kZXhBbmRlcldpdGhOb3RoaW5nV3JvbmcgPSBhc3luYyAoKSA9Pgotewot
ICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGlu
dCB4OwotICAgICAgICB9Ci0gICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBG
b28qIGZvbywgdWludCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZmb28tPng7Ci0g
ICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyB4
OwotICAgICAgICAgICAgeC54ID0gMTM7Ci0gICAgICAgICAgICByZXR1cm4geFs2NjZdOwotICAg
ICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10pLCAxMyk7Ci19Ci0KLXdobHNsVGVzdHMuaW5kZXhBbmRlcldpdGhX
cm9uZ051bWJlck9mQXJndW1lbnRzID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgICAgICByZXR1
cm4gJng7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAg
ICAgICAgIGludCB4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyZWFkIGludCogb3Bl
cmF0b3ImW10odGhyZWFkIEZvbyogZm9vKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiAmZm9vLT54OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsK
LSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocmVh
ZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywgdWludCwgdWludCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRl
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNl
dHRlci1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYmJmZjEx
MzQzOWMzMTBmYjc0NmFhNTJmNDk0OGYyMGY2ZjdjNTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWdl
dHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0K
LVBBU1MgcG9pbnRlckluZGV4R2V0dGVyIAotUEFTUyBwb2ludGVyR2V0dGVyIAotCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRlci5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWdldHRlci1zZXR0ZXIuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEwNzlmYTU3ZDE4NWM1YWRmMjY4Y2U1ZDJkY2ZmYjE0
NGJlMzJmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRlci5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsODEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0K
LXdobHNsVGVzdHMucG9pbnRlckluZGV4R2V0dGVyID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0
IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oZGV2aWNl
IGludCosIHVpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcltdKHRocmVhZCBpbnQqLCB1aW50KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIGApOwotCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBpbnQgb3BlcmF0b3JbXSh0aHJlYWRncm91cCBpbnQqLCB1aW50KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwot
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0
b3JbXShjb25zdGFudCBpbnQqLCB1aW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3Rz
LnBvaW50ZXJHZXR0ZXIgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vKGRldmljZSBpbnQqKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50
IG9wZXJhdG9yLmZvbyh0aHJlYWQgaW50KikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28odGhyZWFkZ3Jv
dXAgaW50KikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTQzOwotICAg
ICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAK
LSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28oY29uc3RhbnQgaW50KikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLX0KLQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LXNldHRlci1nZXR0ZXItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LXNldHRlci1nZXR0ZXIt
ZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzYzOWQwNWE2YjM0
MmY4ZmVjYTQ3ZjgxNTQzMjQ4NjdmMTBlZTRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0ZXIt
Z2V0dGVyLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi1QQVNT
IGluZGV4U2V0dGVyV2l0aE5vR2V0dGVyT3ZlcmxvYWQgCi1QQVNTIGluZGV4U2V0dGVyV2l0aE5v
R2V0dGVyT3ZlcmxvYWRGaXhlZCAKLVBBU1Mgbm90TG9uZUluZGV4U2V0dGVyIAotUEFTUyBsb25l
SW5kZXhTZXR0ZXIgCi1QQVNTIGxvbmVJbmRleFNldHRlclBvaW50ZXIgCi0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtc2V0dGVyLWdldHRlci5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjOGExNWFhNzQ2NGM3YTdlMjYyMThhZjYxZTI3OGE3YjVjZGFi
ZTA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5U
ZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuaW5kZXhT
ZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgc3RydWN0IEJhciB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvcltdKEZvbywgdWludCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTM0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgQmFyIG9wZXJhdG9yW109KEJhciwgdWludCwgaW50KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBCYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgYCk7Ci0gICAgICAgIAotfTsKLQotd2hsc2xUZXN0cy5pbmRleFNldHRlcldpdGhOb0dldHRl
ck92ZXJsb2FkRml4ZWQgPSBhc3luYyAoKSA9PgotewotICAgIGNvbnN0IHByb2dyYW0gPSBgCi0g
ICAgICAgIHN0cnVjdCBCYXIgeyB9Ci0gICAgICAgIGludCBvcGVyYXRvcltdKEJhciwgdWludCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDUzNDsKLSAgICAgICAgfQotICAgICAgICBC
YXIgb3BlcmF0b3JbXT0oQmFyLCB1aW50LCBpbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBCYXIoKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkgeyByZXR1cm4gQmFyKClb
MF07IH0KLSAgICAgICAgaW50IGJhcigpIHsKLSAgICAgICAgICAgIEJhciBiOwotICAgICAgICAg
ICAgYlswXSA9IDQwMDsKLSAgICAgICAgICAgIHJldHVybiBiWzBdOwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCA1MzQpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJiYXIiLCBbXSksIDUzNCk7Ci19OwotCi13aGxzbFRlc3RzLm5vdExvbmVJbmRleFNl
dHRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgY29uc3QgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50
IG9wZXJhdG9yW10oaW50LCB1aW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gNjU7
Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgdWludCwgaW50KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gNTQzOwotICAgICAgICB9Ci0gICAgICAgIGludCBm
b28oKSB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIHJldHVybiB4WzBdOwotICAg
ICAgICB9Ci0gICAgICAgIGludCBiYXIoKSB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAg
ICAgIHhbMF0gPSA0MjsKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICB9Ci0gICAgYDsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10pLCA2NSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImJhciIsIFtdKSwgNTQzKTsKLX07Ci0KLXdobHNsVGVzdHMubG9uZUluZGV4U2V0dGVyID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIGludCBvcGVyYXRvcltdPShpbnQsIHVpbnQsIGludCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICAg
ICAgCi19OwotCi13aGxzbFRlc3RzLmxvbmVJbmRleFNldHRlclBvaW50ZXIgPSBhc3luYyAoKSA9
PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdGhyZWFk
IGludCogb3BlcmF0b3JbXT0odGhyZWFkIGludCogcHRyLCB1aW50LCBpbnQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci0gICAgICAgIAotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGgt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1iaXQtbWF0aC1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MWI2YzUzZTFkY2MwY2Ri
NTdmNjU2ZmMyNjVkYjlmMjAxMjVmZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1iaXQtbWF0aC1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotUEFTUyBpbnRCaXRBbmQg
Ci1QQVNTIGludEJpdE9yIAotUEFTUyBpbnRCaXRYb3IgCi1QQVNTIGludEJpdE5vdCAKLVBBU1Mg
aW50TFNoaWZ0IAotUEFTUyBpbnRSU2hpZnQgCi1QQVNTIGludFNpbXBsZU1hdGggCi0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGguaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjE3YWY0ZDg4ZTc4M2FiZGY2NDViMjgxZDE4MjRhM2Y4OTM0ZGRmZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtaW50LWJpdC1tYXRoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0
YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IGludCBiaXQgbWF0
aC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlw
dD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5pbnRCaXRBbmQgPSBhc3lu
YyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCBhLCBp
bnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgJiBiOwotICAgICAgICB9Ci0g
ICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoMSksIG1ha2VJbnQoNyldKSwgMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFr
ZUludCg0MildKSwgNDIpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCgtMSksIG1ha2VJbnQoLTcpXSksIC03KTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoMCksIG1ha2VJbnQoODU3MzIpXSksIDApOwotfQotCi13aGxzbFRlc3RzLmludEJpdE9yID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQg
YSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhIHwgYjsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlSW50KDcpXSksIDcpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NTUzNSks
IG1ha2VJbnQoNDIpXSksIDY1NTM1KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoLTEpLCBtYWtlSW50KC03KV0pLCAtMSk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDApLCBtYWtlSW50KDg1NzMyKV0pLCA4NTczMik7Ci19Ci0KLXdobHNsVGVzdHMu
aW50Qml0WG9yID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAg
aW50IGZvbyhpbnQgYSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhIF4g
YjsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlSW50KDcpXSksIDYpOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg2NTUzNSksIG1ha2VJbnQoNDIpXSksIDY1NDkzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoLTEpLCBtYWtlSW50
KC03KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1ha2VJbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQot
d2hsc2xUZXN0cy5pbnRCaXROb3QgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0g
YAotICAgICAgICBpbnQgZm9vKGludCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
fmE7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKV0pLCAtMik7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1
KV0pLCAtNjU1MzYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCgtMSldKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApXSksIC0xKTsKLX0K
LQotd2hsc2xUZXN0cy5pbnRMU2hpZnQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFt
ID0gYAotICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhIDw8IGI7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKSwgbWFrZVVp
bnQoNyldKSwgMTI4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAyNjIxNDApOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCgtMSksIG1ha2VVaW50KDUpXSksIC0zMik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApLCBtYWtlVWludCgz
KV0pLCAwKTsKLX0KLQotd2hsc2xUZXN0cy5pbnRSU2hpZnQgPSBhc3luYyAoKSA9PgotewotICAg
IGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhID4+IGI7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCgxKSwgbWFrZVVpbnQoNyldKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFrZVVpbnQoMildKSwg
MTYzODMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCgtMSksIG1ha2VVaW50KDUpXSksIC0xKTsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1h
a2VVaW50KDMpXSksIDApOwotfQotCi13aGxzbFRlc3RzLmludFNpbXBsZU1hdGggPSBhc3luYyAo
KSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSAiaW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJu
IHggKyB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgMTIpOwotICAgIHByb2dyYW0g
PSAiaW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggLSB5OyB9IjsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyks
IG1ha2VJbnQoNSldKSwgMik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpLCBtYWtlSW50KDcpXSksIC0yKTsKLSAgICBw
cm9ncmFtID0gImludCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICogeTsgfSI7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDcpLCBtYWtlSW50KDUpXSksIDM1KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoLTUpXSksIC0z
NSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxpdGVyYWwtY29tcGFyZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxpdGVyYWwtY29tcGFyZS1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZGFkNjU5M2I2MTI3
YTYyZjJlNzRjMTgwNGI5MmYyZDMwOTFjYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1saXRlcmFsLWNv
bXBhcmUtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mg
dHdvSW50TGl0ZXJhbHMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bnQtbGl0ZXJhbC1jb21wYXJlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxp
dGVyYWwtY29tcGFyZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGY0MmU4
MmViN2E5YTZiYmRkODYwMzI0OTBkNTdmYTdlZTFjOTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtbGl0
ZXJhbC1jb21wYXJlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48
L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy50d29JbnRMaXRl
cmFscyA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgYm9vbCBm
b28oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gNDIgPT0gNDI7Ci0gICAgICAgIH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCB0cnVlKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3Njcmlw
dD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb2dpY2Fs
LW5lZ2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb2dpY2Fs
LW5lZ2F0aW9uLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM5
ODE0MDUzM2Q0NWNlNDU0MzYxZDU2NjViODc0N2EyNDA1MDAzYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9n
aWNhbC1uZWdhdGlvbi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LQotUEFTUyBsb2dpY2FsTmVnYXRpb24gCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1sb2dpY2FsLW5lZ2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
bG9naWNhbC1uZWdhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjIx
NDVmZTVkMGU4MGFlOWE0NDBkM2RlYmQ4NzdiNzAxODM2Njg1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb2dp
Y2FsLW5lZ2F0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkx2YWx1ZXMuPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMubG9naWNhbE5lZ2F0aW9uID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9ICJib29sIGZvbyhib29sIHgpIHsgcmV0dXJuICF4OyB9IjsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9v
bCh0cnVlKV0pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpXSksIHRydWUpOwotfQotCi1ydW5U
ZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG9vcHMtYnJlYWstZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggM2JmODY5YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG9vcHMtYnJlYWstZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5Pgot
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08
c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OwotZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMt
YnJlYWsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyMzgyZGFjMGUxOTBh
MmEyNDhjNTczYjY0ZDFkNThmNjUwZmFkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtYnJlYWsuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVj
dCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZs
b2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRydWU7Ci0g
ICAgZm9yICh1aW50IGkgPSAwOyBpIDwgMTA7IChpID0gaSArIDEsIHNoYWRlID0gc2hhZGUgKyAx
LjApKSB7Ci0gICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBzaGFkZSA9IHNoYWRlICsgMS4wOwotICAgIH0KLQotICAgIHJlc3VsdC5wb3NpdGlv
biA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBz
aGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewot
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAg
Y29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5n
bGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJj
dyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBj
b25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDog
InJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8v
IEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVs
bDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDog
ImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2Nh
dGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1
dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtp
bnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2Jp
bmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5k
R3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdy
aXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0g
PSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0w
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKLQot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTldID0gMC4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwot
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAx
LCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRw
dXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9y
ZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xv
ckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQ
YXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVz
Y3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxp
bmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBd
LCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVu
ZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsK
LSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAg
IGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
LX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJv
ZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7Ci1kcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1sb29wcy1jb250aW51ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2I0
ZTkwMThlM2FkM2U0NDFiZjMzMjJiNWI5NDNlNmY2MWE4YWFmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29w
cy1jb250aW51ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLTwhRE9DVFlQ
RSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291
cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLXZlcnRleCBWZXJ0
ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQg
c2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0OwotCi0gICAgYm9v
bCBiID0gdHJ1ZTsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9IGkgKyAxKSB7Ci0g
ICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBzaGFkZSA9IHNoYWRlICsgMS4wOwotICAgIH0KLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBv
c2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwg
c2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3Qg
ZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdt
ZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3Ry
aXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1
bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBj
b2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4
dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNv
bG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQot
ICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjog
MSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0g
W2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIw
LCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBd
OwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVgg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5
bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKLQotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTldID0gMC4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJj
ZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRp
bmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdy
b3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAg
Y29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmlu
ZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0g
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0p
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFz
c0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0
aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdC
bGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwot
PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1s
b29wcy1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2
NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1l
eHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0
bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDI4MDVjYjYwODI2M2Rj
OTE5ZWExMzY0NzAxYzQ3YmE0MzFhMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLXNwZWMtdGVzdHMt
ZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLVBBU1MgZG9XaGls
ZSAKLVBBU1Mgc2ltcGxlV2hpbGUgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1sb29wcy1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9v
cHMtc3BlYy10ZXN0cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE5ODRk
NTEyMDM0YWE4MTY2MzcwMjJhNTUzNzE0YzFiYTVkNDQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1z
cGVjLXRlc3RzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQi
IGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgbG9vcHMuPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMuZG9XaGlsZSA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dy
YW0gPSBgCi0gICAgICAgIGludCBmb28xKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgeSA9IDc7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgeSA9IDg7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IHdoaWxlICh4IDwgMTApOwotICAgICAg
ICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbzIoaW50IHgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNzsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAg
ICAgICAgICB5ID0gODsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gd2hp
bGUgKHkgPT0gNyk7Ci0gICAgICAgICAgICByZXR1cm4geTsKLSAgICAgICAgfQotICAgICAgICBp
bnQgZm9vMyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gMTEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgeCA9IDE1OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3VtID0gc3VtICsgeDsKLSAgICAgICAgICAgICAg
ICB4ID0geCArIDE7Ci0gICAgICAgICAgICB9IHdoaWxlICh4IDwgMTMpOwotICAgICAgICAgICAg
cmV0dXJuIHN1bTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFrZUludCgxKV0pLCA4KTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtl
SW50KDExKV0pLCA4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vMiIsIFttYWtlSW50KDEpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoOSldKSwgMTkpOwot
fQotCi13aGxzbFRlc3RzLnNpbXBsZVdoaWxlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJv
Z3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAg
d2hpbGUgKHggPCAxMykKLSAgICAgICAgICAgICAgICB4ID0geCAqIDI7Ci0gICAgICAgICAgICBy
ZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIDE2KTsKLX0KLQotcnVu
VGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWxvb3BzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZmI3Njc1YzA2Yzdk
OGI5NDlkNzA1OWEyOWU1MzY0MjkyYjkyOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxo
ZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9o
ZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVy
dGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgx
KSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAx
MDsgaSA9IGkgKyAxKSB7Ci0gICAgICAgIHNoYWRlID0gc2hhZGUgKyAwLjE7Ci0gICAgfQotCi0g
ICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFk
ZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVy
biBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1
dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9Owot
ICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29u
c3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4
QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ig
PSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0t
YnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2
ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
ciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAg
Y29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZl
cnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsy
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjE7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzldID0gMC4xOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4xOwot
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjE7Ci0gICAgdmVydGV4QnVmZmVy
MC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVO
SUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5t
YXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwot
Ci0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXpl
OiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNl
OiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91
dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBj
b25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAg
ICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9y
bSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3
YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4u
Z2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1
dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNv
bnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NE
ZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9Owot
ICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQ
YXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAx
LCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1
bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAg
ICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwg
ZnVuY3Rpb24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJp
YWJsZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDQwNzgx
YTRhZWM3YmIyYzNlYzcwZTdiNTJmZjE4ZmRjZTZhMjhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb3RzLW9m
LWxvY2FsLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAg
QEAKLQotUEFTUyBsb3RzT2ZMb2NhbFZhcmlhYmxlcyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWxvdHMtb2YtbG9jYWwtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJpYWJsZXMuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTYxMDRiNDE2OTRmNTVhYzQ1YjlhODEwMmQxODE0NDI4ZjA4Njk0
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJpYWJsZXMuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDM3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFy
c2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+
TG90cyBvZiBsb2NhbCB2YXJpYWJsZXMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNs
VGVzdHMubG90c09mTG9jYWxWYXJpYWJsZXMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBzcmMg
PSAiaW50IHN1bSgpIHtcbiI7Ci0gICAgc3JjICs9ICIgICAgaW50IGkgPSAwO1xuIjsKLSAgICBs
ZXQgdGFyZ2V0ID0gMDsKLSAgICBjb25zdCBudW1WYXJzID0gNTA7Ci0gICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBudW1WYXJzOyBpKyspIHsKLSAgICAgICAgc3JjICs9IGAgICBpID0gJHtpfTtcbmA7
Ci0gICAgICAgIHNyYyArPSBgICAgaW50IFYke2l9ID0gKGkgKyAzKSAqIChpICsgMyk7XG5gOwot
ICAgICAgICB0YXJnZXQgKz0gKGkgKyAzKSAqIChpICsgMyk7Ci0gICAgfQotICAgIHNyYyArPSAi
ICAgIGludCByZXN1bHQgPSAwO1xuIjsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZhcnM7
IGkrKykgewotICAgICAgICBzcmMgKz0gYCAgICByZXN1bHQgKz0gViR7aX07XG5gOwotICAgIH0K
LSAgICBzcmMgKz0gIiAgICByZXR1cm4gcmVzdWx0O1xuIjsKLSAgICBzcmMgKz0gIn0iOwotICAg
IGxldCBwcm9ncmFtID0gc3JjOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJzdW0iLCBbXSksIHRhcmdldCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVz
dHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1sdmFsdWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1s
dmFsdWVzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQwMjIz
MWM0ZTU0N2ViMmQ1M2NlZDFmODViNDFjMDFlMjI3NWU0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbHZhbHVl
cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBsVmFs
dWVzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbHZhbHVlcy5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmE1OTczNzMyODVjMzY1NzZiYzY0NzNlODJmMDAwMDZiNTI4MTY5My4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbHZhbHVlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+THZhbHVlcy48L3RpdGxlPgot
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5sVmFsdWVzID0gYXN5bmMgKCkgPT4gewotICAg
IGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJih4KyspOwotICAg
ICAgICAgICAgcmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNr
RmFpbChgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCA9
IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJigrK3gpOwotICAgICAgICAgICAgcmV0
dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAg
ICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAg
ICAgICB0aHJlYWQgaW50KiB5ID0gJih4ID0gMyk7Ci0gICAgICAgICAgICByZXR1cm4gKnk7Ci0g
ICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgaW50IGZv
bygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgIHRocmVh
ZCBpbnQqIHkgPSAmMzsKLSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAgIGAp
OyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgYmFyKGludCB4KSB7Ci0gICAg
ICAgICAgICByZXR1cm4geCArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIHkg
PSAmYmFyKDMpOwotICAgICAgICAgICAgcmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAot
ICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJig3LCB4KTsK
LSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAgIGApOwotICAgIGF3YWl0IGNo
ZWNrRmFpbChgCi0gICAgICAgIGVudW0gRGF5cyB7Ci0gICAgICAgICAgICBNb25kYXksCi0gICAg
ICAgICAgICBUdWVzZGF5Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIHkgPSAmKERh
eXMuTW9uZGF5KTsKLSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAgIGApOyAK
LSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhyZWFkIGJvb2wqIHkgPSAmKHRydWUgJiYgZmFsc2UpOwotICAgICAgICAgICAg
cmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0g
ICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJlYWQgYm9vbCogeSA9
ICYoIXRydWUpOwotICAgICAgICAgICAgcmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAot
ICAgIGNvbnN0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpbnQgeCA9IDM7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJng7Ci0gICAg
ICAgICAgICByZXR1cm4gKnk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDMpOwotfTsKLQotcnVu
VGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0
cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNGNhNDkyMzY3
OTgzN2JmMWI2Y2UzNGI4ZTI0MzFjNThkNWM1ZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXkt
cmVmLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBA
Ci0KLVBBU1MgbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmIAotUEFTUyBtYWtlQXJyYXlSZWZGcm9t
TG9jYWwgCi1QQVNTIG1ha2VBcnJheVJlZkZyb21Qb2ludGVyIAotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRkYmY0NWEwZDhjNWQyZWJlYzg5OTJmYTEwNzM3
ZGUzNWNmODFiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQg
c3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3Rz
ID0ge307Ci0KLXdobHNsVGVzdHMubWFrZUFycmF5UmVmRnJvbUFycmF5UmVmID0gYXN5bmMgKCkg
PT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IGJh
cih0aHJlYWQgaW50W10gcmVmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biByZWZbMF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgYmF6KHRocmVhZCBpbnRb
XSBwdHIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhcihAcHRyKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGludCB4ID0gNDg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJheihAeCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLm1ha2VBcnJheVJl
ZkZyb21Mb2NhbCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAg
IGludCBiYXIodGhyZWFkIGludFtdIHJlZikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHJlZlswXTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50IHggPSA0ODsKLSAgICAgICAgICAgIHJldHVybiBiYXIoQHgpOwotICAgICAgICB9
Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCA0OCk7Ci19Ci0KLXdobHNsVGVzdHMubWFrZUFycmF5UmVmRnJvbVBvaW50
ZXIgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgYmFy
KHRocmVhZCBpbnRbXSByZWYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWZbMF07
Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJheih0aHJlYWQgaW50KiBwdHIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBiYXIoQHB0cik7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZv
bygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gNDg7Ci0gICAgICAgICAgICByZXR1
cm4gYmF6KCZ4KTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDgpOwotfQotCi1ydW5UZXN0cyh3
aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZh
ZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MGIzYjNlYzcxOTRmNWNlMGRlYWExYTBlN2IwOTE5ZTQ1OGRhYjU0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
MTg0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0
PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotYm9vbCB0ZXN0MSgpIHsKLSAgICBpbnQgdmFsdWUg
PSA0MjsKLSAgICB0aHJlYWQgaW50W10gYXJyYXkgPSBAdmFsdWU7Ci0gICAgaWYgKGFycmF5Lmxl
bmd0aCAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzBdICE9IDQy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzEyMDIxM10gIT0gMCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXJyYXlbMF0gPSAxMzM3OwotICAgIGlmICh2YWx1
ZSAhPSAxMzM3KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCB0ZXN0MigpIHsKLSAgICBpbnQgdmFsdWUgPSA0MjsKLSAgICB0aHJlYWQgaW50KiBw
dHIgPSAmdmFsdWU7Ci0gICAgaWYgKCpwdHIgIT0gNDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHRocmVhZCBpbnRbXSBhcnJheSA9IEBwdHI7Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCAh
PSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzBdICE9IDQyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzEyMzc0MjE3XSAhPSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgKnB0ciA9IDY2NjsKLSAgICBpZiAoKnB0ciAhPSA2
NjYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgIT0gNjY2KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzBdICE9IDY2NikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXJyYXlbMF0gPSA0MjQyOwotICAgIGlmICgqcHRyICE9IDQyNDIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgIT0gNDI0MikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChhcnJheVswXSAhPSA0MjQyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB0ZXN0MygpIHsKLSAgICBpbnRbNDJdIHg7Ci0gICAgdGhy
ZWFkIGludFs0Ml0qIGFycmF5UHRyID0gJng7Ci0gICAgaWYgKGFycmF5UHRyLT5sZW5ndGggIT0g
NDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHhbNDFdID0gNjY2OwotICAgIGlmICgo
KmFycmF5UHRyKVs0MV0gIT0gNjY2KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCgq
YXJyYXlQdHIpWzBdICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRocmVhZCBp
bnRbXSBhcnJheSA9IEB4OwotICAgIGlmIChhcnJheS5sZW5ndGggIT0gNDIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGFycmF5WzBdID0gMTMzNzsKLSAgICBpZiAoeFswXSAhPSAxMzM3
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCgqYXJyYXlQdHIpWzBdICE9IDEzMzcp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHRl
c3Q0KCkgewotICAgIHRocmVhZCBpbnQqIHB0ciA9IG51bGw7Ci0KLSAgICB0aHJlYWQgaW50W10g
YXJyYXkgPSBAcHRyOwotICAgIGlmIChhcnJheS5sZW5ndGggIT0gMCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGFycmF5WzBdICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChhcnJheVsxMDAwMDBdICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9p
ZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0
MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBpZiAoIXRlc3QxKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghdGVzdDIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCF0ZXN0MygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXRlc3Q0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3Np
emUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVy
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIu
bWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQz
MkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAw
OwotICAgIGJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDEsIDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0g
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAg
ICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZm
ZXIpOwotICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBh
c3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRz
QnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNp
Y0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVu
KGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigp
IHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAg
IH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNU
ZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTg1NTk2MjM1YzJhNDE4YzE0ZTI3NjBjYWY5
ZjcwMjExY2Y5M2Q4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIGJ1aWx0aW5NYXRyaWNl
cyAKLVBBU1MgbWF0cml4TXVsdGlwbGljYXRpb24gCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbWF0cmljZXMtc3BlYy10ZXN0cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNmYyYmQ5OTY5YmFjODAxMzBjMGVkYWEzNmJmOWM4ODk0MzA5MGFhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08
bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExT
TCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5l
c3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuYnVp
bHRpbk1hdHJpY2VzID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBmbG9hdCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDJ4MiBhOwotICAgICAg
ICAgICAgYVswXVswXSA9IDE7Ci0gICAgICAgICAgICBhWzBdWzFdID0gMjsKLSAgICAgICAgICAg
IGFbMV1bMF0gPSAzOwotICAgICAgICAgICAgYVsxXVsxXSA9IDQ7Ci0gICAgICAgICAgICByZXR1
cm4gYVswXVswXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28yKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZmxvYXQyeDMgYTsKLSAgICAgICAgICAgIGFbMF1bMF0gPSAxOwotICAgICAg
ICAgICAgYVswXVsxXSA9IDI7Ci0gICAgICAgICAgICBhWzBdWzJdID0gMzsKLSAgICAgICAgICAg
IGFbMV1bMF0gPSA0OwotICAgICAgICAgICAgYVsxXVsxXSA9IDU7Ci0gICAgICAgICAgICBhWzFd
WzJdID0gNjsKLSAgICAgICAgICAgIHJldHVybiBhWzFdWzJdOwotICAgICAgICB9Ci0gICAgICAg
IGZsb2F0IGZvbzMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDJ4MiBhOwotICAgICAg
ICAgICAgcmV0dXJuIGFbMF1bMF07Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb280KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZmxvYXQyeDIgYTsKLSAgICAgICAgICAgIGFbMF1bMF0gPSAx
OwotICAgICAgICAgICAgYVswXVsxXSA9IDI7Ci0gICAgICAgICAgICBhWzFdWzBdID0gMzsKLSAg
ICAgICAgICAgIGFbMV1bMV0gPSA0OwotICAgICAgICAgICAgZmxvYXQyeDIgYjsKLSAgICAgICAg
ICAgIGJbMF1bMF0gPSA1OwotICAgICAgICAgICAgYlswXVsxXSA9IDY7Ci0gICAgICAgICAgICBi
WzFdWzBdID0gNzsKLSAgICAgICAgICAgIGJbMV1bMV0gPSA4OwotICAgICAgICAgICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1aW50IGogPSAw
OyBqIDwgMjsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFbaV1bal0gKz0gNDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYSA9PSBiOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vNSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0MngyIGE7Ci0gICAgICAgICAgICBhWzBdID0gZmxvYXQyKDEsIDIpOwotICAgICAgICAgICAg
YVsxXSA9IGZsb2F0MigzLCA0KTsKLSAgICAgICAgICAgIGZsb2F0MngyIGI7Ci0gICAgICAgICAg
ICBiWzBdWzBdID0gMTsKLSAgICAgICAgICAgIGJbMF1bMV0gPSAyOwotICAgICAgICAgICAgYlsx
XVswXSA9IDM7Ci0gICAgICAgICAgICBiWzFdWzFdID0gNDsKLSAgICAgICAgICAgIHJldHVybiBh
ID09IGI7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb282KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZmxvYXQyeDIgYTsKLSAgICAgICAgICAgIGFbMF1bMF0gPSAxOwotICAgICAgICAgICAg
YVswXVsxXSA9IDI7Ci0gICAgICAgICAgICBhWzFdWzBdID0gMzsKLSAgICAgICAgICAgIGFbMV1b
MV0gPSA0OwotICAgICAgICAgICAgZmxvYXQyeDIgYjsKLSAgICAgICAgICAgIGJbMF1bMF0gPSA1
OwotICAgICAgICAgICAgYlswXVsxXSA9IDEwOwotICAgICAgICAgICAgYlsxXVswXSA9IDE4Owot
ICAgICAgICAgICAgYlsxXVsxXSA9IDI0OwotICAgICAgICAgICAgYVswXSAqPSA1OwotICAgICAg
ICAgICAgYVsxXSAqPSA2OwotICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgfQot
ICAgICAgICBmbG9hdCBmb283KCkKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQyeDMgYSA9
IGZsb2F0MngzKGZsb2F0MygzLCA0LCA1KSwgZmxvYXQzKDYsIDcsIDgpKTsKLSAgICAgICAgICAg
IHJldHVybiBhWzBdWzJdOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDEpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbXSksIDYp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzMiLCBbXSksIDApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihw
cm9ncmFtLCAgImZvbzQiLCBbXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbzUiLCBbXSksIHRydWUpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbzYiLCBbXSksIHRydWUp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzciLCBbXSksIDUpOwotfTsKLQotd2hsc2xUZXN0cy5tYXRyaXhNdWx0aXBsaWNhdGlvbiA9IGFz
eW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgZmxvYXQyeDQgbXVsdGlw
bHkoZmxvYXQyeDMgeCwgZmxvYXQzeDQgeSkgewotICAgICAgICAgICAgLy8gQ29waWVkIGFuZCBw
YXN0ZWQgZnJvbSB0aGUgc3RhbmRhcmQgbGlicmFyeQotICAgICAgICAgICAgZmxvYXQyeDQgcmVz
dWx0OwotICAgICAgICAgICAgcmVzdWx0WzBdWzBdID0gMDsKLSAgICAgICAgICAgIHJlc3VsdFsw
XVswXSArPSB4WzBdWzBdICogeVswXVswXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVswXSArPSB4
WzBdWzFdICogeVsxXVswXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVswXSArPSB4WzBdWzJdICog
eVsyXVswXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVsxXSA9IDA7Ci0gICAgICAgICAgICByZXN1
bHRbMF1bMV0gKz0geFswXVswXSAqIHlbMF1bMV07Ci0gICAgICAgICAgICByZXN1bHRbMF1bMV0g
Kz0geFswXVsxXSAqIHlbMV1bMV07Ci0gICAgICAgICAgICByZXN1bHRbMF1bMV0gKz0geFswXVsy
XSAqIHlbMl1bMV07Ci0gICAgICAgICAgICByZXN1bHRbMF1bMl0gPSAwOwotICAgICAgICAgICAg
cmVzdWx0WzBdWzJdICs9IHhbMF1bMF0gKiB5WzBdWzJdOwotICAgICAgICAgICAgcmVzdWx0WzBd
WzJdICs9IHhbMF1bMV0gKiB5WzFdWzJdOwotICAgICAgICAgICAgcmVzdWx0WzBdWzJdICs9IHhb
MF1bMl0gKiB5WzJdWzJdOwotICAgICAgICAgICAgcmVzdWx0WzBdWzNdID0gMDsKLSAgICAgICAg
ICAgIHJlc3VsdFswXVszXSArPSB4WzBdWzBdICogeVswXVszXTsKLSAgICAgICAgICAgIHJlc3Vs
dFswXVszXSArPSB4WzBdWzFdICogeVsxXVszXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVszXSAr
PSB4WzBdWzJdICogeVsyXVszXTsKLSAgICAgICAgICAgIHJlc3VsdFsxXVswXSA9IDA7Ci0gICAg
ICAgICAgICByZXN1bHRbMV1bMF0gKz0geFsxXVswXSAqIHlbMF1bMF07Ci0gICAgICAgICAgICBy
ZXN1bHRbMV1bMF0gKz0geFsxXVsxXSAqIHlbMV1bMF07Ci0gICAgICAgICAgICByZXN1bHRbMV1b
MF0gKz0geFsxXVsyXSAqIHlbMl1bMF07Ci0gICAgICAgICAgICByZXN1bHRbMV1bMV0gPSAwOwot
ICAgICAgICAgICAgcmVzdWx0WzFdWzFdICs9IHhbMV1bMF0gKiB5WzBdWzFdOwotICAgICAgICAg
ICAgcmVzdWx0WzFdWzFdICs9IHhbMV1bMV0gKiB5WzFdWzFdOwotICAgICAgICAgICAgcmVzdWx0
WzFdWzFdICs9IHhbMV1bMl0gKiB5WzJdWzFdOwotICAgICAgICAgICAgcmVzdWx0WzFdWzJdID0g
MDsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsyXSArPSB4WzFdWzBdICogeVswXVsyXTsKLSAgICAg
ICAgICAgIHJlc3VsdFsxXVsyXSArPSB4WzFdWzFdICogeVsxXVsyXTsKLSAgICAgICAgICAgIHJl
c3VsdFsxXVsyXSArPSB4WzFdWzJdICogeVsyXVsyXTsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsz
XSA9IDA7Ci0gICAgICAgICAgICByZXN1bHRbMV1bM10gKz0geFsxXVswXSAqIHlbMF1bM107Ci0g
ICAgICAgICAgICByZXN1bHRbMV1bM10gKz0geFsxXVsxXSAqIHlbMV1bM107Ci0gICAgICAgICAg
ICByZXN1bHRbMV1bM10gKz0geFsxXVsyXSAqIHlbMl1bM107Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0MngzIG1hdHJpeDEoKSB7Ci0gICAgICAg
ICAgICBmbG9hdDJ4MyB4OwotICAgICAgICAgICAgeFswXVswXSA9IDI7Ci0gICAgICAgICAgICB4
WzBdWzFdID0gMzsKLSAgICAgICAgICAgIHhbMF1bMl0gPSA1OwotICAgICAgICAgICAgeFsxXVsw
XSA9IDc7Ci0gICAgICAgICAgICB4WzFdWzFdID0gMTE7Ci0gICAgICAgICAgICB4WzFdWzJdID0g
MTM7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgICAgICBmbG9hdDN4NCBt
YXRyaXgyKCkgewotICAgICAgICAgICAgZmxvYXQzeDQgeTsKLSAgICAgICAgICAgIHlbMF1bMF0g
PSAxNzsKLSAgICAgICAgICAgIHlbMF1bMV0gPSAxOTsKLSAgICAgICAgICAgIHlbMF1bMl0gPSAy
MzsKLSAgICAgICAgICAgIHlbMF1bM10gPSAyOTsKLSAgICAgICAgICAgIHlbMV1bMF0gPSAzMTsK
LSAgICAgICAgICAgIHlbMV1bMV0gPSAzNzsKLSAgICAgICAgICAgIHlbMV1bMl0gPSA0MTsKLSAg
ICAgICAgICAgIHlbMV1bM10gPSA0MzsKLSAgICAgICAgICAgIHlbMl1bMF0gPSA0NzsKLSAgICAg
ICAgICAgIHlbMl1bMV0gPSA1MzsKLSAgICAgICAgICAgIHlbMl1bMl0gPSA1OTsKLSAgICAgICAg
ICAgIHlbMl1bM10gPSA2MTsKLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0IGZvbzAwKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEo
KSwgbWF0cml4MigpKVswXVswXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28wMSgpIHsK
LSAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMF1bMV07
Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMDIoKSB7Ci0gICAgICAgICAgICByZXR1cm4g
bXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzBdWzJdOwotICAgICAgICB9Ci0gICAgICAg
IGZsb2F0IGZvbzAzKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwg
bWF0cml4MigpKVswXVszXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMCgpIHsKLSAg
ICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bMF07Ci0g
ICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMTEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbXVs
dGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzFdOwotICAgICAgICB9Ci0gICAgICAgIGZs
b2F0IGZvbzEyKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0
cml4MigpKVsxXVsyXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMygpIHsKLSAgICAg
ICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bM107Ci0gICAg
ICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzAwIiwgW10pLCAxNyAqIDIgKyAzMSAqIDMgKyA0NyAqIDUpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzAxIiwgW10p
LCAxOSAqIDIgKyAzNyAqIDMgKyA1MyAqIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzAyIiwgW10pLCAyMyAqIDIgKyA0MSAqIDMgKyA1
OSAqIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbzAzIiwgW10pLCAyOSAqIDIgKyA0MyAqIDMgKyA2MSAqIDUpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEwIiwgW10pLCAxNyAq
IDcgKyAzMSAqIDExICsgNDcgKiAxMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxv
YXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTEiLCBbXSksIDE5ICogNyArIDM3ICogMTEgKyA1MyAq
IDEzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28xMiIsIFtdKSwgMjMgKiA3ICsgNDEgKiAxMSArIDU5ICogMTMpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEzIiwgW10pLCAyOSAq
IDcgKyA0MyAqIDExICsgNjEgKiAxMyk7Ci19OwotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwv
c2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1h
dHJpeC0yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtMi1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZm
NTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC0yLWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYXRyaXgtMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDU2Zjk1
MzNkZDVjN2ZlOTI3NjNkOGMxZGUxODJlYjM0ZWQ1N2M0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgt
Mi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotYm9v
bCBhbGxFcXVhbChmbG9hdDR4NCBtYXQsIGZsb2F0IHZhbHVlKQotewotICAgIGZvciAodWludCBp
ID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkgewotICAgICAgICBmb3IgKHVpbnQgaiA9IDA7IGogPCA0
OyBqID0gaiArIDEpIHsKLSAgICAgICAgICAgIGlmIChtYXRbaV1bal0gIT0gdmFsdWUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIGZpbGwodGhyZWFkIGZsb2F0NHg0KiBtYXQsIGZsb2F0IHZhbHVlKQot
ewotICAgIGZsb2F0NHg0IHJlc3VsdDsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0g
aSArIDEpIHsKLSAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZsb2F0NCh2YWx1ZSwgdmFsdWUsIHZh
bHVlLCB2YWx1ZSk7Ci0gICAgfQotICAgICptYXQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgZmlsbCh0aHJlYWQgZmxvYXQ0KiB2ZWMsIGZsb2F0IHZhbHVlKQotewotICAg
IGZsb2F0NCByZXN1bHQ7Ci0gICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7
Ci0gICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlOwotICAgIH0KLSAgICAqdmVjID0gcmVzdWx0Owot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGFsbEVxdWFsKGZsb2F0NCB2ZWMsIGZsb2F0IHZh
bHVlKQotewotICAgIGZvciAodWludCBpID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkgewotICAgICAg
ICBpZiAodmVjW2ldICE9IHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZv
aWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZs
b2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDR4NCBtYXQ7
Ci0gICAgZmlsbCgmbWF0LCAxKTsKLSAgICBpZiAoIWFsbEVxdWFsKG1hdCwgMSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0NCB2ZWM7Ci0gICAgZmlsbCgmdmVjLCAxKTsKLSAgICBpZiAo
IWFsbEVxdWFsKHZlYywgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0NCB2ZWMyID0g
bXVsKG1hdCwgdmVjKTsKLSAgICBpZiAoIWFsbEVxdWFsKHZlYzIsIDQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmbG9hdDR4NCBtYXQyID0gbXVsKG1hdCwgbWF0KTsKLSAgICBpZiAoIWFsbEVx
dWFsKG1hdDIsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXQyID0gbXVsKG1hdDIsIG1h
dDIpOwotICAgIGlmICghYWxsRXF1YWwobWF0MiwgNjQpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAy
LjA7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4OwotCi0gICAg
Y29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBi
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsK
LSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsx
XSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKLSAgICBidWZmZXJGbG9hdDMy
QXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7Ci0gICAgYnVmZmVy
RmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OwotICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBj
b25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0g
e2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29k
ZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7
Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21w
dXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlw
ZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3Vw
KTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goNCwgMSwgMSk7Ci0gICAgY29tcHV0
ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFu
ZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5k
QnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRz
QnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9h
dDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQK
LSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PSA2Ci0gICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRd
ID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9PSA2Ci0gICAgICAgICYm
IHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNwotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFy
cmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAg
dGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNo
SlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwot
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRl
c3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1leHBlY3RlZC50eHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5b3V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgy
ZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5b3V0LWV4cGVjdGVkLnR4dAorKysg
L2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlYjA4MTQ4NWM3YmQ1YjAyYzViNzM0ZTQwYjIyMTcyY2NkMjk2MTdmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29u
c3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQg
Y29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXQ0eDRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZs
b2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDR4NCByZXN1
bHQ7Ci0gICAgcmVzdWx0WzBdID0gZmxvYXQ0KDEsIDIsIDMsIDQpOwotICAgIHJlc3VsdFsxXSA9
IGZsb2F0NCg1LCA2LCA3LCA4KTsKLSAgICByZXN1bHRbMl0gPSBmbG9hdDQoOSwgMTAsIDExLCAx
Mik7Ci0gICAgcmVzdWx0WzNdID0gZmxvYXQ0KDEzLCAxNCwgMTUsIDE2KTsKLQotICAgIGZsb2F0
NHg0IG1hdCA9IGJ1ZmZlclswXTsKLQotICAgIGlmIChtYXRbMF1bMF0gPT0gMAotICAgICAgICAm
JiBtYXRbMF1bMV0gPT0gMQotICAgICAgICAmJiBtYXRbMF1bMl0gPT0gMgotICAgICAgICAmJiBt
YXRbMF1bM10gPT0gMwotCi0gICAgICAgICYmIG1hdFsxXVswXSA9PSA0Ci0gICAgICAgICYmIG1h
dFsxXVsxXSA9PSA1Ci0gICAgICAgICYmIG1hdFsxXVsyXSA9PSA2Ci0gICAgICAgICYmIG1hdFsx
XVszXSA9PSA3Ci0KLSAgICAgICAgJiYgbWF0WzJdWzBdID09IDgKLSAgICAgICAgJiYgbWF0WzJd
WzFdID09IDkKLSAgICAgICAgJiYgbWF0WzJdWzJdID09IDEwCi0gICAgICAgICYmIG1hdFsyXVsz
XSA9PSAxMQotCi0gICAgICAgICYmIG1hdFszXVswXSA9PSAxMgotICAgICAgICAmJiBtYXRbM11b
MV0gPT0gMTMKLSAgICAgICAgJiYgbWF0WzNdWzJdID09IDE0Ci0gICAgICAgICYmIG1hdFszXVsz
XSA9PSAxNSkgewotICAgICAgICBidWZmZXJbMF0gPSByZXN1bHQ7Ci0gICAgfQotfQotYDsKLQot
YXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0g
ZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBl
OiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5k
R3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQ
aXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVM
YXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRl
UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0g
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTY7Ci0KLSAgICBjb25zdCBidWZmZXJE
ZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVC
dWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIg
PSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVswXSA9IDA7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gNDsKLSAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbMl0gPSA4OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDEy
OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDE7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5
WzVdID0gNTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA5OwotICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVs3XSA9IDEzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDI7Ci0gICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzldID0gNjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMTA7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVsxMl0gPSAzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSA3OwotICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVsxNF0gPSAxMTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTU7Ci0g
ICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRz
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07
Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVm
ZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJp
bmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3Qg
YmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVy
KCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwg
MCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlz
cGF0Y2goMiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRz
QXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNv
bnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1
ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT09IDEKLSAgICAgICAgJiYg
cmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PT0gNQotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFy
cmF5WzJdID09PSA5Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT09IDEzCi0K
LSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PT0gMgotICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzVdID09PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlb
Nl0gPT09IDEwCi0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT09IDE0Ci0KLSAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs4XSA9PT0gMwotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzldID09PSA3Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTBd
ID09PSAxMQotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzExXSA9PT0gMTUKLQotICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzEyXSA9PT0gNAotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzEzXSA9PT0gOAotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzE0
XSA9PT0gMTIKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxNV0gPT09IDE2KQotICAg
ICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwot
ICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChk
ZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICAgICAgZmluaXNoSlNU
ZXN0KCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0ZXN0UGFzc2VkKCIiKTsKLSAg
ICBmaW5pc2hKU1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4Lmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbWF0cml4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRj
M2I2NWMyODZiM2Q1MTE5MDdjOGY5NzdjNmI3NzI4ZGUyMTUxZDcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1h
dHJpeC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1s
PgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAot
Ym9vbCBhbGxFcXVhbChmbG9hdDJ4MyBtYXQsIGZsb2F0IHZhbHVlKQotewotICAgIGZvciAodWlu
dCBpID0gMDsgaSA8IDI7IGkgPSBpICsgMSkgewotICAgICAgICBmb3IgKHVpbnQgaiA9IDA7IGog
PCAzOyBqID0gaiArIDEpIHsKLSAgICAgICAgICAgIGlmIChtYXRbaV1bal0gIT0gdmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21wdXRl
U2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVh
ZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIGZsb2F0MngzIGZvbzsKLSAgICBpZiAo
IWFsbEVxdWFsKGZvbywgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvbyA9IGZvbyArIGZs
b2F0MngzKGZsb2F0MygxLjAsIDEuMCwgMS4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsKLSAg
ICBpZiAoIWFsbEVxdWFsKGZvbywgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvbyA9IGZv
byAqIGZsb2F0MngzKGZsb2F0Myg4LjUsIDguNSwgOC41KSwgZmxvYXQzKDguNSwgOC41LCA4LjUp
KTsKLSAgICBpZiAoIWFsbEVxdWFsKGZvbywgOC41KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9vID0gZm9vIC0gZmxvYXQyeDMoZmxvYXQzKDcuNSwgNy41LCA3LjUpLCBmbG9hdDMoNy41LCA3
LjUsIDcuNSkpOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCAxKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZm9vID0gZm9vICsgZmxvYXQyeDMoZmxvYXQzKDEuMCwgMS4wLCAxLjApLCBmbG9hdDMo
MS4wLCAxLjAsIDEuMCkpOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCAyKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9vID0gZm9vICsgZm9vOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCA0KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9vID0gZm9vICsgZm9vOwotICAgIGlmICghYWxsRXF1
YWwoZm9vLCA4KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQzIGZvdXJ0eVR3bzsKLSAg
ICBmb3VydHlUd28ueCA9IDQyOwotICAgIGZvdXJ0eVR3by55ID0gNDI7Ci0gICAgZm91cnR5VHdv
LnogPSA0MjsKLQotICAgIGZvb1swXSA9IGZvdXJ0eVR3bzsKLSAgICBmb29bMV0gPSBmb3VydHlU
d287Ci0gICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9vWzEzMzddID0gZm91cnR5VHdvOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZvb1sxMDAwMDAwXSA9IGZvdXJ0eVR3bzsKLSAgICBpZiAoIWFs
bEVxdWFsKGZvbywgNDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3VydHlUd29bMTMzN10g
PSA1MDsKLSAgICBmb29bMV0gPSBmb3VydHlUd287Ci0gICAgaWYgKCFhbGxFcXVhbChmb28sIDQy
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm91cnR5VHdvWzEwMDAwMDBdID0gNTA7Ci0gICAg
Zm9vWzFdID0gZm91cnR5VHdvOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0MyBzaG91bGRCZVplcm8gPSBmb29bMTAwMDAwXTsKLSAgICBp
ZiAoc2hvdWxkQmVaZXJvLnggIT0gMCB8fCBzaG91bGRCZVplcm8ueSAhPSAwIHx8IHNob3VsZEJl
WmVyby56ICE9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmb3VydHlUd29bMTAwMDAw
MDBdICE9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngp
XSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsKLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAg
IGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ig
PSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2Ut
YnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAg
ICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5U
UkFOU0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVm
ZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZm
ZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsw
XSA9IDE7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKLSAgICBidWZmZXJGbG9hdDMy
QXJyYXlbMl0gPSAzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7Ci0gICAgYnVmZmVy
RmxvYXQzMkFycmF5WzRdID0gNTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OwotICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0g
ODsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlw
dG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJl
c3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBz
aXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNl
OiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91
dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBj
b25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVm
ZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0Vu
Y29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBh
c3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NF
bmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5kaXNwYXRjaCg0LCAxLCAxKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwot
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJl
c3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0g
ICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0Fy
cmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PSAyCi0gICAgICAg
ICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAotICAgICAgICAmJiByZXN1bHRzRmxvYXQz
MkFycmF5WzJdID09IDYKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSA9PSA4Ci0g
ICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gPT0gNQotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzVdID09IDYKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9
PSA3Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT0gOCkKLSAgICAgICAgdGVz
dFBhc3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1
bHRzQnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRC
YXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50
aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwot
ICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNo
SlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUtZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtZG90LWV4cHJlc3Npb24t
cnZhbHVlLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNh
MjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3Rl
ZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2Ny
aXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwot
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLW5lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZkNWYxOGMzNGQyMWZhYTUxY2ZhYTI3N2NhMWYwYzE2OGM3OGI0YTUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDE0NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+
Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLQotc3RydWN0IEJhciB7
Ci0gICAgZmxvYXQgc2hhZGU7Ci19Ci1zdHJ1Y3QgRm9vIHsKLSAgICBCYXIgYmFyOwotfQotCi1z
dHJ1Y3QgV3JhcHBlciB7Ci0gICAgRm9vIGZvbzsKLX0KLQotc3RydWN0IFZlcnRleE91dCB7Ci0g
ICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCk7Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBX
cmFwcGVyIHdyYXBwZXI7Ci0gICAgd3JhcHBlci5mb28uYmFyLnNoYWRlID0gc2hhZGU7Ci0gICAg
VmVydGV4T3V0IHJlc3VsdDsKLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBy
ZXN1bHQuc2hhZGUgPSB3cmFwcGVyLmZvby5iYXIuc2hhZGU7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwg
c2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3Qg
ZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdt
ZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3Ry
aXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1
bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBj
b2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4
dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNv
bG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQot
ICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDog
ImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUw
LCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRl
U2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmls
aXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3Jp
cHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExh
eW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVy
MEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAg
Y29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4
QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0g
LTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsK
LQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEx
XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1
XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07
Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9
IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJl
c291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZl
cjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcg
PSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRH
cm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmlu
ZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFz
LmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2
aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4
dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0
cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91
dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0g
ICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsg
Ly8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29u
c3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJl
c29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xl
YXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7
Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVw
dGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21t
YW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5k
ZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVu
ZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNo
KCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1p
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1n
ZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNl
KS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVP
bkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5l
c3RlZC1sb29wLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVk
LWxvb3AtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmODY5
YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVk
LWxvb3AtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd0JsYWNrU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzRiMTE4MTgyMzRmMTc3MTc4YzAzMDJjNzE1ZTg1YjBhOWUy
MzA2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDE3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNj
cmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZs
b2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24g
OiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4
T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRydWU7Ci0gICAgZm9yICh1aW50IGkgPSAwOyBp
IDwgMTA7IGkgPSBpICsgMSkgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
aWYgKGIpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHNoYWRlID0gMS4wOwotICAgICAgICB9Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAg
aWYgKGIpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSB3aGlsZSAoKHNoYWRlID0gMS4wLCBmYWxzZSkpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAg
ICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlICsgMS4wLCBmYWxzZSkpOwotCi0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlIC0gMS4wLCBmYWxz
ZSkpOwotCi0gICAgICAgIHdoaWxlICgoc2hhZGUgPSBzaGFkZSArIDEuMCwgdHJ1ZSkpIHsKLSAg
ICAgICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgLSAxLjAsIHRydWUp
KSB7Ci0gICAgICAgICAgICBpZiAoYikgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
MCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFk
ZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwg
b2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBm
b3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0
cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0
dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0g
ICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNv
bnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwg
dmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5k
R3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0g
PSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOwotCi0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxOV0gPSAwLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsK
LSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owot
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0g
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd0JsYWNr
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3Nj
cmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1udWxsLWFyZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVs
bC1hcmctZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmEwY2Yz
OWU4YTBmZWNjOGYzMzRhYzE4NjNhMWUzZGY4Y2E5ZmRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWFy
Zy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBwYXNz
TnVsbFRvUHRyTW9ub21vcnBoaWMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1udWxsLWFyZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjJlZWFiMTIwZmVkYjQyYzA3MWY4
NzlhNGU3YTQwNzYwNTVmYTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwzMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hh
cnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxl
PlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVz
cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5wYXNz
TnVsbFRvUHRyTW9ub21vcnBoaWMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0g
YAotICAgICAgICBpbnQgZm9vKHRocmVhZCBpbnQqIHB0cikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICpwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJhcigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDAp
OwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgotCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1hcnJheS1yZWYuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWFycmF5LXJlZi5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwZDljOTQ2OTRjOGFmMTBkOWUwZmY5YjZjNGU4ZWFiNWE5ZmYzNTEy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1udWxsLWFycmF5LXJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
NjQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+
Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IGxvb3Bz
LjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmRlcmVmZXJlbmNlRGVmYXVs
dE51bGxBcnJheVJlZiA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAg
ICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJlYWQgaW50W10gcDsKLSAg
ICAgICAgICAgIHJldHVybiBwWzBdOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKLX0KLQot
d2hsc2xUZXN0cy5kZWZhdWx0SW5pdGlhbGl6ZWROdWxsQXJyYXlSZWZJbnRMaXRlcmFsID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gbnVsbDsKLSAgICAgICAgICAgIHJl
dHVybiBwWzBdOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKLX0KLQotd2hsc2xUZXN0cy5w
YXNzTnVsbFRvUHRyTW9ub21vcnBoaWNBcnJheVJlZiA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28odGhyZWFkIGludFtdIHB0cikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIHB0clswdV07Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJh
cigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7Ci0gICAgICAgIH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJiYXIiLCBbXSksIDApOwotfQotCi13aGxzbFRlc3RzLmxvYWROdWxsID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgc2lu
ayh0aHJlYWQgaW50KiB4KSB7IH0KLSAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBzaW5rKCpudWxs
KTsgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVy
ZWZlcmVuY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVy
ZWZlcmVuY2UtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgy
ZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxs
LWRlcmVmZXJlbmNlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAot
UEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMwYTdlYzU4Mzg2ZDNiMzViYjYyN2EyMGZlMTNk
OGFkNjM4MmQyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJv
ZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdHlwZWRlZiBGb28gPSB0aHJl
YWQgaW50KjsKLUZvbyBnZXROdWxsUHRyKCkKLXsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotc3Ry
dWN0IFhZWiB7Ci0gICAgZmxvYXQgeDsKLSAgICBmbG9hdCB5OwotICAgIGZsb2F0IHo7Ci19Ci0K
LVtudW10aHJlYWRzKDIsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNl
IGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7Ci0gICAgRm9vIHB0ciA9IG51bGw7Ci0gICAgKnB0ciA9IDQyOwotICAg
ICpnZXROdWxsUHRyKCkgPSA0MjsKLSAgICBpZiAoKnB0ciA9PSAwKSB7Ci0gICAgICAgIGlmIChw
dHIgPT0gZ2V0TnVsbFB0cigpKSB7Ci0gICAgICAgICAgICBpZiAoKmdldE51bGxQdHIoKSA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgdGhyZWFkIFhZWiogeHl6UHRyID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICBYWVogeHl6OwotICAgICAgICAgICAgICAgIHh5ei54ID0gMTsKLSAgICAgICAgICAg
ICAgICB4eXoueSA9IDE7Ci0gICAgICAgICAgICAgICAgeHl6LnogPSAxOwotICAgICAgICAgICAg
ICAgIGlmICh4eXoueiA9PSAxLjAgJiYgeHl6LnkgPT0gMS4wICYmIHh5ei56ID09IDEuMCkgewot
ICAgICAgICAgICAgICAgICAgICAqeHl6UHRyID0geHl6OwotICAgICAgICAgICAgICAgICAgICB4
eXogPSAqeHl6UHRyOwotICAgICAgICAgICAgICAgICAgICBpZiAoeHl6LnogPT0gMC4wICYmIHh5
ei55ID09IDAuMCAmJiB4eXoueiA9PSAwLjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgmKmdldE51bGxQdHIoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCYqKCYqZ2V0TnVsbFB0cigpKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElE
LngpXSAqIDIuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25z
dCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21w
dXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZl
ciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19Owot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29u
c3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA4OwotCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNG
RVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRl
c2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1h
cFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQz
MkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5
WzJdID0gMzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVs0XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbNl0gPSA3OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0g
ICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRz
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07
Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVm
ZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJp
bmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3Qg
YmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVy
KCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwg
MCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlz
cGF0Y2goMiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRz
QXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNv
bnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1
ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAmJiBy
ZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVsyXSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAgICAg
ICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0
MzJBcnJheVs1XSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNwot
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQYXNz
ZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1
ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNE
ZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihm
dW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9
KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVz
dCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtb29iLWFjY2Vzcy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICsw
LDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09N
UExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3Mu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjI2Mjk0NmFjODNkZTA1MDk5ZDBlNDJkZmE4Y2U1MDgz
MDM1YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDk1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0
PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMiwgMSwgMSldCi1jb21wdXRl
IHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCks
IGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBidWZmZXJbMTMz
N10gPSAwLjA7Ci0gICAgYnVmZmVyWzQyNDI0MjQyXSA9IDAuMDsKLSAgICBpZiAoYnVmZmVyWzEw
MDAwMF0gPT0gMC4wKQotICAgICAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJb
dWludCh0aHJlYWRJRC54KV0gKiAyLjA7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChk
ZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCBjb21w
dXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hh
ZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdz
OiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07
Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91
dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgY29t
cHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA4OwotCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JD
fTsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0
b3IpOwotICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKLSAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVs0XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBidWZmZXJGbG9h
dDMyQXJyYXlbNl0gPSA3OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0gICAgYnVm
ZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVS
X0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRzQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0KLSAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmlu
ZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91
cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8v
IHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVz
dWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29t
bWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRC
aW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2go
MiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBj
b21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1
ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRzQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJl
c3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7
Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzFdID09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9
PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAgICAgICAmJiBy
ZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVs1XSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNwotICAgICAg
ICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIp
OwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51
bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwot
fSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtb3BlcmF0b3Itb3ZlcmxvYWQtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwNDBmM2QxN2U2YmIxYjk4MDAwMTFhODNmYTQ5MDFjMjBlY2FlMzUw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQKKysrIC9kZXYv
bnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBvcGVyYXRvcldpdGhvdXRVbmluZmVycmFibGVU
eXBlVmFyaWFibGUgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vcGVy
YXRvci1vdmVybG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9yLW92
ZXJsb2FkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZmNlYzY4MzNkZjJi
ZWEwMzNmMGNkZjU3YWRlZjFjM2Y3ZmE2YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9yLW92ZXJs
b2FkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgotPHRpdGxlPk9wZXJhdG9yKyBvdmVybG9hZC48L3RpdGxlPgotPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMg
PSB7fTsKLQotd2hsc2xUZXN0cy5vcGVyYXRvcldpdGhvdXRVbmluZmVycmFibGVUeXBlVmFyaWFi
bGUgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBG
b28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgIH0KLSAgICAgICAgRm9vIG9wZXJhdG9y
KyhGb28gYSwgRm9vIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyByZXN1bHQ7Ci0gICAg
ICAgICAgICByZXN1bHQueCA9IGEueCArIGIueDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZv
byBhOwotICAgICAgICAgICAgYS54ID0gNjQ1OwotICAgICAgICAgICAgRm9vIGI7Ci0gICAgICAg
ICAgICBiLnggPSAtMzU7Ci0gICAgICAgICAgICByZXR1cm4gKGEgKyBiKS54OwotICAgICAgICB9
Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCA2NDUgLSAzNSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9z
Y3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3Zl
cmxvYWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLWV4
cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRiNjEwNmIwODY0ZTU2
ZDYzYTNhNTcwNDFmNDZmZmRiNjEwZjQ5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcmxvYWQtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0KLVBBU1MgaW50T3ZlcmxvYWRS
ZXNvbHV0aW9uIAotUEFTUyBpbnRPdmVybG9hZFJlc29sdXRpb25SZXZlcnNlT3JkZXIgCi1QQVNT
IG5vdEVxdWFsc092ZXJsb2FkIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtb3ZlcmxvYWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVybG9hZC5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU0NzJiYjJhNGRlMTY3ZTkxN2VhOGU2
OWRiMWUxMzkzZDZlY2IyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVybG9hZC5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5P
dmVybG9hZC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5pbnRPdmVybG9h
ZFJlc29sdXRpb24gPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBpbnQgZm9vKGludCkgeyByZXR1cm4gMTsgfQotICAgICAgICBpbnQgZm9vKHVpbnQpIHsgcmV0
dXJuIDI7IH0KLSAgICAgICAgaW50IGZvbyhmbG9hdCkgeyByZXR1cm4gMzsgfQotICAgICAgICBp
bnQgYmFyKCkgeyByZXR1cm4gZm9vKDQyKTsgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdKSwgMSk7Ci19Ci0KLXdobHNs
VGVzdHMuaW50T3ZlcmxvYWRSZXNvbHV0aW9uUmV2ZXJzZU9yZGVyID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhmbG9hdCkgeyByZXR1cm4gMzsg
fQotICAgICAgICBpbnQgZm9vKHVpbnQpIHsgcmV0dXJuIDI7IH0KLSAgICAgICAgaW50IGZvbyhp
bnQpIHsgcmV0dXJuIDE7IH0KLSAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7IH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJiYXIiLCBbXSksIDEpOwotfQotCi13aGxzbFRlc3RzLm5vdEVxdWFsc092ZXJsb2FkID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAg
IHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oRm9vLCBGb28pIHsg
cmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwot
PC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
b3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1vdmVycmlkZS1zdWJzY3JpcHQtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzODY0MDA5NWY3MzFlZjczYWFjZTllMzY4YWExMDYyYTYxZDBiYjc2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1vdmVycmlkZS1zdWJzY3JpcHQtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAg
LTEsNiArMCwwIEBACi0KLVBBU1Mgb3ZlcnJpZGVTdWJzY3JpcHRTdHJ1Y3QgCi1QQVNTIG92ZXJy
aWRlU3Vic2NyaXB0U3RydWN0QW5kRG9TdG9yZXMgCi1QQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3Ry
dWN0QW5kVXNlUG9pbnRlcnMgCi1QQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kVXNlUG9p
bnRlcnNJbmNvcnJlY3RseSAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW92ZXJyaWRlLXN1YnNjcmlwdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJy
aWRlLXN1YnNjcmlwdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWY3YWFj
NzVkYjQ4NDI4ZWUyYmIyMDI2N2Y1OGMyNGM5ZGI1NjNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVycmlk
ZS1zdWJzY3JpcHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qgb3ZlcnJpZGUgc3Vic2NyaXB0cy48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVj
dCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBG
b28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAgICAgfQot
ICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQgaW5k
ZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQotICAgICAgICAgICAg
ICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICZmb28tPnk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
ICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIGZvbzsK
LSAgICAgICAgICAgIGZvby54ID0gNDk4OwotICAgICAgICAgICAgZm9vLnkgPSAxOTsKLSAgICAg
ICAgICAgIHJldHVybiBmb29bMF0gKyBmb29bMV0gKiAzOwotICAgICAgICB9Ci0gICAgYDsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10p
LCA0OTggKyAxOSAqIDMpOwotfQotCi13aGxzbFRlc3RzLm92ZXJyaWRlU3Vic2NyaXB0U3RydWN0
QW5kRG9TdG9yZXMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgaW50IHk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZm9v
LCB1aW50IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAx
KQotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT55OwotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEZvbyBmb287Ci0gICAgICAgICAgICBmb29bMF0gPSA0OTg7Ci0gICAgICAgICAgICBmb29bMV0g
PSAxOTsKLSAgICAgICAgICAgIHJldHVybiBmb28ueCArIGZvby55OwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCA0OTggKyAxOSk7Ci19Ci0KLXdobHNsVGVzdHMub3ZlcnJpZGVTdWJzY3JpcHRTdHJ1
Y3RBbmRVc2VQb2ludGVycyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0g
ICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICBpbnQg
eTsKLSAgICAgICAgfQotICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9v
KiBmb28sIHVpbnQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAw
KQotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICAgICAgaWYgKGluZGV4
ID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPnk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKHRocmVhZCBGb28qIGZvbykKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICgqZm9vKVswXSArICgqZm9vKVsxXTsKLSAgICAg
ICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIGZvbzsK
LSAgICAgICAgICAgIGZvby54ID0gNDk4OwotICAgICAgICAgICAgZm9vLnkgPSAxOTsKLSAgICAg
ICAgICAgIHJldHVybiBiYXIoJmZvbyk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQ5OCArIDE5
KTsKLX0KLQotd2hsc2xUZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJz
SW5jb3JyZWN0bHkgPSBhc3luYyAoKSA9PgotewotICAgIGNoZWNrRmFpbCgKLSAgICAgICAgYAot
ICAgICAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0gICAgICAg
ICAgICAgICAgaW50IHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiBv
cGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQgaW5kZXgpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAmZm9vLT54OwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAxKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJmZvby0+eTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBiYXIodGhyZWFkIEZvbyogZm9vKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmb29bMF0gKyBmb29bMV07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBGb28gZm9vOwotICAgICAgICAgICAgICAgIGZvby54ID0gNDk4OwotICAgICAgICAgICAg
ICAgIGZvby55ID0gMTk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhcigmZm9vKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3Jp
cHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVz
LWVxdWFscy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVh
bHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmYwOWNjNjVm
NjIxNzE5OTVkNmRlNThmNjA4NTMyMjkyNjUzMWNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVzLWVxdWFs
cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotUEFTUyBwbHVz
RXF1YWxzIAotUEFTUyBwbHVzRXF1YWxzUmVzdWx0IAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1wbHVzLWVxdWFscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmY1ZWNi
NDE0NjI5NThiZDg3NTk5Y2NiODUyMThjODk1ZTFmMzk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVzLWVx
dWFscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IG92ZXJyaWRlIHN1YnNjcmlwdHMuPC90aXRsZT4KLTxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxz
bFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMucGx1c0VxdWFscyA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHggKz0gNDI7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAg
IGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOwotfQotCi13aGxzbFRlc3RzLnBsdXNFcXVh
bHNSZXN1bHQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBp
bnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geCArPSA0MjsKLSAg
ICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOwotfQotCi1ydW5UZXN0
cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtcG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmM1ZDhhYzU0ODI4YjBiYWQ4MDEwOTAzZTM1MWEz
ZGE3MjVlMDM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0
CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLVBBU1MgcG9pbnRlclRvUG9pbnRlciAK
LVBBU1MgcG9pbnRlclRvTWVtYmVyIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcG9pbnRlci1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
cG9pbnRlci1zcGVjLXRlc3RzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYy
YmIyOTdjODM4OTlkYzdmMjY2OTU1ZjFiMmRiY2Q2NjI5ZDhhNTkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBv
aW50ZXItc3BlYy10ZXN0cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCFE
T0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5l
c3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMucG9pbnRlclRvUG9pbnRl
ciA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28o
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQq
IHAgPSAmeDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQqKiBwcCA9ICZwOwotICAgICAgICAgICAg
aW50KnRocmVhZCp0aHJlYWQgcXEgPSBwcDsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSAwOwot
ICAgICAgICAgICAgeCA9IDQyOwotICAgICAgICAgICAgKnAgPSA3NjsKLSAgICAgICAgICAgIHJl
c3VsdCArPSB4OwotICAgICAgICAgICAgKipwcCA9IDM5OwotICAgICAgICAgICAgcmVzdWx0ICs9
IHg7Ci0gICAgICAgICAgICAqKnFxID0gODM7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICBgOzsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3NiArIDM5
ICsgODMpOwotfQotCi13aGxzbFRlc3RzLnBvaW50ZXJUb01lbWJlciA9IGFzeW5jICgpID0+Ci17
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbygp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQzIHg7Ci0gICAgICAgICAgICAg
ICAgdGhyZWFkIGZsb2F0KiB5ID0gJnhbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwot
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbygp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQzeDMgeDsKLSAgICAgICAgICAg
ICAgICB0aHJlYWQgZmxvYXQzKiB5ID0gJnhbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGAp
OwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgtcHJlZml4LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb3N0Zml4LXByZWZpeC1leHBlY3RlZC50eHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWJkZjEwZjYxYjRlODNlMWEyNjRjYjdj
OGE2ZjZhNTk0MWM0OWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgtcHJlZml4LWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLQotUEFTUyBwcmVmaXhQbHVzUGx1cyAK
LVBBU1MgcHJlZml4UGx1c1BsdXNSZXN1bHQgCi1QQVNTIHBvc3RmaXhQbHVzUGx1cyAKLVBBU1Mg
cG9zdGZpeFBsdXNQbHVzUmVzdWx0IAotUEFTUyBwcmVmaXhNaW51c01pbnVzIAotUEFTUyBwcmVm
aXhNaW51c01pbnVzUmVzdWx0IAotUEFTUyBwb3N0Zml4TWludXNNaW51cyAKLVBBU1MgcG9zdGZp
eE1pbnVzTWludXNSZXN1bHQgCi1QQVNTIHBsdXNFcXVhbHMgCi1QQVNTIHBsdXNFcXVhbHNSZXN1
bHQgCi1QQVNTIG1pbnVzRXF1YWxzIAotUEFTUyBtaW51c0VxdWFsc1Jlc3VsdCAKLVBBU1MgdGlt
ZXNFcXVhbHMgCi1QQVNTIHRpbWVzRXF1YWxzUmVzdWx0IAotCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtcG9zdGZpeC1wcmVmaXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1wb3N0Zml4LXByZWZpeC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyODhkY2Y2NDhhZTI1MDg1Yjc0ZDg2OGVmYWYyZTMxNTMwMDUyNzdlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1wb3N0Zml4LXByZWZpeC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5wcmVmaXhQbHVzUGx1cyA9IGFzeW5j
ICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICsreDsKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAg
ICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDY1KTsKLX0KLQotd2hsc2xUZXN0cy5wcmVmaXhQ
bHVzUGx1c1Jlc3VsdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAg
ICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiArK3g7Ci0g
ICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjUpOwotfQotCi13aGxzbFRlc3RzLnBv
c3RmaXhQbHVzUGx1cyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAg
ICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAg
ICAgIHJldHVybiB4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDY1KTsKLX0K
LQotd2hsc2xUZXN0cy5wb3N0Zml4UGx1c1BsdXNSZXN1bHQgPSBhc3luYyAoKSA9PgotewotICAg
IGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4geCsrOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDY0
KTsKLX0KLQotd2hsc2xUZXN0cy5wcmVmaXhNaW51c01pbnVzID0gYXN5bmMgKCkgPT4KLXsKLSAg
ICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLS14OwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICBgOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCg2NCldKSwgNjMpOwotfQotCi13aGxzbFRlc3RzLnByZWZpeE1pbnVzTWludXNSZXN1
bHQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9v
KGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLS14OwotICAgICAgICB9Ci0g
ICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNjQpXSksIDYzKTsKLX0KLQotd2hsc2xUZXN0cy5wb3N0Zml4TWludXNN
aW51cyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBm
b28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHgtLTsKLSAgICAgICAgICAgIHJldHVy
biB4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDYzKTsKLX0KLQotd2hsc2xU
ZXN0cy5wb3N0Zml4TWludXNNaW51c1Jlc3VsdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiB4LS07Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjQpOwotfQot
Ci13aGxzbFRlc3RzLnBsdXNFcXVhbHMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFt
ID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICB4ICs9
IDQyOwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgz
ODUpXSksIDM4NSArIDQyKTsKLX0KLQotd2hsc2xUZXN0cy5wbHVzRXF1YWxzUmVzdWx0ID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHggKz0gNDI7Ci0gICAgICAgIH0KLSAgICBg
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgzODUpXSksIDM4NSArIDQyKTsKLX0KLQotd2hsc2xUZXN0cy5taW51c0VxdWFs
cyA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhp
bnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgeCAtPSA0MjsKLSAgICAgICAgICAgIHJldHVy
biB4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUgLSA0Mik7Ci19Ci0K
LXdobHNsVGVzdHMubWludXNFcXVhbHNSZXN1bHQgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiB4IC09IDQyOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUg
LSA0Mik7Ci19Ci0KLXdobHNsVGVzdHMudGltZXNFcXVhbHMgPSBhc3luYyAoKSA9PiB7Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHggKj0gNDI7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDM4NSldKSwgMzg1ICogNDIpOwotfQotCi13aGxzbFRlc3RzLnRpbWVzRXF1YWxz
UmVzdWx0ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQg
Zm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geCAqPSA0MjsKLSAgICAg
ICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICogNDIpOwotfQotCi1ydW5UZXN0cyh3
aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgy
ZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMtZXhwZWN0
ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgyZjkwNDU4YTU2ZjU0NWVi
MTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1o
aWdoLXpvbWJpZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1Q
QVNTIAotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1o
aWdoLXpvbWJpZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13
cml0ZS1oaWdoLXpvbWJpZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdh
NzU2MTNkYzg1ZjYyMjAxYTUyZWQ0MGMzMzMxOWUyOTRlNDA0Ni4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVh
ZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OSAr
MCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNv
bnN0IHNoYWRlclNvdXJjZSA9IGAKLWJvb2wgZmlsbCh0aHJlYWQgZmxvYXQ0eDQqIG1hdCwgZmxv
YXQgdmFsdWUpCi17Ci0gICAgZmxvYXQ0eDQgcmVzdWx0OwotICAgIGZvciAodWludCBpID0gMDsg
aSA8IDQ7IGkgPSBpICsgMSkgewotICAgICAgICAgICAgcmVzdWx0W2ldID0gZmxvYXQ0KHZhbHVl
LCB2YWx1ZSwgdmFsdWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgKm1hdCA9IHJlc3VsdDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29t
cHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0
aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDR4NCBtYXQ7Ci0gICAg
ZmlsbCgmbWF0LCA0KTsKLQotICAgIGZsb2F0NCB2ZWM7Ci0gICAgdmVjWzBdICs9IG1hdFswXVsw
XSArIG1hdFswXVsxXSArIG1hdFszXVsyXTsKLQotICAgIGZsb2F0IHZhbHVlID0gNDI7Ci0gICAg
dmFsdWUgKz0gdmVjWzBdOwotCi0gICAgbWF0WzBdWzBdICs9IChtYXRbMF1bMF0gKz0gKHZhbHVl
ICs9IG1hdFswXVswXSkpOwotCi0gICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gbWF0WzBd
WzBdOwotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKLQotICAg
IGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
YnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQot
ICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRp
bmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVu
Y29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5k
RW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBz
aXplKTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
bkNvbXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1
dGVQaXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBj
b21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJl
c3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0
c0Zsb2F0MzJBcnJheVswXSA9PSA2NikKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZWxz
ZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Ci19
Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZh
aWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24o
KSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXJlYWQtbW9kaWZ5LXdyaXRlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1t
b2RpZnktd3JpdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmMWIxMWZi
MzFhMTFmYmYxOGRiNzlkOWEzYTcwNTM5NTcwZDhhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1tb2Rp
Znktd3JpdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9
IGAKLVtudW10aHJlYWRzKDEsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2
aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSkgewotICAgIGJ1ZmZlclswXSA9IDE7Ci0g
ICAgYnVmZmVyWzFdID0gYnVmZmVyWzBdKys7Ci0KLSAgICBidWZmZXJbMl0gPSAxOwotICAgIGJ1
ZmZlclszXSA9ICsrYnVmZmVyWzJdOwotCi0gICAgYnVmZmVyWzRdID0gMTsKLSAgICBidWZmZXJb
NF0gKz0gNTsKLQotICAgIGJ1ZmZlcls1XSA9IDE7Ci0gICAgYnVmZmVyWzVdICo9IDc7Ci0KLSAg
ICBpbnQgdG90YWwgPSAxNDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpICs9IDIpIHsK
LSAgICAgICAgdG90YWwgKz0gaTsKLSAgICB9Ci0gICAgYnVmZmVyWzZdID0gdG90YWw7Ci0KLSAg
ICB0b3RhbCA9IDE0OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAg
ICB0b3RhbCArPSBpOwotICAgIH0KLSAgICBidWZmZXJbN10gPSB0b3RhbDsKLX0KLWA7Ci0KLWFz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewotICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0
b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7Ci0gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRl
ci5yZXF1ZXN0RGV2aWNlKCk7Ci0KLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdl
LWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0g
ICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShj
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBJbnQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogODsKLQotICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5NQVBf
UkVBRH07Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNj
cmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBidWZmZXIsIHNp
emV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNv
ZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEp
OwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0g
YXdhaXQgYnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgSW50
MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRzWzBdID09IDIKLSAg
ICAgICAgJiYgcmVzdWx0c1sxXSA9PSAxCi0gICAgICAgICYmIHJlc3VsdHNbMl0gPT0gMgotICAg
ICAgICAmJiByZXN1bHRzWzNdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c1s0XSA9PSA2Ci0gICAg
ICAgICYmIHJlc3VsdHNbNV0gPT0gNwotICAgICAgICAmJiByZXN1bHRzWzZdID09IDM0Ci0gICAg
ICAgICYmIHJlc3VsdHNbN10gPT0gNTkpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVs
c2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci19Ci13aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgi
Iik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0g
ICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9i
b2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlY3Vy
c2l2ZS1zdHJ1Y3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1
cnNpdmUtc3RydWN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRlYjUzNDhkMDMzYzAzNDg4OGUxYmIxMDM3ZmNkNGUxMDNkM2ExOTkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXJlY3Vyc2l2ZS1zdHJ1Y3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAs
MCBAQAotCi1QQVNTIG11dHVhbGx5UmVjdXJzaXZlU3RydWN0IAotUEFTUyBtdXR1YWxseVJlY3Vy
c2l2ZVN0cnVjdFdpdGhQb2ludGVyc0Jyb2tlbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcmVjdXJzaXZlLXN0cnVjdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODJmMDhkNGFlOTk4YzVhYThiMTZlNmIyNTAxMDQ3Y2ZiYzgzNGYwYS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtcmVjdXJzaXZlLXN0cnVjdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAK
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgot
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5tdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdCA9IGFz
eW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgICAgICBCYXIgYmFyOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc3RydWN0IEJhciB7Ci0gICAgICAgICAgICAgICAgRm9vIGZvbzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13aGxzbFRlc3RzLm11dHVhbGx5
UmVjdXJzaXZlU3RydWN0V2l0aFBvaW50ZXJzQnJva2VuID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICB0aHJlYWQg
QmFyKiBiYXI7Ci0gICAgICAgICAgICBpbnQgZm9vOwotICAgICAgICB9Ci0gICAgICAgIHN0cnVj
dCBCYXIgewotICAgICAgICAgICAgdGhyZWFkIEZvbyogZm9vOwotICAgICAgICAgICAgaW50IGJh
cjsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Rm9vIGZvbzsKLSAgICAgICAgICAgIEJhciBiYXI7Ci0gICAgICAgICAgICBmb28uZm9vID0gNTY0
OwotICAgICAgICAgICAgYmFyLmJhciA9IDUzOwotICAgICAgICAgICAgcmV0dXJuIGZvby5iYXIt
PmJhciAtIGJhci5mb28tPmZvbzsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMCk7Ci19Ci0KLXJ1
blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFyaWFibGUtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFyaWFibGUtZXhwZWN0
ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1
M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2FsLXZhcmlh
YmxlLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFy
aWFibGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFyaWFi
bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzZTM1NjdiNjhjNmQ2Y2Vk
NDYzZjc3NjdjYTZhMzhmMTg1NTBlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2FsLXZhcmlh
YmxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBg
Ci1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsK
LSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotZmxvYXQgY29weShmbG9hdCB2
KSB7Ci0gICAgZmxvYXQgbG9jYWwgPSB2OwotICAgIHJldHVybiBsb2NhbDsKLX0KLQotdmVydGV4
IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBm
bG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAg
ICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSBjb3B5KHNo
YWRlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAg
cmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRl
ckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0g
e3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNv
bnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5w
dXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVy
In1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0g
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJh
c3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJ
bnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41Owot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotCi0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1h
cCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owot
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAw
KTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rp
b24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2Fu
dmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tc3BlYy10ZXN0cy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2RlN2JhZTMxYjc2YzA0ODYyMDQzMGRl
Njc0ZWU2YmFjNzRjNDc5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tc3BlYy10ZXN0cy1leHBlY3Rl
ZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0KLVBBU1MgcmV0dXJuSWYgCi1Q
QVNTIHJldHVyblJlZmVyZW5jZVRvU2FtZVBhcmFtZXRlciAKLVBBU1MgcmV0dXJuUmVmZXJlbmNl
VG9QYXJhbWV0ZXJXaXRoRGlmZmVyZW50RnVuY3Rpb25zIAotUEFTUyByZXR1cm5SZWZlcmVuY2VU
b1BhcmFtZXRlciAKLVBBU1MgcmV0dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlV2l0aE5lc3Rp
bmcgCi1QQVNTIHJldHVyblJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZSAKLVBBU1MgcmV0dXJuSW50
TGl0ZXJhbFVpbnQgCi1QQVNTIHJldHVybkludExpdGVyYWxGbG9hdCAKLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTEyYzMwOWZjN2E2MWRjMTQzZjAwZjk4ZmUxZTkyMDE2YTZmNDJjYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDIzNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYt
OD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhl
IFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3Qt
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0
cy5yZXR1cm5JZiA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAg
IGAKLSAgICAgICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaW50IHkgPSA2OwotICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAg
ICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeSA9
IDY7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB5
ID0gODsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9vKGludCB4
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAg
ICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHkgPSA4OwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBsZXQgcHJvZ3JhbSA9
IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkg
PSA2OwotICAgICAgICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgIHJldHVybiA4
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzKV0pLCAxMCk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDQpXSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2KV0pLCAxMCk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDcpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDEwKTsKLQot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IGZvbyhpbnQg
eCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAg
ICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gODsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gOSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMTA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAg
ICBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHkgPSA5
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIH0KLSAgICBg
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgzKV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNCldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDkp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCg2KV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyldKSwgOCk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDgpXSksIDkp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCg5KV0pLCA5KTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aW50IHkgPSA2OwotICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDEwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gMTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gNykKLSAg
ICAgICAgICAgICAgICAgICAgaW50IHkgPSA4OwotICAgICAgICAgICAgICAgIHJldHVybiB5Owot
ICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX07Ci0KLXdobHNsVGVzdHMucmV0dXJuUmVmZXJl
bmNlVG9TYW1lUGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBsdXMoYmFy
KDUpLCBiYXIoNykpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHBsdXModGhyZWFkIGludCog
eCwgdGhyZWFkIGludCogeSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICp4ICsgKnk7
Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50KiBiYXIoaW50IHgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAgfQotICAgIGA7Ci0KLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxNCk7Ci19
OwotCi13aGxzbFRlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyV2l0aERpZmZlcmVudEZ1
bmN0aW9ucyA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50
IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqYmFyKDEwKSArICpiYXooMjAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gJng7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50
KiBiYXooaW50IHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmeTsKLSAgICAgICAg
fQotICAgIGA7Ci0KLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCAzMCk7Ci19OwotCi13aGxzbFRlc3RzLnJldHVyblJlZmVyZW5jZVRv
UGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBp
bnQgZm9vKGJvb2wgY29uZGl0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKmJh
cihjb25kaXRpb24sIDEsIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGludCogYmFy
KGJvb2wgY29uZGl0aW9uLCBpbnQgYSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBjb25kaXRpb24gPyAmYSA6ICZiOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wo
dHJ1ZSldKSwgMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKSwgMik7Ci19OwotCi13aGxzbFRlc3RzLnJl
dHVyblJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZVdpdGhOZXN0aW5nID0gYXN5bmMgKCkgPT4gewot
ICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICpiYXIoKSArICpiYXooKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVh
ZCBpbnQqIGJhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBhID0gMjA7Ci0gICAgICAg
ICAgICByZXR1cm4gJmE7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50KiBiYXooKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYSA9IDIyOwotICAgICAgICAgICAgcmV0dXJuICZh
OwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKLX07Ci0KLXdobHNsVGVzdHMucmV0dXJu
UmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFt
ID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpi
YXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZCBpbnQqIGJhcigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBhID0gNDI7Ci0gICAgICAgICAgICByZXR1cm4gJmE7Ci0gICAgICAg
IH0KLSAgICBgOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRlcmFs
VWludCA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9ICJ1aW50IGZvbygpIHsgcmV0
dXJuIDQyOyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRlcmFs
RmxvYXQgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSAiZmxvYXQgZm9vKCkgeyBy
ZXR1cm4gNDI7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08
L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1z
ZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c2V0dGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMWYyZDZjMzQxYWI1MGI2NmYyYjlhZTc4NDI3YTcyNzFiMDY4OThhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1zZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4
ICswLDAgQEAKLQotUEFTUyBzZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgCi1QQVNTIHNldHRlcldpdGhO
b0dldHRlck92ZXJsb2FkIAotUEFTUyBzZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkIAot
UEFTUyByZWN1cnNpdmVTZXR0ZXJzIAotUEFTUyBsb25lU2V0dGVyIAotUEFTUyBsb25lU2V0dGVy
UG9pbnRlciAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNldHRlci1z
cGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVz
dHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYwMGQ2YTdjODFjZDQ0ZDgy
NDk0NzExMmY2MDc1NDc5ZWFkNjQ5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVzdHMu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9
ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQot
d2hsc2xUZXN0cy5zZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgPSBhc3luYyAoKSA9PgotewotICAgIGNv
bnN0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBvcGVyYXRvci5mb28oaW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gNTsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0b3Iu
Zm9vPShpbnQsIGludCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAgICAg
ICAgfQotICAgICAgICBpbnQgZm9vKCkgewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAg
ICB4LmZvbyA9IDQyOwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICAgICAg
aW50IGJhcigpIHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgcmV0dXJuIHguZm9v
OwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDU0Myk7Ci0gICAgLy9hc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCA1KTsKLX0KLQotd2hsc2xU
ZXN0cy5zZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdh
aXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAg
ICAgICAgICAgc3RydWN0IEJhciB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28oRm9v
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1MzQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBCYXIgb3BlcmF0b3IuZm9vPShCYXIsIGludCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IGApOwotICAgICAgICAKLX0KLQotd2hsc2xUZXN0cy5zZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9h
ZEZpeGVkID0gYXN5bmMgKCkgPT4KLXsKLSAgICBjb25zdCBwcm9ncmFtID1gCi0gICAgICAgIHN0
cnVjdCBCYXIgeyB9Ci0gICAgICAgIGludCBvcGVyYXRvci5mb28oQmFyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gNTM0OwotICAgICAgICB9Ci0gICAgICAgIEJhciBvcGVyYXRvci5m
b289KEJhciwgaW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQmFyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50IGZvbygpIHsKLSAgICAgICAgICAgIEJhciBiYXI7Ci0gICAgICAg
ICAgICByZXR1cm4gYmFyLmZvbzsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKCkgewotICAg
ICAgICAgICAgQmFyIGJhcjsKLSAgICAgICAgICAgIGJhci5mb28gPSA1MjsKLSAgICAgICAgICAg
IHJldHVybiBiYXIuZm9vOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA1MzQpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDUzNCk7
Ci19Ci0KLXdobHNsVGVzdHMucmVjdXJzaXZlU2V0dGVycyA9IGFzeW5jICgpID0+Ci17Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7
Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAgICAgfQotICAgICAgICBzdHJ1Y3QgQmFyIHsKLSAg
ICAgICAgICAgIGludCBhOwotICAgICAgICAgICAgaW50IGI7Ci0gICAgICAgIH0KLSAgICAgICAg
aW50IG9wZXJhdG9yLmMoQmFyIGJhcikgeyByZXR1cm4gYmFyLmE7IH0KLSAgICAgICAgQmFyIG9w
ZXJhdG9yLmJhcihGb28gZm9vKSB7IEJhciBiOyBiLmEgPSBmb28ueDsgYi5iID0gZm9vLnk7IHJl
dHVybiBiOyB9Ci0gICAgICAgIEJhciBvcGVyYXRvci5jPShCYXIgYmFyLCBpbnQgbmV3dmFsKSB7
IGJhci5hID0gbmV3dmFsOyByZXR1cm4gYmFyOyB9Ci0gICAgICAgIEZvbyBvcGVyYXRvci5iYXI9
KEZvbyBmb28sIEJhciBuZXd2YWwpIHsgZm9vLnggPSBuZXd2YWwuYTsgZm9vLnkgPSBuZXd2YWwu
YjsgcmV0dXJuIGZvbzsgfQotICAgICAgICBpbnQgZigpIHsKLSAgICAgICAgICAgIEZvbyBmb287
Ci0gICAgICAgICAgICBmb28ueCA9IGZvby55ID0gMzsKLSAgICAgICAgICAgIGZvby5iYXIuYyA9
IDg7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLngqMTAgKyBmb28ueTsKLSAgICAgICAgfQotICAg
IGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImYi
LCBbXSksIDgzKTsKLX0KLQotd2hsc2xUZXN0cy5sb25lU2V0dGVyID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRv
ci5mb289KGludCwgaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1
NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLQotd2hsc2xUZXN0
cy5sb25lU2V0dGVyUG9pbnRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWls
KAotICAgICAgICBgCi0gICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvci5mb289KHRocmVh
ZCBpbnQqIHB0ciwgaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBw
dHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLQotcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRF
U1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBs
ZS1hcnJheXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmY5MTgyOTYzOTI5ZjExMGVmZGJi
YWUwNDk5NTdkOWU4YTNkN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJheXMuaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhl
YWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4K
LTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXZvaWQgZmlsbCh0aHJl
YWQgaW50W10gYXJyYXksIGludCB2YWx1ZSkgewotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGFycmF5W2ldID0gdmFsdWU7Ci0gICAgfQotfQot
Ci1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3Bh
dGNoVGhyZWFkSUQpIHsKLSAgICBpbnRbNDJdIGFycmF5OwotICAgIGlmIChhcnJheS5sZW5ndGgg
IT0gNDIpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhcnJheVswXSA9IDUxNzsKLSAgICBpZiAoYXJyYXlbMF0gIT0g
NTE3KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0aHJlYWQgaW50W10gYXJyYXlQdHIgPSBAYXJy
YXk7Ci0gICAgaWYgKGFycmF5UHRyLmxlbmd0aCAhPSA0MikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50WzQyXSBhcnJheTI7Ci0gICAgYXJyYXkyID0gYXJyYXk7Ci0gICAgaWYgKGFycmF5Mi5s
ZW5ndGggIT0gNDIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoYXJyYXkyWzBdICE9IDUxNykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbChhcnJheVB0ciwgMTMzNyk7Ci0gICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgYXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFycmF5
UHRyW2ldICE9IDEzMzcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhcnJheVtp
XSAhPSAxMzM3KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChhcnJheTJb
MF0gIT0gNTE3KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVpbnQgaSA9IDE7IGkgPCBhcnJheTIubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKGFycmF5MltpXSAhPSAwKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3Qg
Y29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0
ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIi
fV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9T
UkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3Jp
cHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3Jp
dGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5
KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOwotICAg
IGJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9Owot
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQotICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAs
IHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIu
c2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3Bh
dGNoKDEsIDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0Fy
cmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBsZXQg
cmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwot
ICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBhc3NlZCgi
Iik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVy
LnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0Rldmlj
ZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0
aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwot
fSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7
Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXNpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMjc5Yzk4ZTRjNzRjMGI4Y2MwNjY2ZDMzZGE4N2Jk
ODE3NzUwZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIHNpbXBsZUdldHRlciAKLVBB
U1Mgc2ltcGxlU2V0dGVyIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c2ltcGxlLWdldHRlci1zZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1w
bGUtZ2V0dGVyLXNldHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2My
NjIyYmJhNzAwZmFmM2Y0OWQ2YjFkNDY3MmMzMDYwYzk3NzYzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1w
bGUtZ2V0dGVyLXNldHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCFE
T0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5l
c3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuc2ltcGxlR2V0dGVyID0g
YXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsK
LSAgICAgICAgICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIGludCBvcGVyYXRvci55KEZv
byBmb28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmb28ueDsKLSAgICAgICAgfQot
ICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIGZvbzsKLSAgICAg
ICAgICAgIGZvby54ID0gNzgwNDsKLSAgICAgICAgICAgIHJldHVybiBmb28ueTsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdKSwgNzgwNCk7Ci19OwotCi13aGxzbFRlc3RzLnNpbXBsZVNldHRlciA9IGFz
eW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0g
ICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0b3IueShGb28g
Zm9vKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAgICAgIH0KLSAg
ICAgICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludCB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9vLnggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBmb287Ci0gICAgICAg
IH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyBmb287Ci0g
ICAgICAgICAgICBmb28ueSA9IDc4MDQ7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAg
ICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDc4MDQpOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08
L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1z
aW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBs
ZS10ZXN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNzY2
M2QwNjlkNGQ1N2RkOWI5MzA1YjA2Yzg4YjQzM2NkOGY2NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBs
ZS10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotUEFT
UyBzaW1wbGVVbnJlYWNoYWJsZUNvZGUgCi1QQVNTIHNpbXBsZU5vUmV0dXJuIAotUEFTUyBzaW1w
bGVSZWN1cnNpdmVTdHJ1Y3QgCi1QQVNTIHNpbXBsZVJlY3Vyc2lvbiAKLVBBU1Mgc2ltcGxlUmVj
dXJzaW9uMiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS10
ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS10ZXN0cy5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTM3MTNjNTE3ZThlNjFiYjQ4YTQwNmQ4NGRl
ZGUzZTVhYjFiMjkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFy
c2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+
VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hs
c2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13
aGxzbFRlc3RzLnNpbXBsZVVucmVhY2hhYmxlQ29kZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnNpbXBsZU5vUmV0dXJu
ID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgiaW50IGZvbygpIHsgfSIpOwot
fQotCi13aGxzbFRlc3RzLnNpbXBsZVJlY3Vyc2l2ZVN0cnVjdCA9IGFzeW5jICgpID0+IHsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28gewot
ICAgICAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQot
Ci13aGxzbFRlc3RzLnNpbXBsZVJlY3Vyc2lvbiA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKGludCB4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvbyh4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci19Ci0KLXdobHNsVGVzdHMuc2ltcGxlUmVjdXJzaW9uMiA9IGFzeW5jICgpID0+IHsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBiYXIoaW50IHgp
IHsKLSAgICAgICAgICAgICAgICBmb28oeCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmb28oYmFyKHgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7
Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLWV4cGVjdGVk
LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjZTAyOGI0MDQyZTc5ZGE5MmE1
YWQ3ZjI1NGU3YjljMWMyOGQ4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLXdoaWxlLWxvb3AtZXhw
ZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mgc2ltcGxlV2hp
bGUgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtd2hpbGUt
bG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyY2VhY2U4NTNmYjJiMGZiMmY4NmEw
ZmNlZWVkZDljOGM2ZjU4N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxvbmci
PgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMg
PSB7fTsKLQotd2hsc2xUZXN0cy5zaW1wbGVXaGlsZSA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQg
cHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKHggPCAxMykKLSAgICAgICAgICAgICAgICB4ID0geCAqIDI7Ci0gICAgICAgICAg
ICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIDE2KTsKLX0KLQot
cnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjcyYzFjYWJlMDdiNjAyNGY5ZWI3NWQzZTY4OTEwMWMwODFiYjJlZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtc3RvcmUtbnVsbC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwzICswLDAgQEAKLQotUEFTUyBzdG9yZU51bGwgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c3RvcmUtbnVsbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjQ0YjMyYzVl
ZDZkZTc2ZjI1YTlkMDc3NDNhN2E3YmNjMTYxY2RiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxs
Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9
ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQot
d2hsc2xUZXN0cy5zdG9yZU51bGwgPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgdm9pZCBmb28oKSB7ICpudWxsID0gNDI7IH0KLSAg
ICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0
eS11cGRhdGVzLXByb3Blcmx5LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtc3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNk
YjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0eS11cGRhdGVzLXByb3Bl
cmx5LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0
eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc3RvcmUt
dG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZTRkNTVjNTE1YTY3MTZhZTU0Mzg5ZmFlMzEwZGY4Y2ZlNjI3NmRmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1zdG9yZS10by1wcm9wZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxNTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgot
PGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0
IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKTsKLX0KLQotc3RydWN0IEJhciB7Ci0gICAgaW50IHg7Ci0gICAgZmxvYXQg
eTsKLSAgICBpbnQgejsKLX0KLQotc3RydWN0IEZvbyB7Ci0gICAgQmFyIGJhcjsKLSAgICBCYXIg
YmFyMjsKLX0KLQotdGhyZWFkIEZvbyogcHRyKCkgewotICAgIEZvbyBsb2NhbDsKLSAgICByZXR1
cm4gJmxvY2FsOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9z
aXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAg
VmVydGV4T3V0IHJlc3VsdDsKLQotICAgIHRocmVhZCBGb28qIHAgPSBwdHIoKTsKLSAgICBwLT5i
YXIyLnkgPSAxLjA7Ci0gICAgZmxvYXQgdmFsdWUgPSBwLT5iYXIyLnk7Ci0KLSAgICByZXN1bHQu
cG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSB2YWx1ZTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NChz
aGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3Qg
YXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19
OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVy
MC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAx
LjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3
YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAg
Y29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50
VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5j
cmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzog
MCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVu
dDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFy
Iiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
PSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3Qg
cmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVy
UGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
LSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigp
IHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXN0cnVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtc3RydWN0LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzYyMGVlMWIyODU4NDZjOGE2ZmUyZmNmNDQ1Y2E2M2ZjZGE3ZGE1My4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtc3RydWN0LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAot
Ci1QQVNTIGVtcHR5U3RydWN0IAotUEFTUyBzZXR0aW5nQW5BcnJheUluc2lkZUFTdHJ1Y3QgCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzAxMDdjOGRlMWNiNDMxYzBkOTc2MmUzOTA2NGY2ODRhMWY5YTgxZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtc3RydWN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVz
dHMgPSB7fTsKLQotd2hsc2xUZXN0cy5lbXB0eVN0cnVjdCA9IGFzeW5jICgpID0+Ci17Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBUaGluZ3kgeyB9Ci0gICAgICAgIGludCBm
b28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBUaGluZ3kgdGhpbmd5OwotICAgICAgICAgICAg
cmV0dXJuIDQ2OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Nik7Ci19OwotCi13aGxzbFRlc3Rz
LnNldHRpbmdBbkFycmF5SW5zaWRlQVN0cnVjdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50WzFdIGFycmF5
OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBG
b28gZm9vOwotICAgICAgICAgICAgdGhyZWFkIEZvbyogYmFyID0gJmZvbzsKLSAgICAgICAgICAg
IGJhci0+YXJyYXlbMF0gPSAyMTsKLSAgICAgICAgICAgIHJldHVybiBmb28uYXJyYXlbMF07Ci0g
ICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDIxKTsKLX07Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwot
PC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c3dpdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhw
ZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNiZjUxM2M2OWZjNmE2
M2ZjODMxMjRmMzFiYjgzZGZlNDUxMzAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhwZWN0ZWQu
dHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mgc3dpdGNoQnJlYWsgCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDQ3MDYxYjE1YTA4ZWM1M2UxMTRhNjcyNzhkNjZjYzRmZTFhMDY1Yy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtc3dpdGNoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgcHJlZml4L3Bvc3RmaXguPC90aXRsZT4K
LTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3
aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuc3dpdGNoQnJlYWsgPSBhc3luYyAoKSA9Pgot
ewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIHN3aXRjaCAoeCkgewot
ICAgICAgICAgICAgY2FzZSA3Njc6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IDI3OwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA2OToKLSAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gNzYyNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IDQ5OwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDc2NyldKSwgMjcpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2OSldKSwgNzYyNCk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KDApXSksIDQ5KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXJuYXJ5LXNw
ZWMtdGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGVybmFyeS1z
cGVjLXRlc3QtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmI4
ODY0ZjExMDE1ZjJmNGM1ZTZhN2IwZjA4NTFkOWEyN2M3NDcxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXJu
YXJ5LXNwZWMtdGVzdC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LQotUEFTUyB0ZXJuYXJ5RXhwcmVzc2lvbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXRlcm5hcnktc3BlYy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdGVybmFyeS1zcGVjLXRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDkwYWE4MzhlNzQzZDY4MDJmZDAyYmFiMzA4YjFiYTc5NzVmYWM0My4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGVybmFyeS1zcGVjLXRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRs
ZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25z
dCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMudGVybmFyeUV4cHJlc3Npb24gPSBhc3lu
YyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4IDwgMyA/IDQgOiA1OwotICAgICAgICB9Ci0g
ICAgICAgIGludCBiYXIoaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4IDwg
MTAgPyAxMSA6IHggPCAxMiA/IDE0IDogMTU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJheihp
bnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDMgPCA0ID8geCA6IDU7Ci0gICAg
ICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCg3NjcpXSksIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgyKV0pLCA0KTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW21h
a2VJbnQoOCldKSwgMTEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJiYXIiLCBbbWFrZUludCg5KV0pLCAxMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEwKV0pLCAxNCk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIs
IFttYWtlSW50KDExKV0pLCAxNCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEyKV0pLCAxNSk7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEzKV0p
LCAxNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImJheiIsIFttYWtlSW50KDE0KV0pLCAxNCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpbnQgeDsKLSAgICAgICAgICAgICAgICAoNCA8IDUgPyB4IDogNykgPSA4OwotICAgICAgICAg
ICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4Owot
ICAgICAgICAgICAgICAgIGludCB5OwotICAgICAgICAgICAgICAgICgwIDwgMSA/IHggOiB5KSA9
IDQyOwotICAgICAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28o
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAg
IGludCB5OwotICAgICAgICAgICAgICAgIHRocmVhZCBpbnQqIHogPSAmKDAgPCAxID8geCA6IHkp
OwotICAgICAgICAgICAgICAgIHJldHVybiAqejsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9vKCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgICAgICBp
bnQgeTsKLSAgICAgICAgICAgICAgICB0aHJlYWQgaW50W10geiA9IEAoMCA8IDEgPyB4IDogeSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp6OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28oKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAgIGZs
b2F0IHk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDQgPCA1ID8geCA6IHk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAg
ICAgICAgaW50IGZvbygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDQg
PCA1ID8gNiA6IDcuMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3Rz
KHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0LWV4cGVjdGVkLnR4dApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTA3NTc3ZDUwNGQ5NmQ3N2RiYzU2MjMxNDQ5MTYxZTA1MmUx
NWM2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotCi1QQVNTIFJldHVybiBhIGxpdGVyYWwgb2YgdHlw
ZSBib29sLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCi1QQVNTIFJl
dHVybiBhbiBleHBlY3RlZCBpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWlu
dCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCi1QQVNTIFVw
bG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBm
bG9hdDQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVlLiAKLVBBU1Mg
UmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQg
ZmxvYXQgdmFsdWUuIAotUEFTUyBVcGxvYWQgbWFueSBib29sIHZhbHVlcyBhbmQgcmV0dXJuIGEg
Y2FsY3VsYXRlZCByZXN1bHQuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0IHZhbHVl
LiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGludCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBl
eHBlY3RlZCB1aW50IHZhbHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0IHZhbHVl
LiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBh
biBleHBlY3RlZCBpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWludCB2YWx1
ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCi1QQVNTIFJldHVybiBh
biBleHBlY3RlZCBmbG9hdDQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZh
bHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4g
YW4gZXhwZWN0ZWQgZmxvYXQgdmFsdWUuIAotUEFTUyBVcGxvYWQgYW5kIGNhbGN1bGF0ZSBhIHJl
c3VsdCBmcm9tIHZhcmllZCBhcmd1bWVudCB0eXBlcy4gCi1QQVNTIFN0b3JlIGludG8gYSBmbG9h
dDRbXS4gCi1QQVNTIFVwbG9hZCBhIGludFtdIGFuZCBzdG9yZSBpbnRvIGEgaW50W10uIAotUEFT
UyBVcGxvYWQgYSBmbG9hdDR4NFtdIGFuZCBzdG9yZSBpbnRvIGEgZmxvYXQ0eDRbXS4gCi1QQVNT
IFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBl
Y3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2
YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3MtdGVzdC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MjkxNDYyMDcyZWIyMmY1NjliZjYzZTNiZjZiYTc5NTc2
ZTVkNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5U
ZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxz
bC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCBlcHNpbG9uID0gMC4w
MDAxOwotCi0vLyBGSVhNRTogQWRkICJ1Y2hhciIgYmFjayBpbiB3aGVuIG9wZXJhdG9yKyh1Y2hh
ciwgdWNoYXIpIGlzIGF2YWlsYWJsZS4KLWNvbnN0IG51bWVyaWNTY2FsYXJUeXBlcyA9IFsiaW50
IiwgInVpbnQiLCAiZmxvYXQiXTsKLQotY29uc3QgbnVtZXJpY1NjYWxhckZ1bmNzID0gewotICAg
ICJpbnQiOiBjYWxsSW50RnVuY3Rpb24sCi0gICAgInVjaGFyIjogY2FsbFVjaGFyRnVuY3Rpb24s
Ci0gICAgInVpbnQiOiBjYWxsVWludEZ1bmN0aW9uLAotICAgICJmbG9hdCI6IGNhbGxGbG9hdEZ1
bmN0aW9uCi19OwotCi1jb25zdCBzY2FsYXJBcmdNYWtlcnMgPSB7Ci0gICAgImJvb2wiOiBtYWtl
Qm9vbCwKLSAgICAiaW50IjogbWFrZUludCwKLSAgICAidWNoYXIiOiBtYWtlVWNoYXIsCi0gICAg
InVpbnQiOiBtYWtlVWludCwKLSAgICAiZmxvYXQiOiBtYWtlRmxvYXQKLX07Ci0KLWNvbnN0IGFy
cmF5VHlwZUxlbmd0aHMgPSB7Ci0gICAgImZsb2F0NCI6IDQsCi0gICAgImZsb2F0NHg0IjogMTYK
LX07Ci0KLWNvbnN0IGFycmF5RnVuY3MgPSB7Ci0gICAgImZsb2F0NCI6IGNhbGxGbG9hdDRGdW5j
dGlvbiwKLSAgICAiZmxvYXQ0eDQiOiBjYWxsRmxvYXQ0eDRGdW5jdGlvbiwKLX07Ci0KLWNvbnN0
IGFycmF5QXJnTWFrZXJzID0gewotICAgICJmbG9hdDQiOiBtYWtlRmxvYXQ0LAotICAgICJmbG9h
dDR4NCI6IG1ha2VGbG9hdDR4NAotfTsKLQotY29uc3QgZmxvYXQ0eDRleHBlY3RlZCA9IFswLCA0
LCA4LCAxMiwgMSwgNSwgOSwgMTMsIDIsIDYsIDEwLCAxNCwgMywgNywgMTEsIDE1XTsKLWNvbnN0
IGZsb2F0NHg0Q29sdW1uRXhwZWN0ZWQgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwg
MTAsIDExLCAxMiwgMTMsIDE0LCAxNV07Ci1jb25zdCBmbG9hdDRleHBlY3RlZCA9IFswLCAxLCAy
LCAzXTsKLQotbGV0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5saXRlcmFscyA9ICgp
ID0+IHsKLSAgICBjaGVja0Jvb2xzKCJSZXR1cm4gYSBsaXRlcmFsIG9mIHR5cGUgYm9vbC4iLCAi
cmV0dXJuIHRydWU7Iik7Ci0gICAgY2hlY2tBcnJheXMoImZsb2F0NCIsICJyZXR1cm4gZmxvYXQ0
KDAsIDEsIDIsIDMpOyIsIFtdLCBmbG9hdDRleHBlY3RlZCk7Ci0gICAgY2hlY2tOdW1lcmljU2Nh
bGFycygicmV0dXJuIDQyOyIsIFtdLCA0Mik7Ci19OwotCi13aGxzbFRlc3RzLnNpbmdsZUFyZ3Vt
ZW50ID0gKCkgPT4gewotICAgIGNoZWNrQm9vbHMoIlVwbG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2
YWx1ZS4iLCAicmV0dXJuIGluMDsiLCBbdHJ1ZV0pOwotICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQi
LCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0ZXhwZWN0ZWRdLCBmbG9hdDRleHBlY3RlZCk7Ci0gICAg
Y2hlY2tOdW1lcmljU2NhbGFycygicmV0dXJuIGluMDsiLCBbNDJdLCA0Mik7Ci19OwotCi13aGxz
bFRlc3RzLm1hbnlBcmd1bWVudHMgPSAoKSA9PiB7Ci0gICAgY2hlY2tCb29scygiVXBsb2FkIG1h
bnkgYm9vbCB2YWx1ZXMgYW5kIHJldHVybiBhIGNhbGN1bGF0ZWQgcmVzdWx0LiIsCi0gICAgICAg
ICJyZXR1cm4gaW4wICYgaW4xICYgaW4yICYgaW4zICYgaW40ICYgaW41ICYgaW42ICYgaW43OyIs
Ci0gICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVl
XSk7Ci0KLSAgICBsZXQgYm9keSA9ICJyZXR1cm4gZmxvYXQ0KGluMC54LCBpbjEueSwgaW4yLnos
IGluMy53KTsiCi0gICAgbGV0IGFyZ3MgPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7
ICsraSkKLSAgICAgICAgYXJncy5wdXNoKGZsb2F0NGV4cGVjdGVkKTsKLSAgICBjaGVja0FycmF5
cygiZmxvYXQ0IiwgYm9keSwgYXJncywgZmxvYXQ0ZXhwZWN0ZWQpOwotCi0gICAgYm9keSA9IGBy
ZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsgaW40ICsgaW41ICsgaW42ICsgaW43O2A7Ci0g
ICAgY2hlY2tOdW1lcmljU2NhbGFycyhib2R5LCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgN10sIDI4
KTsKLX07Ci0KLXdobHNsVGVzdHMuYnVmZmVyc1dpdGhPbmVWYWx1ZSA9ICgpID0+IHsKLSAgICBj
b25zdCBib2R5ID0gYHJldHVybiBpbjBbMF07YAotICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCBi
b2R5LCBbW2Zsb2F0NGV4cGVjdGVkXV0sIGZsb2F0NGV4cGVjdGVkKTsKLSAgICBjaGVja051bWVy
aWNTY2FsYXJzKGJvZHksIFtbNDJdXSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5tdWx0aXBsZUJ1
ZmZlckFyZ3VtZW50cyA9ICgpID0+IHsKLSAgICBsZXQgYm9keSA9IGAKLSAgICBmbG9hdCB4ID0g
aW4wWzBdLnggKyBpbjBbMV0ueCArIGluMFsyXS54ICsgaW4xLnggKyBpbjJbMF0ueDsKLSAgICBm
bG9hdCB5ID0gaW4wWzBdLnkgKyBpbjBbMV0ueSArIGluMFsyXS55ICsgaW4xLnkgKyBpbjJbMF0u
eTsKLSAgICBmbG9hdCB6ID0gaW4wWzBdLnogKyBpbjBbMV0ueiArIGluMFsyXS56ICsgaW4xLnog
KyBpbjJbMF0uejsKLSAgICBmbG9hdCB3ID0gaW4wWzBdLncgKyBpbjBbMV0udyArIGluMFsyXS53
ICsgaW4xLncgKyBpbjJbMF0udzsKLQotICAgIHJldHVybiBmbG9hdDQoeCwgeSwgeiwgdyk7YDsK
LSAgICBjaGVja0FycmF5cygiZmxvYXQ0IiwgYm9keSwgW1tmbG9hdDRleHBlY3RlZCwgZmxvYXQ0
ZXhwZWN0ZWQsIGZsb2F0NGV4cGVjdGVkXSwgZmxvYXQ0ZXhwZWN0ZWQsIFtmbG9hdDRleHBlY3Rl
ZF1dLCBbMCwgNSwgMTAsIDE1XSk7Ci0KLSAgICBib2R5ID0gYHJldHVybiBpbjBbMF0gKyBpbjBb
MV0gKyBpbjBbMl0gKyBpbjEgKyBpbjJbMF07YDsKLSAgICBjaGVja051bWVyaWNTY2FsYXJzKGJv
ZHksIFtbMCwgMSwgMl0sIDMsIFs0XV0sIDEwKTsKLX07Ci0KLXdobHNsVGVzdHMubXVsdGlwbGVB
cmd1bWVudFR5cGVzID0gKCkgPT4gewotICAgIGNvbnN0IHNyYyA9IGBmbG9hdCB0ZXN0KGludCBp
LCB1Y2hhciBjLCBmbG9hdDQgZjQsIGRldmljZSB1aW50W10gdSwgZGV2aWNlIGZsb2F0W10gZnMp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmxvYXQoaSkgKyBmbG9hdChjKSArIGY0LnggKyBmNC55
ICsgZjQueiArIGY0LncgKyBmbG9hdCh1WzBdKSArIGZzWzBdICsgZnNbMV07Ci0gICAgfWA7Ci0g
ICAgY29uc3QgaSA9IG1ha2VJbnQoMSk7Ci0gICAgY29uc3QgYyA9IG1ha2VVY2hhcigyKTsKLSAg
ICBjb25zdCBmNCA9IG1ha2VGbG9hdDQoWzQsIDUsIDYsIDddKTsKLSAgICBjb25zdCB1ID0gbWFr
ZVVpbnQoWzNdKTsKLSAgICBjb25zdCBmcyA9IG1ha2VGbG9hdChbOCwgOV0pOwotICAgIHdlYkdQ
VVByb21pc2VUZXN0KCgpID0+IHsKLSAgICAgICAgcmV0dXJuIGNhbGxGbG9hdEZ1bmN0aW9uKHNy
YywgInRlc3QiLCBbaSwgYywgZjQsIHUsIGZzXSkudGhlbihyZXN1bHQgPT4gewotICAgICAgICAg
ICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0LCA0NSwgZXBzaWxvbiwgIlRlc3QgcmV0dXJu
ZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgICAgIH0pOwotICAgIH0sICJVcGxvYWQgYW5kIGNh
bGN1bGF0ZSBhIHJlc3VsdCBmcm9tIHZhcmllZCBhcmd1bWVudCB0eXBlcy4iKTsKLX07Ci0KLXdo
bHNsVGVzdHMuYnVmZmVyU3RvcmVzID0gKCkgPT4gewotICAgIGxldCBzcmMgPSBgdm9pZCB0ZXN0
KGRldmljZSBmbG9hdDRbXSBvdXQpIHsKLSAgICAgICAgb3V0WzBdID0gZmxvYXQ0KDAsIDEsIDIs
IDMpOwotICAgIH1gOwotICAgIGNvbnN0IGZsb2F0NE91dCA9IG1ha2VGbG9hdDQoW1swLCAwLCAw
LCAwXV0pOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIGZsb2F0NE91dCk7Ci0K
LSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7Ci0gICAgICAgIHJldHVybiBmbG9hdDRPdXQu
Z2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKLSAgICAgICAgICAgIGNvbnN0
IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIpOwotICAgICAgICAgICAgZm9y
IChsZXQgaTsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1
YWxzKHJlc3VsdFtpXSwgaSwgIlRlc3Qgc3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSwgIlN0b3JlIGludG8gYSBmbG9hdDRbXS4iKTsK
LQotICAgIHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNlIGludFtdIGluLCBkZXZpY2UgaW50W10gb3V0
KSB7Ci0gICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDU7IGkgPSBpICsgMSkKLSAgICAgICAg
ICAgIG91dFtpXSA9IGluW2ldOwotICAgIH1gOwotICAgIGNvbnN0IGFycmF5ID0gWzAsIDEsIDIs
IDMsIDRdOwotICAgIGNvbnN0IGlucHV0ID0gbWFrZUludChhcnJheSk7Ci0gICAgY29uc3Qgb3V0
cHV0ID0gbWFrZUludChbMCwgMCwgMCwgMCwgMF0pOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3Jj
LCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7Ci0KLSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9
PiB7Ci0gICAgICAgIHJldHVybiBvdXRwdXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVm
ZmVyID0+IHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50MzJBcnJheShhcnJh
eUJ1ZmZlcik7Ci0gICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGFycmF5LCByZXN1bHQs
ICJUZXN0IHN0b3JlZCBleHBlY3RlZCB2YWx1ZXMuIik7Ci0gICAgICAgIH0pOwotICAgIH0sICJV
cGxvYWQgYSBpbnRbXSBhbmQgc3RvcmUgaW50byBhIGludFtdLiIpOwotfTsKLQotd2hsc2xUZXN0
cy5mbG9hdDR4NHRlc3RzID0gKCkgPT4gewotICAgIGNvbnN0IHNyYyA9IGB2b2lkIHRlc3QoZGV2
aWNlIGZsb2F0NHg0W10gaW4sIGRldmljZSBmbG9hdDR4NFtdIG91dCkgewotICAgICAgICBmb3Ig
KHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpCi0gICAgICAgICAgICBvdXRbaV0gPSBpbltp
XTsKLSAgICB9YDsKLSAgICBjb25zdCBpbnB1dCA9IG1ha2VGbG9hdDR4NChbZmxvYXQ0eDRleHBl
Y3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3Rl
ZF0pOwotICAgIGNvbnN0IG91dHB1dCA9IG1ha2VGbG9hdDR4NChuZXcgQXJyYXkoNjQpLmZpbGwo
MCkpOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7
Ci0KLSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7Ci0gICAgICAgIHJldHVybiBvdXRwdXQu
Z2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKLSAgICAgICAgICAgIGNvbnN0
IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIpOwotICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0g
MDsgaiA8IDE2OyArK2opCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxz
KHJlc3VsdFtpICogMTYgKyBqXSwgZmxvYXQ0eDRleHBlY3RlZFtqXSwgZXBzaWxvbiwgIlRlc3Qg
c3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
ICAgfSwgIlVwbG9hZCBhIGZsb2F0NHg0W10gYW5kIHN0b3JlIGludG8gYSBmbG9hdDR4NFtdLiIp
OwotCi0gICAgY2hlY2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBmbG9hdDR4NChmbG9hdDQo
MCwgMSwgMiwgMyksIGZsb2F0NCg0LCA1LCA2LCA3KSwgZmxvYXQ0KDgsIDksIDEwLCAxMSksIGZs
b2F0NCgxMiwgMTMsIDE0LCAxNSkpOyIsIFtdLCBmbG9hdDR4NGV4cGVjdGVkKTsKLSAgICBjaGVj
a0FycmF5cygiZmxvYXQ0eDQiLCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0eDRleHBlY3RlZF0sIGZs
b2F0NHg0ZXhwZWN0ZWQpOwotICAgIGxldCBtdWx0aXBsZTR4NGFyZ3MgPSBbXTsKLSAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgICAgY29uc3QgYXJnID0gbmV3IEFycmF5
KDE2KTsKLSAgICAgICAgYXJnLmZpbGwoMCk7Ci0gICAgICAgIGFyZ1tpXSA9IGk7Ci0gICAgICAg
IG11bHRpcGxlNHg0YXJncy5wdXNoKGFyZyk7Ci0gICAgfQotICAgIGNoZWNrQXJyYXlzKCJmbG9h
dDR4NCIsICJyZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsgaW40ICsgaW41ICsgaW42ICsg
aW43ICsgaW44ICsgaW45ICsgaW4xMCArIGluMTEgKyBpbjEyICsgaW4xMyArIGluMTQgKyBpbjE1
OyIsIG11bHRpcGxlNHg0YXJncywgZmxvYXQ0eDRDb2x1bW5FeHBlY3RlZCk7Ci0gICAgY2hlY2tB
cnJheXMoImZsb2F0NHg0IiwgInJldHVybiBpbjBbMF07IiwgW1tmbG9hdDR4NGV4cGVjdGVkXV0s
IGZsb2F0NHg0ZXhwZWN0ZWQpOwotfTsKLQotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCAoKSA9PiB7Ci0gICAgdHJ5IHsKLSAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHdobHNsVGVz
dHMpIHsKLSAgICAgICAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCJfIikpCi0gICAgICAgICAg
ICAgICAgd2hsc2xUZXN0c1tuYW1lXSgpOwotICAgICAgICB9Ci0gICAgfSBjYXRjaCAoZSkgewot
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKLSAgICAgICAgCi0gICAgICAgIHRocm93IGU7Ci0gICAgfQotfSk7Ci0KLS8q
IEhlbHBlciBmdW5jdGlvbnMgKi8KLQotY29uc3QgY2hlY2tOdW1lcmljU2NhbGFycyA9IChib2R5
LCBhcmdWYWx1ZXMsIGV4cGVjdGVkKSA9PiB7Ci0gICAgbGV0IGZ1bmN0aW9ucyA9IFtdOwotICAg
IGxldCBzcmMgPSAiIjsKLSAgICBmb3IgKGxldCB0eXBlIG9mIG51bWVyaWNTY2FsYXJUeXBlcykg
ewotICAgICAgICBsZXQgbmFtZSwgdmFsdWVzOwotICAgICAgICBbc3JjLCBuYW1lLCB2YWx1ZXNd
ID0gYXBwZW5kU2NhbGFyRnVuY3Rpb25Ub1NvdXJjZShzcmMsIHR5cGUsIGJvZHksIGFyZ1ZhbHVl
cyk7Ci0gICAgICAgIGZ1bmN0aW9ucy5wdXNoKHsgdHlwZTogdHlwZSwgbmFtZTogbmFtZSwgYXJn
czogdmFsdWVzLCBleHBlY3RlZDogZXhwZWN0ZWQgfSk7Ci0gICAgfQotCi0gICAgZm9yIChjb25z
dCBmIG9mIGZ1bmN0aW9ucykgewotICAgICAgICBjb25zdCBjYWxsRnVuYyA9IG51bWVyaWNTY2Fs
YXJGdW5jc1tmLnR5cGVdOwotICAgICAgICB3ZWJHUFVQcm9taXNlVGVzdChhc3luYyAoKSA9PiB7
Ci0gICAgICAgICAgICByZXR1cm4gY2FsbEZ1bmMoc3JjLCBmLm5hbWUsIGYuYXJncykudGhlbihy
ZXN1bHQgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdCwg
Zi5leHBlY3RlZCwgZXBzaWxvbiwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSwgYFJldHVybiBhbiBleHBlY3RlZCAke2YudHlwZX0g
dmFsdWUuYCk7Ci0gICAgfQotfTsKLQotY29uc3QgY2hlY2tCb29scyA9IChtc2cgPSAiUmV0dXJu
IGFuIGV4cGVjdGVkIGJvb2wgdmFsdWUuIiwgYm9keSwgYXJnVmFsdWVzID0gW10sIGV4cGVjdGVk
ID0gdHJ1ZSkgPT4gewotICAgIGNvbnN0IFtzcmMsIG5hbWUsIHZhbHVlc10gPSBhcHBlbmRTY2Fs
YXJGdW5jdGlvblRvU291cmNlKCIiLCAiYm9vbCIsIGJvZHksIGFyZ1ZhbHVlcyk7IAotCi0gICAg
d2ViR1BVUHJvbWlzZVRlc3QoYXN5bmMgKCkgPT4gewotICAgICAgICByZXR1cm4gY2FsbEJvb2xG
dW5jdGlvbihzcmMsIG5hbWUsIHZhbHVlcykudGhlbihyZXN1bHQgPT4gewotICAgICAgICAgICAg
YXNzZXJ0X2VxdWFscyhyZXN1bHQsIGV4cGVjdGVkLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2
YWx1ZS4iKTsKLSAgICAgICAgfSwgZSA9PiB7Ci0gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNl
b2YgV2ViR1BVVW5zdXBwb3J0ZWRFcnJvcikpCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAg
ICAgICAgfSk7Ci0gICAgfSwgbXNnKTsKLX07Ci0KLWNvbnN0IGNoZWNrQXJyYXlzID0gKHR5cGUs
IGJvZHksIGFyZ1ZhbHVlcyA9IFtdLCBleHBlY3RlZCkgPT4gewotICAgIGxldCBpbnB1dEFyZ3Mg
PSBbXTsKLSAgICBsZXQgdmFsdWVzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdW
YWx1ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgLy8gU3VwcG9ydCBhcnJheXMgb2YgZmxvYXQ0
LCBpbmNsdWRpbmcgb25lIHdpdGggYSBzaW5nbGUgZmxvYXQ0LgotICAgICAgICBjb25zdCB0b3Rh
bExlbmd0aCA9IGFyZ1ZhbHVlc1tpXS5mbGF0KCkubGVuZ3RoOwotICAgICAgICBjb25zdCBpc0J1
ZmZlciA9IGFyZ1ZhbHVlc1tpXS5sZW5ndGggPT09IDEgfHwgdG90YWxMZW5ndGggPiBhcnJheVR5
cGVMZW5ndGhzW3R5cGVdOwotICAgICAgICBpbnB1dEFyZ3MucHVzaChgJHtpc0J1ZmZlciA/ICJk
ZXZpY2UgIiA6ICIifSR7dHlwZX0ke2lzQnVmZmVyID8gIltdIiA6ICIifSBpbiR7aX1gKTsKLSAg
ICAgICAgdmFsdWVzLnB1c2goYXJyYXlBcmdNYWtlcnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7Ci0g
ICAgfQotCi0gICAgY29uc3Qgc3JjID0gYCR7dHlwZX0gJHt0eXBlfVRlc3QoJHtpbnB1dEFyZ3Mu
am9pbigiLCAiKX0pIHsgJHtib2R5fSB9Ci0gICAgYDsKLQotICAgIHdlYkdQVVByb21pc2VUZXN0
KGFzeW5jICgpID0+IHsKLSAgICAgICAgcmV0dXJuIGFycmF5RnVuY3NbdHlwZV0oc3JjLCBgJHt0
eXBlfVRlc3RgLCB2YWx1ZXMpLnRoZW4ocmVzdWx0ID0+IHsKLSAgICAgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgYXJyYXlUeXBlTGVuZ3Roc1t0eXBlXTsgKytpKQotICAgICAgICAgICAgICAg
IGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtpXSwgZXhwZWN0ZWRbaV0sIGVwc2lsb24sICJU
ZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgICAgICB9KTsKLSAgICB9LCBgUmV0
dXJuIGFuIGV4cGVjdGVkICR7dHlwZX0gdmFsdWUuYCk7Ci19Ci0KLWNvbnN0IGFwcGVuZFNjYWxh
ckZ1bmN0aW9uVG9Tb3VyY2UgPSAoc3JjLCB0eXBlLCBib2R5LCBhcmdWYWx1ZXMpID0+IHsKLSAg
ICBjb25zdCBuYW1lID0gYCR7dHlwZX1UZXN0YDsKLQotICAgIGxldCBpbnB1dEFyZ3MgPSBbXTsK
LSAgICBsZXQgdmFsdWVzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdWYWx1ZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY29uc3QgaXNCdWZmZXIgPSBBcnJheS5pc0FycmF5KGFy
Z1ZhbHVlc1tpXSk7Ci0gICAgICAgIGlucHV0QXJncy5wdXNoKGAke2lzQnVmZmVyID8gImRldmlj
ZSAiIDogIiJ9JHt0eXBlfSR7aXNCdWZmZXIgPyAiW10iIDogIiJ9IGluJHtpfWApOwotICAgICAg
ICB2YWx1ZXMucHVzaChzY2FsYXJBcmdNYWtlcnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7Ci0gICAg
fQotCi0gICAgc3JjICs9IGAke3R5cGV9ICR7bmFtZX0oJHtpbnB1dEFyZ3Muam9pbigiLCAiKX0p
IHsgJHtib2R5fSB9Ci0gICAgYDsKLSAgICAKLSAgICByZXR1cm4gW3NyYywgbmFtZSwgdmFsdWVz
XTsKLX07Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLWV4cGVjdGVkLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFm
MjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtZ2V0ZGltZW5zaW9ucy1leHBlY3RlZC50
eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVuc2lvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE5ZjEyZjhhMWYzNmZiYThlOTNkM2E3MWFiYzA3ZmY0MDI2MjFmODQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVuc2lvbnMuaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDgwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08
c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSldCi1j
b21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJlIDog
cmVnaXN0ZXIodDApLCBkZXZpY2UgdWludFtdIHRoZUJ1ZmZlciA6IHJlZ2lzdGVyKHUxKSkgewot
ICAgIHVpbnQgd2lkdGg7Ci0gICAgdWludCBoZWlnaHQ7Ci0gICAgdWludCBudW1iZXJPZkxldmVs
czsKLSAgICBHZXREaW1lbnNpb25zKHRoZVRleHR1cmUsIDAsICZ3aWR0aCwgJmhlaWdodCwgJm51
bWJlck9mTGV2ZWxzKTsKLSAgICB0aGVCdWZmZXJbMF0gPSB3aWR0aDsKLSAgICB0aGVCdWZmZXJb
MV0gPSBoZWlnaHQ7Ci0gICAgdGhlQnVmZmVyWzJdID0gbnVtYmVyT2ZMZXZlbHM7Ci19Ci1gOwot
Ci1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKLSAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5
cGU6ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBj
b25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRH
cm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxh
eW91dH07Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQ
aXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHRleHR1cmVE
ZXNjcmlwdG9yID0ge3NpemU6IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDogMX0sIGZvcm1h
dDogInJnYmE4dW5vcm0iLCB1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlNBTVBMRUR9OwotICAgIGNv
bnN0IHRleHR1cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgdGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAg
ICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDMsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJp
bmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplOiBVaW50MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDN9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmdzID0gW3tiaW5kaW5n
OiAwLCByZXNvdXJjZTogdGV4dHVyZVZpZXd9LCB7YmluZGluZzogMSwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9XTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogYmluZEdyb3VwQmluZGluZ3N9OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJl
Z2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwotICAg
IGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9
IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChb
Y29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQg
cmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRzVWludDMyQXJy
YXkgPSBuZXcgVWludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0
c1VpbnQzMkFycmF5WzBdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c1VpbnQzMkFycmF5WzFdID09
IDIKLSAgICAgICAgJiYgcmVzdWx0c1VpbnQzMkFycmF5WzJdID09IDEpCi0gICAgICAgIHRlc3RQ
YXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0
c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAg
ICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpT
VGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtbG9hZC1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhl
MjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdGV4dHVyZXMtbG9hZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTRm
ZTBmYzg0ZTlkNDI2Nzc4YzI4MTE2YmVlMmFmM2E0YWI2ZjA0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0
dXJlcy1sb2FkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotPCFET0NUWVBF
IGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRo
PSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3Vy
Y2UgPSBgCi12ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRy
aWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQotZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKFRleHR1cmUyRDxmbG9hdDQ+IHRoZVRleHR1cmUg
OiByZWdpc3Rlcih0MCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBMb2FkKHRoZVRleHR1
cmUsIGludDIoMCwgMCkpOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNv
bnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
Ci0gICAgCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNl
dDogW2F0dHJpYnV0ZTBdfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmls
aXR5OiA3LCB0eXBlOiAic2FtcGxlZC10ZXh0dXJlIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21l
bnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0
ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91
dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNy
ZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVh
dGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9
IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzNdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3
XSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEwXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxM10gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAg
IHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplOiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAy
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodGV4dHVyZURhdGFCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5
KHRleHR1cmVEYXRhQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWlu
dDhBcnJheVswXSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0gPSAy
NTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzJdID0gMjU1OwotICAgIHRleHR1
cmVEYXRhQnVmZmVyVWludDhBcnJheVszXSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVp
bnQ4QXJyYXlbNF0gPSAxMjg7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVdID0g
MTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs2XSA9IDEyODsKLSAgICB0ZXh0
dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbN10gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJV
aW50OEFycmF5WzhdID0gMTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5XSA9
IDEyODsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTBdID0gMTI4OwotICAgIHRl
eHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZm
ZXJVaW50OEFycmF5WzEyXSA9IDEyODsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlb
MTNdID0gMTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAxMjg7Ci0g
ICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzE1XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0
YUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6ZTog
e3dpZHRoOiAyLCBoZWlnaHQ6IDIsIGRlcHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIsIHVz
YWdlOiBHUFVUZXh0dXJlVXNhZ2UuU0FNUExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZFUl9E
U1R9OwotICAgIGNvbnN0IHRleHR1cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgdGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5ncyA9IFt7YmluZGluZzogMCwgcmVz
b3VyY2U6IHRleHR1cmVWaWV3fV07Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IGJpbmRHcm91cEJpbmRpbmdzfTsKLSAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsK
LSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1
bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWlu
KHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hh
aW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91
dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0KLSAgICBjb25zdCBi
dWZmZXJDb3B5VmlldyA9IHtidWZmZXI6IHRleHR1cmVEYXRhQnVmZmVyLCByb3dQaXRjaDogVWlu
dDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAyLCBpbWFnZUhlaWdodDogVWludDhBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAyICogMn07Ci0gICAgY29uc3QgdGV4dHVyZUNvcHlW
aWV3ID0ge3RleHR1cmU6IHRleHR1cmV9OwotICAgIGNvbnN0IGNvcHlTaXplID0ge3dpZHRoOiAy
LCBoZWlnaHQ6IDIsIGRlcHRoOiAxfTsKLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9U
ZXh0dXJlKGJ1ZmZlckNvcHlWaWV3LCB0ZXh0dXJlQ29weVZpZXcsIGNvcHlTaXplKTsKLQotICAg
IGNvbnN0IGNsZWFyQ29sb3IgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3Qg
Y29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29s
dmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJD
b2xvcn1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNv
bnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29k
ZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0KLWlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXRleHR1cmVzLXNhbXBsZS1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtc2FtcGxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtc2Ft
cGxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDVlNDc3MDRmZjFhMGFl
ZGU0NGIyNjFjNjA2MDliYWRkOWU2N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLXNhbXBsZS5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLWZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJlIDogcmVnaXN0ZXIo
dDApLCBzYW1wbGVyIHRoZVNhbXBsZXIgOiByZWdpc3RlcihzMSkpIDogU1ZfVGFyZ2V0IDAgewot
ICAgIHJldHVybiBTYW1wbGUodGhlVGV4dHVyZSwgdGhlU2FtcGxlciwgZmxvYXQyKDAuNSwgMC41
KSk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLSAgICAKLSAgICBj
b25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsK
LSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRl
MF19OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0
ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJz
YW1wbGVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2
ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
ciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAg
Y29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZl
cnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsy
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAw
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsK
LQotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50OEFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAyLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB0ZXh0
dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodGV4dHVyZURhdGFCdWZmZXJEZXNj
cmlwdG9yKTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHRleHR1cmVEYXRh
QnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KHRleHR1cmVEYXRhQnVmZmVyQXJyYXlC
dWZmZXIpOwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVswXSA9IDI1NTsKLSAgICB0
ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZm
ZXJVaW50OEFycmF5WzJdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsz
XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbNF0gPSAyNTU7Ci0gICAg
dGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVm
ZmVyVWludDhBcnJheVs2XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlb
N10gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzhdID0gMjU1OwotICAg
IHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1
ZmZlclVpbnQ4QXJyYXlbMTBdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJh
eVsxMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzEyXSA9IDI1NTsK
LSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTNdID0gMjU1OwotICAgIHRleHR1cmVE
YXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50
OEFycmF5WzE1XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6ZToge3dpZHRoOiAyLCBoZWlnaHQ6IDIsIGRl
cHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIsIHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuU0FN
UExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZFUl9EU1R9OwotICAgIGNvbnN0IHRleHR1cmUg
PSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdGV4
dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBzYW1w
bGVyRGVzY3JpcHRvciA9IHttYWdGaWx0ZXI6ICJsaW5lYXIiLCBtaW5GaWx0ZXI6ICJsaW5lYXIi
fTsKLSAgICBjb25zdCBzYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoc2FtcGxlckRlc2Ny
aXB0b3IpOwotCi0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZ3MgPSBbe2JpbmRpbmc6IDAsIHJl
c291cmNlOiB0ZXh0dXJlVmlld30sIHtiaW5kaW5nOiAxLCByZXNvdXJjZTogc2FtcGxlcn1dOwot
ICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQs
IGJpbmRpbmdzOiBiaW5kR3JvdXBCaW5kaW5nc307Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2
aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVz
Y3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2Fw
Q2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsK
LSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7
Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQotCi0gICAgY29uc3QgYnVmZmVyQ29weVZpZXcgPSB7YnVmZmVy
OiB0ZXh0dXJlRGF0YUJ1ZmZlciwgcm93UGl0Y2g6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1F
TlQgKiA0ICogMiwgaW1hZ2VIZWlnaHQ6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0
ICogMiAqIDJ9OwotICAgIGNvbnN0IHRleHR1cmVDb3B5VmlldyA9IHt0ZXh0dXJlOiB0ZXh0dXJl
fTsKLSAgICBjb25zdCBjb3B5U2l6ZSA9IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDogMX07
Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShidWZmZXJDb3B5Vmlldywg
dGV4dHVyZUNvcHlWaWV3LCBjb3B5U2l6ZSk7Ci0KLSAgICBjb25zdCBjbGVhckNvbG9yID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3J9XTsKLSAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRl
eEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKLQotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0g
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBm
dW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJheS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5
LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1
NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lv
bmFsLWFycmF5LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFT
UyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5Lmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTM1OWI2YzhmMjExY2IwODkxNTZi
N2JkYWUxZTk3OGZlYTRiMjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJheS5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdm9pZCBm
aWxsKHRocmVhZCBmbG9hdFsxMF1bXSBhcnJheSwgZmxvYXRbMTBdIHZhbHVlKSB7Ci0gICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgYXJy
YXlbaV0gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBhcnJh
eSwgZmxvYXQgdmFsdWUpIHsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7
IGkgPSBpICsgMSkgewotICAgICAgICBhcnJheVtpXSA9IHZhbHVlOwotICAgIH0KLX0KLQotYm9v
bCBjb250YWlucyh0aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0IHZhbHVlKSB7Ci0gICAg
Zm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAg
Zm9yICh1aW50IGogPSAwOyBqIDwgYXJyYXlbal0ubGVuZ3RoOyBqID0gaiArIDEpIHsKLSAgICAg
ICAgICAgIGlmIChhcnJheVtpXVtqXSAhPSB2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgY29u
dGFpbnModGhyZWFkIGZsb2F0W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7Ci0gICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgaWYgKGFycmF5
W2ldICE9IHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0
ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFk
SUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Ci0gICAgZmxvYXRbMTBdWzVdIGFycmF5OwotICAg
IGlmIChhcnJheS5sZW5ndGggIT0gNSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghY29udGFp
bnMoQGFycmF5LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yICh1aW50IGkgPSAwOyBp
IDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgZmxvYXRbMTBdIHZhbHVlOwot
ICAgICAgICBmaWxsKEB2YWx1ZSwgZmxvYXQoaSkpOwotICAgICAgICBhcnJheVtpXSA9IHZhbHVl
OwotICAgIH0KLQotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkg
KyAxKSB7Ci0gICAgICAgIGZsb2F0WzEwXSB2YWx1ZSA9IGFycmF5W2ldOwotICAgICAgICBpZiAo
IWNvbnRhaW5zKEB2YWx1ZSwgZmxvYXQoaSkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNl
KSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9
OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3ti
aW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAg
IGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBw
aXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91
dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtj
b21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVz
Y3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVO
VCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OwotICAg
IGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFy
cmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOwotICAgIGJ1ZmZlci51
bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1Qg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qg
YnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OwotICAgIGNvbnN0
IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9
OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlv
dXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25z
dCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQot
ICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNC
dWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdy
b3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEs
IDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVy
ID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBsZXQgcmVzdWx0c0lu
dDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChy
ZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAg
ZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7
Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewot
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVz
dEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rp
b24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNTc4Njg1YmQwY2MzNThlM2M4YzU1NWUwMWVjZGY3MmFhODYyNTdmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC10eXBlLW1pc21hdGNoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBA
QAotCi1QQVNTIHR5cGVNaXNtYXRjaFJldHVybiAKLVBBU1MgdHlwZU1pc21hdGNoVmFyaWFibGVE
ZWNsIAotUEFTUyB0eXBlTWlzbWF0Y2hBc3NpZ25tZW50IAotUEFTUyB0eXBlTWlzbWF0Y2hSZXR1
cm5QYXJhbSAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUtbWlz
bWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10eXBlLW1pc21hdGNoLmh0bWwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZWQyNDQzYzZkOTNkMmJlM2JhYjlmNzYy
YzZiNmRiYWI5NDQ4OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUtbWlzbWF0Y2guaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBj
aGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0
bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMudHlwZU1pc21hdGNoUmV0dXJuID0gYXN5bmMgKCkgPT4KLXsKLSAgICBh
d2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAxMC41OwotICAgICAgICAgICAgfQotICAg
ICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy50eXBlTWlzbWF0Y2hWYXJpYWJsZURlY2wgPSBhc3lu
YyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAg
dm9pZCBmb28odWludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB5ID0g
eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMudHlwZU1pc21h
dGNoQXNzaWdubWVudCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbyh1aW50IHgpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaW50IHk7Ci0gICAgICAgICAgICAgICAgeSA9IHg7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnR5cGVNaXNtYXRjaFJldHVyblBhcmFtID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIGludCBmb28odWludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biB4OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci0KLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXVpbnQtYml0d2lzZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmNkNjg0ZjUzNTkxMTViMDQ0MjY1MjNlZTY2ZGU5MjA0NzhmMGY1OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBA
QAotCi1QQVNTIHVpbnRCaXRBbmQgCi1QQVNTIHVpbnRCaXRPciAKLVBBU1MgdWludEJpdFhvciAK
LVBBU1MgdWludEJpdE5vdCAKLVBBU1MgdWludExTaGlmdCAKLVBBU1MgdWludFJTaGlmdCAKLVBB
U1MgdWludFNpbXBsZU1hdGggCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC11aW50LWJpdHdpc2UuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11aW50LWJpdHdp
c2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1OTEzOTlhZGE2ZjFjNTQ2
YTk2ZDM1Y2JhZTNjODRhYTc3YjVjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdWludC1iaXR3aXNlLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQg
c3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3
aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMudWludEJpdEFuZCA9IGFzeW5jICgpID0+IHsK
LSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhICYgYjsKLSAgICAgICAgfQotICAgIGA7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZVVpbnQoMSksIG1ha2VVaW50KDcpXSksIDEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KSwgbWFrZVVp
bnQoNDIpXSksIDQyKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludChNYXRoLnBvdygyLCAzMikgLSAxKSwgbWFrZVVpbnQo
TWF0aC5wb3coMiwgMzIpIC0gNyldKSwgNDI5NDk2NzI4OSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1ha2VV
aW50KDg1NzMyKV0pLCAwKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0T3IgPSBhc3luYyAoKSA9
PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBi
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSB8IGI7Ci0gICAgICAgIH0KLSAgICBg
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VVaW50KDEpLCBtYWtlVWludCg3KV0pLCA3KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg2NTUzNSksIG1h
a2VVaW50KDQyKV0pLCA2NTUzNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1h
a2VVaW50KE1hdGgucG93KDIsIDMyKSAgLSA3KV0pLCA0Mjk0OTY3Mjk1KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgw
KSwgbWFrZVVpbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0WG9y
ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICB1aW50IGZvbyh1
aW50IGEsIHVpbnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgXiBiOwotICAg
ICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgxKSwgbWFrZVVpbnQoNyldKSwgNik7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVp
bnQoNjU1MzUpLCBtYWtlVWludCg0MildKSwgNjU0OTMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIs
IDMyKSAtIDEpLCBtYWtlVWludChNYXRoLnBvdygyLCAzMikgLSA3KV0pLCA2KTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWlu
dCgwKSwgbWFrZVVpbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0
Tm90ID0gYXN5bmMgKCkgPT4geyAKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgdWludCBm
b28odWludCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gfmE7Ci0gICAgICAgIH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VVaW50KDEpXSksIDQyOTQ5NjcyOTQpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KV0p
LCA0Mjk0OTAxNzYwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludChNYXRoLnBvdygyLCAzMikgLSAxKV0pLCAwKTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlVWludCgwKV0pLCA0Mjk0OTY3Mjk1KTsKLX0KLQotd2hsc2xUZXN0cy51aW50TFNoaWZ0ID0g
YXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICB1aW50IGZvbyh1aW50
IGEsIHVpbnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKLSAgICAg
ICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMSksIG1ha2VVaW50KDcpXSksIDEyOCk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVp
bnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAyNjIxNDApOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIs
IDMyKSAtIDEpLCBtYWtlVWludCg1KV0pLCA0Mjk0OTY3MjY0KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFr
ZVVpbnQoMyldKSwgMCk7Ci19OwotCi13aGxzbFRlc3RzLnVpbnRSU2hpZnQgPSBhc3luYyAoKSA9
PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBi
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSA+PiBiOwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlVWludCgxKSwgbWFrZVVpbnQoNyldKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBt
YWtlVWludCgyKV0pLCAxNjM4Myk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1h
a2VVaW50KDUpXSksIDEzNDIxNzcyNyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWlu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1ha2VVaW50KDMpXSksIDAp
OwotfTsKLQotd2hsc2xUZXN0cy51aW50U2ltcGxlTWF0aCA9IGFzeW5jICgpID0+IHsKLSAgICBs
ZXQgcHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCArIHk7IH0i
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCAxMik7Ci0KLSAgICBwcm9ncmFtID0gInVp
bnQgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4IC0geTsgfSI7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyks
IG1ha2VVaW50KDUpXSksIDIpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDUpLCBtYWtlVWludCg3KV0pLCA0Mjk0OTY3
Mjk0KTsKLQotICAgIHByb2dyYW0gPSAidWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJu
IHggKiB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQoNSldKSwgMzUpOwotCi0gICAgLy8g
RklYTUU6IG1ha2UgdGhpcyB3b3JrOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk5NjAyCi0gICAgLy8gcHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkg
eyByZXR1cm4geCAvIHk7IH0iOwotICAgIC8vIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCgyKV0pLCAzKTsK
LX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFi
bGUtMi1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0
NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRl
ZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAg
QEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExF
VEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQt
dmFyaWFibGUtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQt
dmFyaWFibGUtMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmU4NTJmMzk5
ZTlhZGIwNTAxNzg0OTA2MjVjOTFiMDg1YjAyYjllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZp
bmVkLXZhcmlhYmxlLTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291
cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRl
cihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6
IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDQgdmVjID0gZmxvYXQ0KHgseCx4LHgp
OwotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgY29uc3QgYWRhcHRlciA9
IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKLSAgICBjb25zdCBkZXZpY2Ug
PSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKLQotICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29t
cHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotfQotCi13aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0UGFz
c2VkKCIiKTsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsK
LX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgp
OwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3
ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdXNlLXVuZGVmaW5lZC12YXJpYWJsZS1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhN2NkNjIzNjU3NTQ5YTM4Yzk2NWFhY2FkYTlkYWI3MDUx
YTM1MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDUxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJv
ZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwg
MSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiBy
ZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAg
ICBmbG9hdCBmb287Ci0gICAgaWYgKGZvbykgewotICAgICAgICB4ID0geCArIDE7Ci0gICAgfQot
fQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgY29uc3QgYWRhcHRlciA9IGF3
YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKLSAgICBjb25zdCBkZXZpY2UgPSBh
d2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKLQotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlw
ZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmlu
ZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
UGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5l
TGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0
ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotfQotCi13aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7
Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIp
OwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsK
LTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXZhcmlhYmxlLXNoYWRvd2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWRlZTViNTg5YjQ3Yzg1YWIyYTQ4MDU5MWYwNzc3MjFmZWUwMjk4MS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dAorKysgL2Rldi9u
dWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIHZhcmlhYmxlU2hhZG93aW5nIAotCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYzFhNDM1ZGNmMTA1ZWZiNWY2ZTYyMTBmNzM2ZWE2MDE3
ZjcyZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZhcmlhYmxlLXNoYWRvd2luZy5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5U
ZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3Rz
LnZhcmlhYmxlU2hhZG93aW5nID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAK
LSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5OwotICAgICAg
ICAgICAgaW50IHggPSA3OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4ID0g
ODsKLSAgICAgICAgICAgICAgICB5ID0geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiB5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA4KTsKLQotICAgIHByb2dyYW0gPSBgCi0g
ICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAgICAg
ICAgIGludCB4ID0gNzsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IDg7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB5ID0geDsKLSAgICAgICAgICAgIHJldHVybiB5
OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7
Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC12ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC12
ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjAwZWQwOWFmOTkyMDM4MDJiNjM5MTZjNmE1NjgwMWE3NDU2ZDAxOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LQotUEFTUyB2ZWN0b3JUeXBlU3ludGF4IAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtdmVjdG9yLXN5bnRheC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZl
Y3Rvci1zeW50YXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxNWYzOTJi
MWRmOWYyNzdmODk4MGU5M2RiNDY1YThjMjk5OWQxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmVjdG9yLXN5
bnRheC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJq
cy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMudmVjdG9yVHlwZVN5bnRheCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28yKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50MiB4OwotICAgICAgICAgICAgdmVjdG9yPGludCwgMj4geiA9IGludDIoMywgNCk7Ci0gICAg
ICAgICAgICB4ID0gejsKLSAgICAgICAgICAgIHJldHVybiB4Lnk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbnQgZm9vMygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDMgeDsKLSAgICAgICAg
ICAgIHZlY3RvcjxpbnQsIDM+IHogPSBpbnQzKDMsIDQsIDUpOwotICAgICAgICAgICAgeCA9IHo7
Ci0gICAgICAgICAgICByZXR1cm4geC56OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGZvbzQo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQ0IHg7Ci0gICAgICAgICAgICB2ZWN0b3I8aW50
LDQ+IHogPSBpbnQ0KDMsIDQsIDUsIDYpOwotICAgICAgICAgICAgeCA9IHo7Ci0gICAgICAgICAg
ICByZXR1cm4geC53OwotICAgICAgICB9YDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgNSk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDYp
OwotCi0gICAgcHJvZ3JhbSA9IGAKLSAgICAgICAgdHlwZWRlZiBpID0gaW50OwotICAgICAgICBp
bnQgZm9vMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDIgeDsKLSAgICAgICAgICAgIHZl
Y3RvcjxpLCAyPiB6ID0gaW50MigzLCA0KTsKLSAgICAgICAgICAgIHggPSB6OwotICAgICAgICAg
ICAgcmV0dXJuIHgueTsKLSAgICAgICAgfWA7Ci0KLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgNCk7Ci19Ci1ydW5UZXN0cyh3aGxz
bFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxi
b2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOwotZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFz
KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWsuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY5MDYzMDNhMjhiNWY0NGJhMThiZGJjMzQ0ZDg0ZmQ4ODE5OWMwOTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXdoaWxlLWxvb3AtYnJlYWsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNo
YWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0
ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCks
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQot
ICAgIGJvb2wgYiA9IHRydWU7Ci0gICAgdWludCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IDEwKSB7
Ci0gICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBzaGFkZSA9IHNoYWRlICsgMS4wOwotICAgICAgICBpID0gaSArIDE7Ci0gICAgfQotCi0gICAg
cmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBm
bG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlv
bjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUx
ID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAg
IGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3Qg
aW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVm
ZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29u
c3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRl
eEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOwotCi0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
N10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51
bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZP
Uk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0g
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0
fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBi
dWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25z
dCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotCi1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0g
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBm
dW5jdGlvbigpIHsKLSAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLWV4
cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMyMWYz
MzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29u
dGludWUtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29u
dGludWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVl
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlN2RiOWFiM2UyYTM5NzIyMTc5
ZjIwMWI0ZjZhNzgzNjBmOWU5ZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0
cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAg
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRydWU7
Ci0gICAgdWludCBpID0gMDsKLSAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAwLjEsIGkgPCAx
MCkpIHsKLSAgICAgICAgaWYgKGIpIHsKLSAgICAgICAgICAgIGkgPSBpICsgMTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHNoYWRlID0gMC4wOwotICAgIH0KLQot
ICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRl
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1
cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9u
IHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNv
bnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVy
dGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZl
VG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0
ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhh
QmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JT
dGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3
cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRo
U3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0cmli
dXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsK
LSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3Jt
LWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4xOwotCi0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9
IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs5XSA9IDAuMTsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMTsK
LQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4xOwotICAgIHZlcnRleEJ1ZmZl
cjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
OiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5V
TklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIu
bWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsK
LQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6
ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0g
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
LSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctYXJndW1lbnQtbGVuZ3RoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5n
dGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmNlMzY5NDU4
MTk4NTdhZmUxZDA0MTczNGRjMGQxZTE1MTJiMjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1
bWVudC1sZW5ndGgtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAot
Ci1QQVNTIGJpdEFuZFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGJpdE5vdFdyb25nQXJndW1l
bnRMZW5ndGggCi1QQVNTIGJpdE9yV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgYml0WG9yV3Jv
bmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZGVjV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZGl2
aWRlV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZG90T3BlcmF0b3JTZXR0ZXJXcm9uZ0FyZ3Vt
ZW50TGVuZ3RoIAotUEFTUyBkb3RPcGVyYXRvcldyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGdy
ZWF0ZXJFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGdyZWF0ZXJXcm9uZ0FyZ3VtZW50
TGVuZ3RoIAotUEFTUyBpbmNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAotUEFTUyBpbmRleE9wZXJhdG9y
U2V0dGVyV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgaW5kZXhPcGVyYXRvcldyb25nQXJndW1l
bnRMZW5ndGggCi1QQVNTIGxTaGlmdFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIG1pbnVzV3Jv
bmdBcmd1bWVudExlbmd0aCAKLVBBU1MgbW9kdWxvV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1Mg
cGx1c1dyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIHJTaGlmdFdyb25nQXJndW1lbnRMZW5ndGgg
Ci1QQVNTIHRpbWVzV3JvbmdBcmd1bWVudExlbmd0aCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXdyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXdyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ZWM0MTkxYjEwZjVjMGFhZWNjYmZmNTY0NWQ0MzNjZmU2Mjc1ZDkyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDM2NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11
dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qg
aW50IGJpdCBtYXRoLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNz
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmJpdEFu
ZFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGlu
dCBvcGVyYXRvciYoRm9vKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsg
fQotICAgICAgICAgICAgaW50IG9wZXJhdG9yJihGb28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAg
ICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAg
ICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yJihGb28sIEZvbywg
Rm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3Rz
LmJpdE5vdFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yfigpIHsgcmV0dXJu
IDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0
b3J+KEZvbywgRm9vKSB7IHJldHVybiA1MzQ7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQot
d2hsc2xUZXN0cy5iaXRPcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAg
IGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0K
LSAgICAgICAgICAgIGludCBvcGVyYXRvcnwoKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsK
LSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yfChGb28pIHsgcmV0dXJuIDUz
NDsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9y
fChGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19
Ci13aGxzbFRlc3RzLmJpdFhvcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgotewot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9y
XigpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAg
ICBpbnQgb3BlcmF0b3JeKEZvbykgeyByZXR1cm4gNTM0OyB9Ci0gICAgICAgIGApOwotICAgICAg
ICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBG
b28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3JeKEZvbywgRm9vLCBGb28pIHsgcmV0dXJu
IDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVzdHMuZGVjV3JvbmdBcmd1
bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3ItLSgpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAg
IGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3ItLShGb28sIEZvbykg
eyByZXR1cm4gNzY7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy5kaXZp
ZGVXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvci8oKSB7IHJldHVybiAzMjsg
fQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBg
Ci0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yLyhG
b28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yLyhGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmRvdE9wZXJhdG9yU2V0dGVyV3JvbmdBcmd1bWVu
dExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBg
Ci0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgRm9vIG9wZXJhdG9yLmZv
bz0oKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgRm9vIG9wZXJhdG9yLmZvbz0oRm9vKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAg
ICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsgfQotICAgICAgICAgICAgRm9vIG9wZXJhdG9yLmZvbz0oRm9vLCBpbnQsIGludCkg
eyByZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy5kb3RP
cGVyYXRvcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbygpIHsgcmV0
dXJuIDQyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3Bl
cmF0b3IuZm9vKEZvbywgaW50KSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAg
Ci19Ci13aGxzbFRlc3RzLmdyZWF0ZXJFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAo
KSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj49KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsg
fQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQotICAg
ICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KEZvbywg
Rm9vLCBGb28pIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hs
c2xUZXN0cy5ncmVhdGVyV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAg
YXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPigp
IHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3I+KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAg
ICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsgfQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj4oRm9vLCBGb28sIEZvbykgeyByZXR1
cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmluY1dyb25n
QXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKysoKSB7IHJldHVybiAzMjsgfQotICAg
ICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yKysoRm9vLCBG
b28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVzdHMu
aW5kZXhPcGVyYXRvclNldHRlcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgotewot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9y
W109KCkgeyByZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCkgeyBy
ZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgaW50KSB7IHJldHVy
biA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCBpbnQsIGludCwgaW50KSB7
IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmluZGV4
T3BlcmF0b3JXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcltdKCkgeyByZXR1
cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oaW50KSB7IHJldHVybiA0MjsgfQot
ICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0g
ICAgICAgICAgICBpbnQgb3BlcmF0b3JbXShpbnQsIGludCwgaW50KSB7IHJldHVybiA0MjsgfQot
ICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmxTaGlmdFdyb25nQXJndW1lbnRM
ZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAot
ICAgICAgICAgICAgaW50IG9wZXJhdG9yPDwoKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsK
LSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPDwoRm9vKSB7IHJldHVybiA1
MzQ7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAg
ICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRv
cjw8KEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAK
LX0KLXdobHNsVGVzdHMubWludXNXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRv
ci0oKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yLShGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLm1vZHVsb1dyb25nQXJndW1lbnRMZW5ndGggPSBh
c3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yJSgpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28g
eyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IlKEZvbykgeyByZXR1cm4gNTM0OyB9Ci0gICAg
ICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IlKEZvbywgRm9v
LCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVz
dHMucGx1c1dyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKygpIHsgcmV0dXJu
IDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0
b3IrKEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAK
LX0KLXdobHNsVGVzdHMuclNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0
b3I+PigpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAg
ICAgICBpbnQgb3BlcmF0b3I+PihGb28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAgICBgKTsKLSAg
ICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPj4oRm9vLCBGb28sIEZvbykgeyBy
ZXR1cm4gNzY7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy50aW1lc1dy
b25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKigpIHsgcmV0dXJuIDMyOyB9Ci0g
ICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IqKEZvbykg
eyByZXR1cm4gNTM0OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBp
bnQgb3BlcmF0b3IqKEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwot
ICAgICAgICAKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTUxOGYxYjU5ZDY0NjJmYTY2NTdiMTU1
NzJhNDI4YjhkNTFjYWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy1leHBlY3RlZC50eHQK
KysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotUEFTUyBkZWNXcm9uZ1R5cGVzIAotUEFT
UyBpbmNXcm9uZ1R5cGVzIAotUEFTUyBncmVhdGVyVGhhbldyb25nUmV0dXJuVHlwZSAKLVBBU1Mg
Z3JlYXRlckVxdWFsV3JvbmdSZXR1cm5UeXBlIAotUEFTUyBpbmRleFNldHRlcldpdGhNaXNtYXRj
aGVkVHlwZSAKLVBBU1Mgc2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlIAotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC13cm9uZy10eXBlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyZTFhMTYxNjkyOWFiM2IxYWIxYThkODM2NTFkZGVjNWY4YTc3NTUxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC13cm9uZy10eXBlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IGludCBiaXQgbWF0aC48L3RpdGxlPgot
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5kZWNXcm9uZ1R5cGVzID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVy
YXRvci0tKGZsb2F0KSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci0K
LXdobHNsVGVzdHMuaW5jV3JvbmdUeXBlcyA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3IrKyhmbG9hdCkgeyBy
ZXR1cm4gMzI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13aGxzbFRlc3RzLmdyZWF0
ZXJUaGFuV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcj4oaW50IGEsIGludCBiKSB7
IHJldHVybiBhICsgYjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci0KLXdobHNsVGVzdHMu
Z3JlYXRlckVxdWFsV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcj49KGludCBhLCBp
bnQgYikgeyByZXR1cm4gYSArIGI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13aGxz
bFRlc3RzLmluZGV4U2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAg
ICBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGZsb2F0IG9wZXJhdG9yW10oaW50
LCB1aW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1LjQzOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgdWludCwgaW50KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnNldHRlcldpdGhNaXNtYXRjaGVkVHlwZSA9
IGFzeW5jICgpID0+Ci17Ci0gICAgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBm
bG9hdCBvcGVyYXRvci5mb28oaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiA1LjQzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbz0o
aW50LCBpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9z
Y3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIy
ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZTlkODNkYmNiMzZiMmY1ODBjZjY5ZjdiYThk
NzBlMjI4Y2QzMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotc3RydWN0
IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLXN0cnVjdCBCYXIgewotICAgIGZsb2F0IHk7
Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeTI7Ci0gICAgZmxvYXQgeTM7Ci0gICAgZmxvYXQg
eTQ7Ci0gICAgZmxvYXQgeTU7Ci0gICAgZmxvYXQgeTY7Ci0gICAgZmxvYXQgeTc7Ci0gICAgZmxv
YXQgeTg7Ci0gICAgZmxvYXQgeTk7Ci0gICAgZmxvYXQgeTEwOwotICAgIGZsb2F0IHkxMTsKLSAg
ICBmbG9hdCB5MTI7Ci0gICAgZmxvYXQgeTEzOwotICAgIGZsb2F0IHkxNDsKLSAgICBmbG9hdCB5
MTU7Ci0gICAgZmxvYXQgeTE2OwotICAgIGZsb2F0IHkxNzsKLSAgICBmbG9hdCB5MTg7Ci0gICAg
ZmxvYXQgeTE5OwotICAgIGZsb2F0IHkyMDsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBCYXIgYmFyOwotCi0gICAg
cmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gYmFyLnkyMDsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJu
IGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25z
dCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRv
cG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUg
PSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJs
ZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3Rh
dGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3Jp
dGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0
ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0
aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0
ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0g
ICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25z
dCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBj
b25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1i
dWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9n
eSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZl
cnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAw
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0K
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
LnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5J
Rk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZm
ZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1h
cFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VC
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0K
LSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6
IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAg
IGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3Jt
In07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dh
cENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5n
ZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0
VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIg
PSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7
cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7
YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRP
cDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29u
c3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rl
c2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0g
ICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBh
c3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAo
MCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAs
IFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12
YWx1ZXMtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmODY5
YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1p
bml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3Qmxh
Y2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8t
aW5pdGlhbGl6ZS12YWx1ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEy
NTY4ZmFjYzEyZTM4MDkyNjk5M2M2ZTQyNDU2NTU4NzZlN2U5Mi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAK
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2Fu
dmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qg
c2hhZGVyU291cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLXRo
cmVhZCBmbG9hdCogcHRyKCkgewotICAgIGZsb2F0IGxvY2FsOwotICAgIHJldHVybiAmbG9jYWw7
Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0
dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQg
cmVzdWx0OwotCi0gICAgdGhyZWFkIGZsb2F0KiBwID0gcHRyKCk7Ci0gICAgKnAgPSAxLjA7Ci0g
ICAgZmxvYXQgdmFsdWUgPSAqcHRyKCk7IC8vIGNhbGxpbmcgcHRyKCkgemVybyBpbml0aWFsaXpl
cy4KLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9
IHZhbHVlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAg
ICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwot
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3Qg
YXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6
IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwot
ICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9
OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1
bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91
cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBh
d2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZm
ZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBd
ID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9
IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9y
KTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VC
dWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5t
YXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZl
ciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCBy
ZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9
IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07
Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBE
ZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1
Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJn
cmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBD
aGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dh
cENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcg
PSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0
IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1l
bnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVs
bCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsK
LSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5k
ZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
UmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJp
bmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLQotaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAg
IH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Y2Ew
ZGQzYmJhZjhjZDEwMTMxMmIwOGVhNzljOGNlODFmODZjNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi12ZXJ0ZXgg
ZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0
IGkgOiBhdHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlvbjsK
LX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNW
X1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci1gOwot
Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFz
eW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1
ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29u
c3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rl
cml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAg
IGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAg
Y29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBj
b2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAg
IGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLSAgICAKLSAgICBjb25zdCBhdHRyaWJ1
dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKLSAgICBjb25zdCBh
dHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OwotICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07Ci0g
ICAgY29uc3QgaW5wdXQxID0ge3N0cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMV19
OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDAsIGlucHV0MV07Ci0gICAgY29uc3QgdmVydGV4
SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwg
cHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRo
U3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRl
clBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIo
dmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1
ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBB
cnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNd
ID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzldID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEw
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxM10gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAgIHZlcnRleEJ1
ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjEgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsK
LSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIx
Lm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1
ZmZlcjFGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlb
MV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOwotICAgIHZlcnRl
eEJ1ZmZlcjFGbG9hdDMyQXJyYXlbM10gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsK
LQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3lu
YygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAg
Y29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmlu
ZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91
cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dh
cENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBj
b25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNj
cmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRU
ZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNy
ZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5j
cmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAw
LCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50
OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIi
LCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9
IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCBy
ZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQ
YXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVy
UGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3Jv
dXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1
ZmZlcjAsIHZlcnRleEJ1ZmZlcjFdLCBbMCwgMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9
KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJiaXRyYXJ5LXZlcnRleC1h
dHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvYXJiaXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJpdHJhcnktdmVydGV4LWF0
dHJpYnV0ZS1sb2NhdGlvbnMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJpdHJhcnktdmVydGV4
LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJp
dHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWEwNDE0
N2Q1MDEwNjVjODQyYmFhY2YxM2IzMzdlZGExNDYwOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FyYml0cmFyeS12ZXJ0ZXgtYXR0cmlidXRlLWxvY2F0aW9u
cy5odG1sCkBAIC0wLDAgKzEsMTMyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMTczKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoNDk4
KSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDAp
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUs
IDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNv
bnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDE3MywgZm9ybWF0OiAiZmxvYXQ0In07
CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogNDk4LCBmb3JtYXQ6ICJm
bG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRy
aWJ1dGVTZXQ6IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOwor
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MzYyYzJhODIzZTY2MjZhNjU4OTYyMDE0YzhhNzdlMzE3NDhj
MmRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FyZ3VtZW50
LWV2YWx1YXRpb24tb3JkZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGV2
YWx1YXRpb25PcmRlckZvckFyZ3VtZW50cyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2FyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXIuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBl
YThkMTY1ZDBmMGQyZTAwODYxYjc1OGM0MjhiNjEyZTExN2I0MwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLmh0bWwK
QEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9
dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5Db3B5
aW5nLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmV2YWx1YXRpb25PcmRl
ckZvckFyZ3VtZW50cyA9IGFzeW5jICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAg
ICAgICBpbnQgZm9vKCkgeyByZXR1cm4gKmJhcigxMCkgKyAqYmFyKDIwKTsgfQorCisgICAgICAg
IHRocmVhZCBpbnQqIGJhcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4
ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKworICAgICAgICBp
bnQgYmF6KCkgeyByZXR1cm4gcGx1cyhiYXIoMTApLCBiYXIoMjApKTsgfQorCisgICAgICAgIGlu
dCBwbHVzKHRocmVhZCBpbnQqIHgsIHRocmVhZCBpbnQqIHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqeCArICp5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgNDAp
OworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FycmF5LWxlbmd0aC1zcGVjLXRlc3Rz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1sZW5ndGgtc3Bl
Yy10ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTUzM2U4YWFmMDJlM2E0MDRkZDI0MjBm
MWM5YTk0ZjdiMDdmNGE3ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9hcnJheS1sZW5ndGgtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBA
CisKK1BBU1Mgbm9uQXJyYXlSZWZBcnJheUxlbmd0aEZhaWwgCitQQVNTIG5vbkFycmF5UmVmQXJy
YXlMZW5ndGhTdWNjZWVkIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
YXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9h
cnJheS1sZW5ndGgtc3BlYy10ZXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NzcwNGNhZTgzOGI5ZTVh
ODUyMDNmODNiYzc4NmMzMGYzNWIwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDQ1IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5h
bWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxl
PgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0
IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5ub25BcnJheVJlZkFycmF5TGVuZ3RoRmFp
bCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAg
ICAgICAgICB0aHJlYWQgdWludCogbGVuZ3RoUHRyKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbnRbNDJdIGFycmF5OworICAgICAgICAgICAgICAgIHJldHVybiAmKGFycmF5Lmxl
bmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLm5vbkFy
cmF5UmVmQXJyYXlMZW5ndGhTdWNjZWVkID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGAKKyAgICAgICAgdWludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdFs3
NTRdIGFycmF5OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQor
ICAgICAgICB1aW50IGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludFs3NTRdIGFycmF5
OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgIGA7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSksIDc1NCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dy
YW0sICJiYXIiLCBbXSksIDc1NCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3Jp
cHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJyYXkt
c3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJyYXkt
c3BlYy10ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY4NWIxZjZlNmZmMDk0MWZjNjM4
NGQ5MmM4MzgyYjI3ZDJiMDJiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKKwor
UEFTUyBhcnJheVJlZlRvQXJyYXlSZWYgCitQQVNTIGFzc2lnbkxlbmd0aCAKK1BBU1MgYXNzaWdu
TGVuZ3RoSGVscGVyIAorUEFTUyBidWlsZEFycmF5VGhlblN1bUl0IAorUEFTUyBidWlsZEFycmF5
VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSAKK1BBU1MgcGFzc2luZ0FycmF5VG9GdW5jdGlv
biAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FycmF5LXNwZWMtdGVz
dHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDQyY2Q0ZDA3NmNjYzQzNmJkMGMxODc1NDNhMGY0NWE3YmZkZTFmOAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3Rz
Lmh0bWwKQEAgLTAsMCArMSwxMjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBj
aGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0
bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owor
Cit3aGxzbFRlc3RzLmFycmF5UmVmVG9BcnJheVJlZiA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCB4OworICAgICAgICAgICAgdGhyZWFkIGludFtdIHAgPSBAeDsKKyAgICAgICAgICAgIHRocmVh
ZCBpbnRbXVtdIHBwID0gQHA7CisgICAgICAgICAgICBpbnRbXXRocmVhZFtddGhyZWFkIHFxID0g
cHA7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIHggPSA0MjsKKyAg
ICAgICAgICAgIHBbMF0gPSA3NjsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAg
ICAgcHBbMF1bMF0gPSAzOTsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAgICAg
cXFbMF1bMF0gPSA4MzsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzYgKyAzOSArIDgzKTsKK30KKwor
d2hsc2xUZXN0cy5hc3NpZ25MZW5ndGggPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZmxvYXRbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICAoQGFycmF5
KS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQor
Cit3aGxzbFRlc3RzLmFzc2lnbkxlbmd0aEhlbHBlciA9IGFzeW5jICgpID0+IHsKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgYmFyKHRocmVhZCBmbG9h
dFtdIGFycmF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5Lmxlbmd0aCA9
IDQyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJyYXk7CisgICAgICAgICAgICAgICAgYmFy
KEBhcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLmJ1
aWxkQXJyYXlUaGVuU3VtSXQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisg
ICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRbNDJdIGFycmF5Owor
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDI7IGkgPSBpICsgMSkKKyAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IGludChpICsgNSk7CisgICAgICAgICAgICBpbnQgcmVzdWx0Owor
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDI7IGkgPSBpICsgMSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBhcnJheVtpXTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyICogNSArIDQyICogNDEgLyAyKTsKK30K
Kword2hsc2xUZXN0cy5idWlsZEFycmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSA9IGFz
eW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGJhcih0aHJlYWQg
aW50W10gYXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IDQyOyBpID0gaSArIDEpCisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBpbnQoaSArIDUpOwor
ICAgICAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IDQyOyBpID0gaSArIDEpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYXJyYXlb
aV07CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRbNDJdIGFycmF5OworICAgICAgICAgICAg
cmV0dXJuIGJhcihAYXJyYXkpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0MiAqIDUgKyA0MiAq
IDQxIC8gMik7Cit9CisKK3dobHNsVGVzdHMucGFzc2luZ0FycmF5VG9GdW5jdGlvbiA9IGFzeW5j
ICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnRbMTBdIGFycjsKKyAgICAgICAgICAgIGZvciAodWludCBpID0g
MDsgaSA8IGFyci5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBhcnJbaV0gPSBpbnQoaSkg
KyAxOworICAgICAgICAgICAgcmV0dXJuIHN1bShhcnIpOworICAgICAgICB9CisKKyAgICAgICAg
aW50IHN1bShpbnRbMTBdIHhzKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgdCA9IDA7Cisg
ICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgICAgICB0ID0gdCArIHhzW2ldOworICAgICAgICAgICAgcmV0dXJuIHQ7CisgICAgICAgIH0K
KyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSksIDU1KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYWRkLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYWRkLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iZWI0NTJlNjkyMTk2YzUxYzZkMzQxOGNhMGEzNmQzYmZjNTBkMWRiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hZGQtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGJhZEFkZCAKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hZGQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9iYWQtYWRkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmFlMDQxNjljYTYzMWE5MDczMTJiYzc0Yzdk
MmM4ZGE1NzE5NjQ2YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9iYWQtYWRkLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KKzx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3Rz
LmJhZEFkZCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCwgdWludCB5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHVpbnQgeiA9IHggKyB5OworICAgICAgICAgICAgfQorICAgICAgICBgKTsK
K30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hbmRlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yzk4YTc0YzlkZmU3MWI1Yzk0NjUwMjRkNjk4OWVhOTk5N2I0Y2UxYgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXItZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsOSBAQAorCitQQVNTIGluZGV4QW5kZXJEb2VzbnRSZXR1cm5Qb2ludGVyIAorUEFTUyBp
bmRleEFuZGVyRG9lc250VGFrZVJlZmVyZW5jZSAKK1BBU1MgYW5kZXJEb2VzbnRSZXR1cm5Qb2lu
dGVyIAorUEFTUyBhbmRlckRvZXNudFRha2VSZWZlcmVuY2UgCitQQVNTIGFuZGVyV2l0aEJhZElu
ZGV4IAorUEFTUyBhbmRlcldpdGhOb3RoaW5nV3JvbmcgCitQQVNTIGFuZGVyV2l0aFdyb25nTnVt
YmVyT2ZBcmd1bWVudHMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9i
YWQtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXIuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45Yzk3YWI4ZTRlYTI2OTA0MDlhYWZiNjc4NmNiMmQ5NmNmOGM2NzMyCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hbmRlci5odG1sCkBA
IC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11
dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qg
cHJlZml4L3Bvc3RmaXguPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuaW5k
ZXhBbmRlckRvZXNudFJldHVyblBvaW50ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAg
ICAgICAgaW50IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3ImW10o
dGhyZWFkIEZvbyogZm9vLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmb28tPng7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3Rz
LmluZGV4QW5kZXJEb2VzbnRUYWtlUmVmZXJlbmNlID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAgICAg
ICAgICAgICAgIGludCB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkIGludCog
b3BlcmF0b3ImW10oRm9vIGZvbywgdWludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJmZvby54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xU
ZXN0cy5hbmRlckRvZXNudFJldHVyblBvaW50ZXIgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQg
Y2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAg
ICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvciYu
Zm9vKHRocmVhZCBGb28qIGZvbykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZm9vLT54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5h
bmRlckRvZXNudFRha2VSZWZlcmVuY2UgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICAg
ICAgaW50IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRv
ciYuZm9vKEZvbyBmb28pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZm
b28ueDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuYW5kZXJX
aXRoQmFkSW5kZXggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbChgaW50IGZv
byh0aHJlYWQgaW50W10geCkgeyByZXR1cm4geFstMV07IH1gKTsKKworICAgIGF3YWl0IGNoZWNr
RmFpbChgaW50IGZvbyh0aHJlYWQgaW50W10geCkgeyByZXR1cm4geFsxLmZdOyB9YCk7CisKKyAg
ICBhd2FpdCBjaGVja0ZhaWwoYGludCBmb28odGhyZWFkIGludFtdIHgsIGludCB5KSB7IHJldHVy
biB4W3ldOyB9YCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoYGludCBmb28odGhyZWFkIGludFtd
IHgsIGZsb2F0IHkpIHsgcmV0dXJuIHhbeV07IH1gKTsKK30KKword2hsc2xUZXN0cy5hbmRlcldp
dGhOb3RoaW5nV3JvbmcgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAg
ICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAg
IHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkK
KyAgICAgICAgeworICAgICAgICAgICAgRm9vIHg7CisgICAgICAgICAgICB4LnggPSAxMzsKKyAg
ICAgICAgICAgIHJldHVybiB4LmZvbzsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMTMpOworfQor
Cit3aGxzbFRlc3RzLmFuZGVyV2l0aFdyb25nTnVtYmVyT2ZBcmd1bWVudHMgPSBhc3luYyAoKSA9
PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB0aHJlYWQg
aW50KiBvcGVyYXRvciYuZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQg
eDsKKyAgICAgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgICAgICB9CisgICAgICAgIGAp
OworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsKKyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vLCBpbnQgYmxhaCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYmFkLWxpdGVyYWxz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2YTE2YTJmOTA0NWE4Njg2YTM0ZDlmN2IwYjA0YjRlZWJi
NzI5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYmFkLWxp
dGVyYWxzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBiYWRJbnRMaXRlcmFs
Rm9ySW50IAorUEFTUyBiYWRJbnRMaXRlcmFsRm9yRmxvYXQgCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9iYWQtbGl0ZXJhbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OGUwMjA1YzU4NDYxNTM0NDdj
MzgyYjE3NTZiY2E0M2UxYWM4NzMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2JhZC1saXRlcmFscy5odG1sCkBAIC0wLDAgKzEsMjUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgorPHNj
cmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNs
VGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5iYWRJbnRMaXRlcmFsRm9ySW50ID0gYXN5bmMgKCkg
PT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoICJ2b2lkIGZvbygpIHsgaW50IHggPSAzMDAwMDAw
MDAwOyB9Iik7Cit9CisKK3dobHNsVGVzdHMuYmFkSW50TGl0ZXJhbEZvckZsb2F0ID0gYXN5bmMg
KCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoInZvaWQgZm9vKCkgeyBmbG9hdCB4ID0gNTAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDsgfSIpOworfQorCitydW5UZXN0cyh3
aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0
MWRkNjY3ODFmYjFkMTgwNTQ3OGJhNDk1ODRhNmM2NGE4Mzc3NzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYml0d2lzZS1ib29sLW9wcy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSw2IEBACisKK1BBU1MgYm9vbEJpdEFuZCAKK1BBU1MgYm9vbEJpdE9yIAorUEFT
UyBib29sQml0WG9yIAorUEFTUyBib29sQml0Tm90IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvYml0d2lzZS1ib29sLW9wcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDZlODNjZDI0NjEwN2I2
N2U3ZjMzOWVlOGQ0ZTVmNTA3MWQ1MmViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMuaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5l
c3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+Citjb25zdCBlcHNpbG9uID0gMC4wMDAxOworCitjb25zdCB3aGxzbFRlc3Rz
ID0ge307CisKK3dobHNsVGVzdHMuYm9vbEJpdEFuZCA9IGFzeW5jICgpID0+IHsKKyAgICBjb25z
dCBzb3VyY2UgPSBgCisgICAgICAgIGJvb2wgZm9vKGJvb2wgYSwgYm9vbCBiKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0KKyAgICBgOworCisgICAgewor
ICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28i
LCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKHRydWUpXSk7CisgICAgICAgIGFzc2VydF9lcXVh
bHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNv
dXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZh
bHVlLiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChmYWxz
ZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5l
ZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSks
IG1ha2VCb29sKHRydWUpXSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwg
IlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorfTsKKword2hsc2xUZXN0
cy5ib29sQml0T3IgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3Qgc291cmNlID0gYAorICAgICAg
ICBib29sIGZvbyhib29sIGEsIGJvb2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGEgfCBiOworICAgICAgICB9CisgICAgYDsKKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9
IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBt
YWtlQm9vbCh0cnVlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRl
c3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAgICAgICBs
ZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJv
b2woZmFsc2UpLCBtYWtlQm9vbChmYWxzZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1
bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwg
ImZvbyIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2woZmFsc2UpXSk7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3Rl
ZCB2YWx1ZS4iKTsKKyAgICB9Cit9OworCit3aGxzbFRlc3RzLmJvb2xCaXRYb3IgPSBhc3luYyAo
KSA9PiB7CisgICAgY29uc3Qgc291cmNlID0gYAorICAgICAgICBib29sIGZvbyhib29sIGEsIGJv
b2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9Cisg
ICAgYDsKKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVk
IHZhbHVlLiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2wo
ZmFsc2UpXSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3QgcmV0
dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1
ZSksIG1ha2VCb29sKGZhbHNlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1
ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAg
ICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBb
bWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbCh0cnVlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQor
fTsKKword2hsc2xUZXN0cy5ib29sQml0Tm90ID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHNv
dXJjZSA9IGAKKyAgICAgICAgYm9vbCBmb28oYm9vbCBhKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAgICBgOworCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1
ZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5l
ZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSld
KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIHRydWUsICJUZXN0IHJldHVybmVkIGV4
cGVjdGVkIHZhbHVlLiIpOworICAgIH0KK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYm9v
bHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Jvb2xzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNDVhYmI4YzFjNDBiYzY3MmM3Nzk4YjliMmMyZDU0ZjIzNWY3OGM0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Jvb2xzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBib29sZWFuTWF0aCAKK1BBU1MgaWRlbnRp
dHlCb29sIAorUEFTUyBsaXRlcmFsQm9vbCAKK1BBU1Mgb3BlcmF0b3JCb29sIAorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYm9vbHMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9ib29scy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZjcxYTQ5OWUzNjE2MTMzMWQ4ZDZh
MWI5NmZkYTU5NmJkNDcyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYm9vbHMuaHRtbApAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJs
b25nIj4KKzx0aXRsZT5Cb29scy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3Qt
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0
cy5ib29sZWFuTWF0aCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAg
ICAgIGJvb2wgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWUgJiYgdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzIoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZSAmJiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzMoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2UgJiYgdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBib29sIGZvbzQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2Ug
JiYgZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBmb281KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWUgfHwgdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZv
bzYoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZSB8fCBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBib29sIGZvbzcoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2UgfHwgdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzgoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2UgfHwgZmFsc2U7CisgICAgICAgIH0KKyAgICBgOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzIiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIGZhbHNlKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUi
LCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihw
cm9ncmFtLCAiZm9vNiIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
Qm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbXSksIGZhbHNlKTsK
K30KKworCit3aGxzbFRlc3RzLmlkZW50aXR5Qm9vbCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQg
cHJvZ3JhbSA9ICJib29sIGZvbyhib29sIHgpIHsgcmV0dXJuIHg7IH0iOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRy
dWUpXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7Cit9CisKK3dobHNsVGVz
dHMubGl0ZXJhbEJvb2wgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAiYm9vbCBm
b28oKSB7IHJldHVybiB0cnVlOyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7Cit9CisKK3dobHNsVGVzdHMub3Bl
cmF0b3JCb29sID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
Ym9vbCBib29sRnJvbVVjaGFyRmFsc2UoKSB7IHJldHVybiBib29sKHVjaGFyKDApKTsgfQorICAg
ICAgICBib29sIGJvb2xGcm9tVWNoYXJUcnVlKCkgeyByZXR1cm4gYm9vbCh1Y2hhcigxKSk7IH0K
KworICAgICAgICBib29sIGJvb2xGcm9tVWludEZhbHNlKCkgeyByZXR1cm4gYm9vbCh1aW50KDAp
KTsgfQorICAgICAgICBib29sIGJvb2xGcm9tVWludFRydWUoKSB7IHJldHVybiBib29sKHVpbnQo
MSkpOyB9CisKKyAgICAgICAgYm9vbCBib29sRnJvbUludEZhbHNlKCkgeyByZXR1cm4gYm9vbChp
bnQoMCkpOyB9CisgICAgICAgIGJvb2wgYm9vbEZyb21JbnRUcnVlKCkgeyByZXR1cm4gYm9vbChp
bnQoMSkpOyB9CisKKyAgICAgICAgYm9vbCBib29sRnJvbUZsb2F0RmFsc2UoKSB7IHJldHVybiBi
b29sKGZsb2F0KDApKTsgfQorICAgICAgICBib29sIGJvb2xGcm9tRmxvYXRUcnVlKCkgeyByZXR1
cm4gYm9vbChmbG9hdCgxKSk7IH0KKyAgICAgICAgYm9vbCBib29sRnJvbUZsb2F0TmFOKGZsb2F0
IGFyZykgeyByZXR1cm4gYm9vbChhcmcpOyB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21VY2hhckZhbHNlIiwgW10p
LCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJib29sRnJvbVVjaGFyVHJ1ZSIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tVWludEZhbHNlIiwgW10p
LCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJib29sRnJvbVVpbnRUcnVlIiwgW10pLCB0cnVlKTsKKworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21JbnRGYWxzZSIsIFtdKSwg
ZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAiYm9vbEZyb21JbnRUcnVlIiwgW10pLCB0cnVlKTsKKworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21GbG9hdEZhbHNlIiwgW10pLCBm
YWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0s
ICJib29sRnJvbUZsb2F0VHJ1ZSIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUZsb2F0TmFOIiwgW21ha2VGbG9h
dChwcm9ncmFtLCBOYU4pXSksIHRydWUpOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZmxvYXQzIHg7CisgICAgICAgICAgICAgICAgYm9vbCByID0gYm9vbCh4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZmxvYXQzeDMgeDsKKyAgICAgICAgICAgICAgICBib29sIHIgPSBib29sKHgpOworICAg
ICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3J1blRlc3RzKHdobHNsVGVz
dHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1
MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItZnJhZ21lbnQtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2Ry
YXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9idWZmZXItZnJhZ21lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXIt
ZnJhZ21lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGJhYmEwMzdmMWNlMmIwNzlhNWQ2OTJiMjJjZDll
MzIyM2Y5ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1
ZmZlci1mcmFnbWVudC5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwg
ZmxvYXQgaSA6IGF0dHJpYnV0ZSgxKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0
aW9uOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb24sIGNvbnN0YW50IGZsb2F0W10gdGhlQnVmZmVyIDogcmVnaXN0ZXIoYjAp
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHRoZUJ1ZmZlclswXSwgdGhlQnVm
ZmVyWzBdLCB0aGVCdWZmZXJbMF0sIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRl
dmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kg
PSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9u
dEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBb
e2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6
IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0
YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxv
Y2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6
IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXQxID0ge3N0
cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMV19OworICAgIGNvbnN0IGlucHV0cyA9
IFtpbnB1dDAsIGlucHV0MV07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVy
In1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJh
c3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJ
bnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjEgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIxLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMF0g
PSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMV0gPSAxOworICAgIHZlcnRleEJ1
ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlb
M10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3Vy
Y2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAg
cmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjAsIHZlcnRleEJ1ZmZlcjFd
LCBbMCwgMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2Up
IHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgewor
ICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4
MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3RoLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1ZmZl
ci1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3RoLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTMyMmM2ZGQ1NjlmY2Y2MWNhNzE0OTFjMzVmNjE5ZWNhODM3NTg5OQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3Ro
Lmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygxLCAxLCAx
KV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSB1aW50W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAg
YnVmZmVyWzBdID0gYnVmZmVyLmxlbmd0aDsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0
KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNv
bXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVT
aGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGlu
Z3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1d
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5
b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBj
b21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IFVpbnQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogMTMzNzsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVS
X1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyVWludDMyQXJyYXkgPSBuZXcgVWludDMyQXJy
YXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlclVpbnQzMkFycmF5WzBdID0gMDsKKyAg
ICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAw
LCByZXN1bHRzQnVmZmVyLCAwLCAxICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpOwor
ICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0
ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1
ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRVaW50MzJBcnJheSA9IG5ldyBV
aW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRVaW50MzJBcnJh
eVswXSA9PSAxMzM3KQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAg
IHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsK
KyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZl
cnRleC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1ZmZlci12ZXJ0
ZXgtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZm
MDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2J1ZmZlci12ZXJ0ZXgtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItdmVydGV4Lmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZlcnRleC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAwMGYyODA4MWM2MThlMGIwMzA4NzE5OTc2ZDliYjVjNTViN2M2YzYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZlcnRleC5odG1sCkBAIC0wLDAg
KzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGNv
bnN0YW50IGZsb2F0NFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKGIwKSwgdWludCBpZCA6IFNWX1ZlcnRl
eElEKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gYnVmZmVyW2lkXTsKK30KKworZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6
IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEuMCwgMS4wLCAxLjAsIDEuMCk7Cit9
CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Cisg
ICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0
IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9
OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJs
ZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFM
TAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IFtdfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlw
ZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmlu
ZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
UGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJp
bWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3Rl
bmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVM
YXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBp
cGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gNCAq
IDQgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7CisKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHJlc291cmNlQnVmZmVyRmxv
YXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9
IDAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbOF0gPSAwLjU7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41
OworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzEyXSA9IDAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7
CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsK
KworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6
ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTog
YnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6
IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29u
c3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAg
Y29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0i
fTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2Fw
Q2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdl
dEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRU
ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHty
OiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3th
dHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9w
OiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVz
Y3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFz
cyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgw
LCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12ZWN0b3JzLTItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0yLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZTdiMDE3MmVlY2M2MTUyM2YxMWNmNWQyNmIxMTkwNGU4MTY0YWUxCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0yLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBidWlsdGluVmVjdG9yR2V0dGVycyAK
K1BBU1MgYnVpbHRpblZlY3RvclNldHRlcnMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9idWlsdGluLXZlY3RvcnMtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2J1aWx0aW4tdmVjdG9ycy0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU1N2E4MzY2ZjVmMjM5M2Vl
ZjQ3ZTVhZjVlNmQ0MjBmOGExNjZiNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9idWlsdGluLXZlY3RvcnMtMi5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgorPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVz
dHMgPSB7fTsKKworY29uc3QgY2hlY2tGdW5jcyA9IHsKKyAgICAidWludCI6IGNhbGxVaW50RnVu
Y3Rpb24sCisgICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKKyAgICAiZmxvYXQiOiBjYWxsRmxv
YXRGdW5jdGlvbgorfTsKK2NvbnN0IHR5cGVOYW1lcyA9IFsgInVpbnQiLCAiaW50IiwgImZsb2F0
IiBdOworY29uc3Qgc2l6ZXMgPSBbIDIsIDMsIDQgXTsKK2NvbnN0IGVsZW1lbnRzID0gWyAieCIs
ICJ5IiwgInoiLCAidyIgXTsKK2NvbnN0IGluaXRpYWxpemVyTGlzdCA9IFsgMSwgMiwgMywgNCBd
OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JHZXR0ZXJzID0gYXN5bmMgKCkgPT4KK3sKKwor
ICAgIGxldCB0ZXN0cyA9IFtdOworICAgIGxldCBzcmMgPSAiIjsKKyAgICBmb3IgKGxldCB0eXBl
TmFtZSBvZiB0eXBlTmFtZXMpIHsKKyAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBzaXplcykgewor
ICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0ke3NpemV9JHtlbGVtZW50c1tp
XX1gOworICAgICAgICAgICAgICAgIHNyYyArPSBgJHt0eXBlTmFtZX0gJHtmdW5jdGlvbk5hbWV9
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAke3R5cGVOYW1lfSR7c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtzaXplfSgke2luaXRpYWxpemVy
TGlzdC5zbGljZSgwLCBzaXplKS5qb2luKCIsICIpfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHguJHtlbGVtZW50c1tpXX07CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBgOworICAgICAgICAgICAgICAgIHRlc3RzLnB1c2go
eyB0eXBlOiB0eXBlTmFtZSwgbmFtZTogZnVuY3Rpb25OYW1lLCBleHBlY3RhdGlvbjogaW5pdGlh
bGl6ZXJMaXN0W2ldIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
bGV0IHByb2dyYW0gPSBzcmM7CisgICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgeworICAgICAg
ICBjb25zdCBjaGVja0Z1bmMgPSBjaGVja0Z1bmNzW3Rlc3QudHlwZV07CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2hlY2tGdW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0LmV4
cGVjdGF0aW9uKTsKKyAgICB9Cit9OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JTZXR0ZXJz
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgdGVzdHMgPSBbXTsKKyAgICBsZXQgc3JjID0gIiI7
CisgICAgZm9yIChsZXQgdHlwZU5hbWUgb2YgdHlwZU5hbWVzKSB7CisgICAgICAgIGZvciAobGV0
IHNpemUgb2Ygc2l6ZXMpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dHlwZU5hbWV9
JHtzaXplfSR7ZWxlbWVudHNbaV19YDsKKyAgICAgICAgICAgICAgICBzcmMgKz0gYCR7dHlwZU5h
bWV9ICR7ZnVuY3Rpb25OYW1lfSgpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3NpemV9IHggPSAke3R5cGVOYW1lfSR7
c2l6ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6ZSkuam9pbigiLCAiKX0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHguJHtlbGVtZW50c1tpXX0gPSAzNDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geC4ke2VsZW1lbnRzW2ldfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGA7CisgICAgICAgICAgICAg
ICAgdGVzdHMucHVzaCh7IHR5cGU6IHR5cGVOYW1lLCBuYW1lOiBmdW5jdGlvbk5hbWUsIGV4cGVj
dGF0aW9uOiAzNCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGxl
dCBwcm9ncmFtID0gc3JjOworICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAg
Y29uc3QgY2hlY2tGdW5jID0gY2hlY2tGdW5jc1t0ZXN0LnR5cGVdOworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNoZWNrRnVuYyhwcm9ncmFtLCB0ZXN0Lm5hbWUsIFtdKSwgdGVzdC5leHBl
Y3RhdGlvbik7CisgICAgfQorfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0Pgor
PC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12
ZWN0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWlsdGluLXZl
Y3RvcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMWM3YTI4MmVmNmI1ZTI3OTY1NzAyYzE5
YWNmNGUxNTRlOGNhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBi
dWlsdGluVmVjdG9ySW5kZXhTZXR0ZXJzIAorUEFTUyBidWlsdGluVmVjdG9ycyAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIx
NDk0ZjMxYjVkZjljZjliMTU1OTQxMjM2MWI3YzY1ZDhkZjg4NDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12ZWN0b3JzLmh0bWwKQEAgLTAsMCAr
MSwxOTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04Pgor
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48
L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKworY29uc3QgY2hlY2tGdW5jcyA9IHsKKyAgICAidWlu
dCI6IGNhbGxVaW50RnVuY3Rpb24sCisgICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKKyAgICAi
ZmxvYXQiOiBjYWxsRmxvYXRGdW5jdGlvbgorfTsKK2NvbnN0IHR5cGVOYW1lcyA9IFsgInVpbnQi
LCAiaW50IiwgImZsb2F0IiBdOworY29uc3Qgc2l6ZXMgPSBbIDIsIDMsIDQgXTsKK2NvbnN0IGVs
ZW1lbnRzID0gWyAieCIsICJ5IiwgInoiLCAidyIgXTsKK2NvbnN0IGluaXRpYWxpemVyTGlzdCA9
IFsgMSwgMiwgMywgNCBdOworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JJbmRleFNldHRlcnMg
PSBhc3luYyAoKSA9PgoreworICAgIGxldCB0ZXN0cyA9IFtdOworICAgIGxldCBzcmMgPSAiIjsK
KyAgICBmb3IgKGxldCB0eXBlTmFtZSBvZiB0eXBlTmFtZXMpIHsKKyAgICAgICAgZm9yIChsZXQg
c2l6ZSBvZiBzaXplcykgeworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0k
e3NpemV9JHtlbGVtZW50c1tpXX1gOworICAgICAgICAgICAgICAgIHNyYyArPSBgJHt0eXBlTmFt
ZX0gJHtmdW5jdGlvbk5hbWV9KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAke3R5cGVOYW1lfSR7c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtz
aXplfSgke2luaXRpYWxpemVyTGlzdC5zbGljZSgwLCBzaXplKS5qb2luKCIsICIpfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeFske2l9XSA9IDM0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB4WyR7aX1dOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYDsKKyAgICAgICAgICAgICAgICB0ZXN0cy5wdXNoKHsgdHlw
ZTogdHlwZU5hbWUsIG5hbWU6IGZ1bmN0aW9uTmFtZSwgZXhwZWN0YXRpb246IDM0IH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbGV0IHByb2dyYW0gPSBzcmM7Cisg
ICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgeworICAgICAgICBjb25zdCBjaGVja0Z1bmMgPSBj
aGVja0Z1bmNzW3Rlc3QudHlwZV07CisgICAgICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2hlY2tG
dW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0LmV4cGVjdGF0aW9uKTsKKyAgICB9Cit9
OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dDIgYSA9IGludDIoMywgNCk7CisgICAgICAgICAgICByZXR1cm4gYVswXTsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgZm9vMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludDIgYSA9IGludDIo
MywgNCk7CisgICAgICAgICAgICBpbnQzIGIgPSBpbnQzKGEsIDUpOworICAgICAgICAgICAgcmV0
dXJuIGJbMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzMoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQzIGEgPSBpbnQzKDMsIDQsIDUpOworICAgICAgICAgICAgaW50NCBiID0gaW50
NCg2LCBhKTsKKyAgICAgICAgICAgIHJldHVybiBiWzFdOworICAgICAgICB9CisgICAgICAgIGlu
dCBmb280KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50MiBhID0gaW50MigzLCA0KTsKKyAg
ICAgICAgICAgIGludDIgYiA9IGludDIoNSwgNik7CisgICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0
KGEsIGIpOworICAgICAgICAgICAgcmV0dXJuIGNbMl07CisgICAgICAgIH0KKyAgICAgICAgYm9v
bCBmb281KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50NCBhID0gaW50NCgzLCA0LCA1LCA2
KTsKKyAgICAgICAgICAgIGludDIgYiA9IGludDIoNCwgNSk7CisgICAgICAgICAgICBpbnQ0IGMg
PSBpbnQ0KDMsIGIsIDYpOworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYzsKKyAgICAgICAgfQor
ICAgICAgICBib29sIGZvbzYoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQyIGEgPSBpbnQy
KDQsIDUpOworICAgICAgICAgICAgaW50MyBiID0gaW50MygzLCBhKTsKKyAgICAgICAgICAgIGlu
dDMgYyA9IGludDMoMywgNCwgNik7CisgICAgICAgICAgICByZXR1cm4gYiA9PSBjOworICAgICAg
ICB9CisgICAgICAgIHVpbnQgZm9vdSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQyIGEg
PSB1aW50MigzLCA0KTsKKyAgICAgICAgICAgIHJldHVybiBhWzBdOworICAgICAgICB9CisgICAg
ICAgIHVpbnQgZm9vdTIoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MiBhID0gdWludDIo
MywgNCk7CisgICAgICAgICAgICB1aW50MyBiID0gdWludDMoYSwgNSk7CisgICAgICAgICAgICBy
ZXR1cm4gYlsxXTsKKyAgICAgICAgfQorICAgICAgICB1aW50IGZvb3UzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdWludDMgYSA9IHVpbnQzKDMsIDQsIDUpOworICAgICAgICAgICAgdWludDQg
YiA9IHVpbnQ0KDYsIGEpOworICAgICAgICAgICAgcmV0dXJuIGJbMV07CisgICAgICAgIH0KKyAg
ICAgICAgdWludCBmb291NCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQyIGEgPSB1aW50
MigzLCA0KTsKKyAgICAgICAgICAgIHVpbnQyIGIgPSB1aW50Mig1LCA2KTsKKyAgICAgICAgICAg
IHVpbnQ0IGMgPSB1aW50NChhLCBiKTsKKyAgICAgICAgICAgIHJldHVybiBjWzJdOworICAgICAg
ICB9CisgICAgICAgIGJvb2wgZm9vdTUoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50NCBh
ID0gdWludDQoMywgNCwgNSwgNik7CisgICAgICAgICAgICB1aW50MiBiID0gdWludDIoNCwgNSk7
CisgICAgICAgICAgICB1aW50NCBjID0gdWludDQoMywgYiwgNik7CisgICAgICAgICAgICByZXR1
cm4gYSA9PSBjOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vdTYoKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1aW50MiBhID0gdWludDIoNCwgNSk7CisgICAgICAgICAgICB1aW50MyBiID0g
dWludDMoMywgYSk7CisgICAgICAgICAgICB1aW50MyBjID0gdWludDMoMywgNCwgNik7CisgICAg
ICAgICAgICByZXR1cm4gYiA9PSBjOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvb2YoKQor
ICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOworICAgICAg
ICAgICAgcmV0dXJuIGFbMF07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vZjIoKQorICAg
ICAgICB7CisgICAgICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOworICAgICAgICAg
ICAgZmxvYXQzIGIgPSBmbG9hdDMoYSwgNS4pOworICAgICAgICAgICAgcmV0dXJuIGJbMV07Cisg
ICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vZjMoKQorICAgICAgICB7CisgICAgICAgICAgICBm
bG9hdDMgYSA9IGZsb2F0MygzLiwgNC4sIDUuKTsKKyAgICAgICAgICAgIGZsb2F0NCBiID0gZmxv
YXQ0KDYuLCBhKTsKKyAgICAgICAgICAgIHJldHVybiBiWzFdOworICAgICAgICB9CisgICAgICAg
IGZsb2F0IGZvb2Y0KCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyIGEgPSBmbG9hdDIo
My4sIDQuKTsKKyAgICAgICAgICAgIGZsb2F0MiBiID0gZmxvYXQyKDUuLCA2Lik7CisgICAgICAg
ICAgICBmbG9hdDQgYyA9IGZsb2F0NChhLCBiKTsKKyAgICAgICAgICAgIHJldHVybiBjWzJdOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vZjUoKQorICAgICAgICB7CisgICAgICAgICAgICBm
bG9hdDQgYSA9IGZsb2F0NCgzLiwgNC4sIDUuLCA2Lik7CisgICAgICAgICAgICBmbG9hdDIgYiA9
IGZsb2F0Mig0LiwgNS4pOworICAgICAgICAgICAgZmxvYXQ0IGMgPSBmbG9hdDQoMy4sIGIsIDYu
KTsKKyAgICAgICAgICAgIHJldHVybiBhID09IGM7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBm
b29mNigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0MiBhID0gZmxvYXQyKDQuLCA1Lik7
CisgICAgICAgICAgICBmbG9hdDMgYiA9IGZsb2F0MygzLiwgYSk7CisgICAgICAgICAgICBmbG9h
dDMgYyA9IGZsb2F0MygzLiwgNC4sIDYuKTsKKyAgICAgICAgICAgIHJldHVybiBiID09IGM7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgMyk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDUpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIs
IFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb282IiwgW10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
VWludEZ1bmN0aW9uKHByb2dyYW0sICJmb291IiwgW10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UyIiwgW10pLCA0KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UzIiwgW10p
LCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvb3U0IiwgW10pLCA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24ocHJvZ3JhbSwgImZvb3U1IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U2IiwgW10pLCBmYWxzZSk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vZiIsIFtdKSwg
Myk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vZjIiLCBbXSksIDQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rp
b24ocHJvZ3JhbSwgImZvb2YzIiwgW10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNCIsIFtdKSwgNSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNSIsIFtdKSwgdHJ1ZSk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb29m
NiIsIFtdKSwgZmFsc2UpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Nhc3RzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jYXN0cy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWI3Y2U0YzdkOGU0MWE3ZWE1ZmE5M2RjMzY0OTExYTJlNDMxYmRhMgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jYXN0cy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgY2FzdHMgCitQQVNTIHNlbGZDYXN0cyAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Nhc3RzLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvY2FzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWZlZjQyYmM4NjRjNzcwYjMz
MTJjMGI1Njk0MWNlMmRkZjZiNjBkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2Nhc3RzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wt
dGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxz
bFRlc3RzLmNhc3RzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBz
dHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIG9wZXJh
dG9yIEJhcihGb28gZm9vKSB7CisgICAgICAgICAgICBCYXIgYjsKKyAgICAgICAgICAgIGIueSA9
IGZvby54ICsgNzsKKyAgICAgICAgICAgIHJldHVybiBiOworICAgICAgICB9CisgICAgICAgIGlu
dCBiYXooaW50IHopIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueCA9
IHo7CisgICAgICAgICAgICBCYXIgYiA9IEJhcihmb28pOworICAgICAgICAgICAgcmV0dXJuIGIu
eTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImJheiIsIFttYWtlSW50KDYpXSksIDEzKTsKK30KKword2hsc2xUZXN0
cy5zZWxmQ2FzdHMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAg
ICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAgIGlu
dCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9v
LnggPSAyMTsKKyAgICAgICAgICAgIEZvbyBiYXIgPSBGb28oZm9vKTsKKyAgICAgICAgICAgIGJh
ci54ID0gNDI7CisgICAgICAgICAgICByZXR1cm4gZm9vLnggKyBiYXIueDsKKyAgICAgICAgfQor
ICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdKSwgMjEgKyA0Mik7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3Jp
cHQ+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jaGVj
a2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NoZWNrZXItc2hvdWxkLXNldC10eXBl
LW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jaGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1y
ZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAor
UEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY2hlY2tlci1zaG91bGQtc2V0
LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUt
dmFyaWFibGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM3OTliZjVhM2MwNGNiNTU5ZTA3N2ZiMzIwZmVl
ZGQzMzhiMDc2NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9j
aGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMuaHRt
bApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDEsIDEsIDEpXQor
Y29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0
ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgZmxv
YXQ0IHZlYzsKKyAgICB2ZWNbMF0gKz0gNDIuMDsKKyAgICBidWZmZXJbdWludCh0aHJlYWRJRC54
KV0gPSB2ZWNbMF07Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVT
dGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
ID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAx
OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25z
dCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5
QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1h
cCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBH
UFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJp
bmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9Owor
ICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQs
IGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBj
b21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAg
IGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZm
ZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNv
ZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEp
OworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0g
YXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRzRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlm
IChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDQyKQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsK
KyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5t
YXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBm
dW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30p
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9jb21tZW50LXBhcnNpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljYjQwOTFi
ZDgxMWJmNzVmZWQzNjJlZWY0MDUyMjc1YjZjZjdmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDMgQEAKKworUEFTUyBjb21tZW50UGFyc2luZyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2NvbW1lbnQtcGFyc2luZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2NvbW1lbnQtcGFyc2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzg1ZmFmYzY1YjU3NTY1
YjEzM2EyMmQ3NDVjNTk1MzM2M2FmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRl
c3RzID0ge307CisKK3dobHNsVGVzdHMuY29tbWVudFBhcnNpbmcgPSBhc3luYyAoKSA9PiB7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIC8qIHRoaXMgY29tbWVudAorICAgICAgICBydW5z
IG92ZXIgbXVsdGlwbGUgbGluZXMgKi8KKyAgICAgICAgYm9vbCBmb28oKSB7IHJldHVybiB0cnVl
OyB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgLyogdGhpcyBjb21tZW50CisgICAgICAgIHJ1bnMgb3ZlciBtdWx0aXBsZSBs
aW5lcworICAgICAgICBib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7Cit9
CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jb21wdXRlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9jb21wdXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgy
ZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29tcHV0ZS5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iM2Iw
ZTlhNGJiYmJlMTFiMzJlMmJlZjdjZWU1ZDE4ZDkyNGQwZDk0Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUuaHRtbApAQCAtMCwwICsxLDkyIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRl
clNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVT
aGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFk
SUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCld
ID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOworfQorYDsKKworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZm
ZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAg
YnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4
OworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Cisg
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJy
YXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAgICAg
JiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMy
QXJyYXlbMl0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgKKyAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3VsdHNG
bG9hdDMyQXJyYXlbNV0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09
IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0ZXN0
UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3Vs
dHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZhNGJkY2Y0MzY2OGFjZDRh
MGU3N2M0ZmYzNmU5MzkxMjBkZWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9jb3B5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBjb3B5
QXJyYXkgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jb3B5Lmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwYzE5N2Iy
ZDkxYWM2MGY2OTVhMjY2YWRjNzA3Y2ZlMjk0YmU1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS5odG1sCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+Q29weWluZy48L3RpdGxlPgorPHNjcmlwdCBzcmM9
ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7
fTsKKword2hsc2xUZXN0cy5jb3B5QXJyYXkgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9n
cmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50WzEw
XSB4czsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgICAgIHhzW2ldID0gaW50KGkpICsgMTsKKyAgICAgICAgICAgIGludFsxMF0g
eXMgPSB4czsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsr
KQorICAgICAgICAgICAgICAgIHhzW2ldID0gMDsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOwor
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgeXMubGVuZ3RoOyBpKyspCisgICAgICAg
ICAgICAgICAgc3VtID0gc3VtICsgeXNbaV07CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAg
ICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10pLCA1NSk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZGVy
ZWZlcmVuY2Utb3JkZXJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWM2MTdlZWY1
ZmU0NzI0MjJlZDBhNGZiNWY4MjZkMDBhMjM4ZmNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKKworUEFTUyBjYWxsQXJndW1lbnRzQXJlQ29waWVkSW1tZWRpYXRlbHlBZnRl
ckV2YWx1YXRpb24gCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kZXJl
ZmVyZW5jZS1vcmRlcmluZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJl
bmNlLW9yZGVyaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM0YmFiZjY3MWE0MzcwNzcyYTMxMTJlYTBi
MDRjNDVhMjNkYjY3MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9kZXJlZmVyZW5jZS1vcmRlcmluZy5odG1sCkBAIC0wLDAgKzEsMzIgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+RGVyZWZlcmVuY2Ugb3JkZXJpbmcuPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxz
bFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuY2FsbEFyZ3VtZW50c0FyZUNvcGllZEltbWVkaWF0
ZWx5QWZ0ZXJFdmFsdWF0aW9uID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAor
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpiYXIoNSkg
KyAqYmFyKDcpOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJl
dHVybiAmeDsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMik7Cit9OworCitydW5UZXN0cyh3
aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2stZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kZXJlZmVyZW5jZS1wb2ludGVyLXNo
b3VsZC10eXBlLWNoZWNrLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMz
M2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9kZXJlZmVyZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLWV4cGVj
dGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvZGVyZWZlcmVuY2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVjay5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxk
LXR5cGUtY2hlY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmNlYzk2Y2NhZGZjOGZkYjk3NDhkYjVhNGFl
YzllM2E5Yjc5YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRtbApAQCAtMCwwICsxLDEz
OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9z
aXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30K
KwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1
bHQ7CisKKyAgICB0aHJlYWQgZmxvYXQqIHB0cjIgPSAmc2hhZGU7CisgICAgKnB0cjIgPSBzaGFk
ZTsKKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9
ICpwdHIyOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAg
ICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3Qg
YXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6
IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwor
ICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9
OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1
bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91
cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBh
d2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZm
ZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9
IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VC
dWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5t
YXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZl
ciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCBy
ZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9
IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07
CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1
Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJn
cmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBD
aGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dh
cENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcg
PSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0
IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1l
bnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVs
bCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5k
ZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
UmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJp
bmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9
KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1icmVh
ay1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3At
YnJlYWstZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1
ZjhiMjAyZmI5ZmQyMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2RvLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdCbGFja1NxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1s
b29wLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1i
cmVhay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2MWNhNTVkMmQ4YjJkMzE2NzEyNWNjZjVhOWVjNjMyMDI3
ZjYzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hp
bGUtbG9vcC1icmVhay5odG1sCkBAIC0wLDAgKzEsMTQyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0
cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAg
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7
CisgICAgZG8geworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9IHdoaWxlICgoc2hhZGUgPSAxLjAsIGZhbHNlKSk7CisKKyAgICByZXN1bHQucG9z
aXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFk
ZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2Up
IHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFn
ZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9Owor
ICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRy
aWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNl
OiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3Jt
YXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1d
OyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9
IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3Jt
YXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVy
TG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0
cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczog
W3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19Owor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQo
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBi
dWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNv
bnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRp
bmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBM
YXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91
cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3Vw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZm
ZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsK
KyAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwor
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1s
b29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1jb250aW51
ZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtY29udGludWUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45Nzg5NmU4MGVlOWE5N2E4ZGQwOTgyMTJjYmFmYjM4YWJhNDBhODhl
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxv
b3AtY29udGludWUuaHRtbApAQCAtMCwwICsxLDE0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1
Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBm
bG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBib29sIGIgPSB0cnVlOwor
ICAgIHVpbnQgaSA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2hhZGUgPSAwLjA7CisgICAgfSB3aGlsZSAo
KGkgPSBpICsgMSwgc2hhZGUgPSBzaGFkZSArIDAuMSwgaSA8IDEwKSk7CisKKyAgICByZXN1bHQu
cG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChz
aGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3Qg
YXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVy
MC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAw
LjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3
YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAg
Y29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVz
Y3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50
VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5j
cmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzog
MCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVu
dDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFy
Iiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
PSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3Qg
cmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVy
UGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0
bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2RvLXdoaWxlLWxvb3AuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDljNWM4MTBmYzk0Nzc4NDcwYmYxODFh
MjJiMmMyN2ZjNWY0Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2RvLXdoaWxlLWxvb3AuaHRtbApAQCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsK
KyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2
ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBkbyB7CisgICAg
ICAgIHNoYWRlID0gMS4wOworICAgIH0gd2hpbGUoZmFsc2UpOworCisgICAgcmVzdWx0LnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUg
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUs
IHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAg
ICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxv
Y2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJp
YnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOwor
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9kb250LWNyYXNoLXBhcnNpbmctZW51bS1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kb250LWNyYXNo
LXBhcnNpbmctZW51bS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFj
a2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jhc2gtcGFyc2luZy1l
bnVtLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG9udC1jcmFzaC1wYXJzaW5nLWVu
dW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMTNmMjQ1MDEyNmZmYzI0OTJiZDVlMWUxODgxMDZiMTI0MWZk
MGM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jh
c2gtcGFyc2luZy1lbnVtLmh0bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAor
CitlbnVtIERvbnRDcmFzaCB7CisgICAgVmFsdWUKK30KKwordmVydGV4IGZsb2F0NCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBpIDogYXR0cmlidXRl
KDEpKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK2ZyYWdtZW50
IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBT
Vl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorYDsKKworY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25z
dCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRv
cG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUg
PSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3Rh
dGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3Jp
dGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtz
aGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0
MSA9IHtzdHJpZGU6IDQsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTFdfTsKKyAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwLCBpbnB1dDFdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3Jt
LWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMUFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMUFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzJdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQz
MkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2ZXJ0ZXhC
dWZmZXIxXSwgWzAsIDBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlv
bigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLWV4
cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4ZDUwYmY4ZTQ1
NDljMjkwNTJmNWVkMTBkMzI0YTI3ZDhhMDQxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9kb3QtZXhwcmVzc2lvbnMuaHRtbApAQCAtMCwwICsxLDEzMyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBz
aGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24g
OiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVy
dGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
LCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7Cisg
ICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4g
ZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4
U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9w
b2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9
IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxl
bmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0
ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0
ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRp
b246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVy
TG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0
cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczog
W3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19Owor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQo
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBi
dWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNv
bnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRp
bmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBM
YXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91
cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3Vw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZm
ZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsK
KyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwor
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1ub3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2RvdWJsZS1ub3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzQzMTg5
ZWRmOGQ1ZTIzMGM1OGVjMjU4MDhhMDYzMzM5NmM4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZG91YmxlLW5vdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwz
IEBACisKK1BBU1MgZG91YmxlTm90IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZG91YmxlLW5vdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1u
b3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZTlmNWJkN2MzYzVjYWY1ZjEzOGIwNDFhMmQ2OWQ4ODRlZjQ4
YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1u
b3QuaHRtbApAQCAtMCwwICsxLDI3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEg
Y2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRp
dGxlPkNvcHlpbmcuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuZG91Ymxl
Tm90ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgYm9vbCBm
b28oYm9vbCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISF4OworICAgICAgICB9
CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKV0pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKSwg
ZmFsc2UpOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1zaG91
bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0
ZS1jdG9ycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0
ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1j
dG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1zaG91
bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM0MjM4ZDM3
ZmVjODMzZmRjOWJiYWMzZTI2ZTMxYmU0NzJjMTM5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1
cGxpY2F0ZS1jdG9ycy5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVj
dCBYWVogeworICAgIGludCB4OworICAgIGludCB5OworICAgIGludCB6OworfQorCit0eXBlZGVm
IFhZWjEgPSBYWVo7Cit0eXBlZGVmIFhZWjIgPSBYWVo7Cit0eXBlZGVmIFhZWjMgPSBYWVo7CisK
K1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNl
IGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7CisgICAgdGhyZWFkIGludCogeDsKKyAgICB0aHJlYWQgaW50KiB5Owor
ICAgIHRocmVhZCBmbG9hdCogZjE7CisgICAgdGhyZWFkIGZsb2F0KiBmMjsKKyAgICBYWVoxIGE7
CisgICAgWFlaMiBiOworICAgIFhZWjMgYzsKKyAgICB0aHJlYWQgaW50W10gaW50QXJyYXlSZWYx
OworICAgIHRocmVhZCBpbnRbXSBpbnRBcnJheVJlZjI7CisgICAgaWYgKCp4ID09ICp5ICYmIHgg
PT0geSAmJiB4ID09IG51bGwgJiYgZjEgPT0gbnVsbCAmJiAqZjEgPT0gMCkgeworICAgICAgICBi
dWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7
CisgICAgfQorfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2Us
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsKKwor
ICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBi
dWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZl
cik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxv
YXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1
ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJV
c2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRF
bmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAgIGNvbnN0IGNvbXB1dGVQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3Qg
cmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsK
KyAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRz
QXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAg
ICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9h
dDMyQXJyYXlbMl0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgK
KyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNV0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZd
ID09IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJl
c3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5p
c2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZHVwbGljYXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvZHVwbGljYXRlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIw
YTRlYjRiNmZiYzBjZDhlMjg3NTYyMzM1MTJmOTBkODRmN2M4MAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGVzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDMgQEAKKworUEFTUyBkdXBsaWNhdGVGdW5jdGlvbnMgCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZHVwbGljYXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZWQ5NmM1MWYwM2YwM2ZlN2FjNTJl
YTg2YzU0NmRhOWFkM2IyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZHVwbGljYXRlcy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgorPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMg
PSB7fTsKKword2hsc2xUZXN0cy5kdXBsaWNhdGVGdW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgdm9pZCBmb28oKSB7IH0KKyAgICAgICAgdm9p
ZCBmb28oKSB7IH0KKyAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIHZv
aWQgZm9vKGludCB4KSB7IH0KKyAgICAgICAgdHlwZWRlZiBBID0gaW50OworICAgICAgICB2b2lk
IGZvbyhBIHgpIHsgfQorICAgIGApOworCisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAg
aW50IGJhcigpIHsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgfQorICAgICAgICBp
bnQgYmFyKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcigpOworICAgICAg
ICB9CisgICAgICAgIGludCBiYXooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFy
KDMpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgMyk7CisKKyAgICBhd2FpdCBj
aGVja0ZhaWwoYAorICAgICAgICBpbnQgb3BlcmF0b3ImW10odGhyZWFkIGludFtdIGEsIHVpbnQg
YikgeworICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGF3
YWl0IGNoZWNrRmFpbChgCisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKHRocmVhZCBpbnRb
XSBhKSB7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQorICAgIGApOworCisgICAg
YXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnRbXSBh
LCB0aHJlYWQgaW50W10gYikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9
PSh0aHJlYWQgaW50KiBhLCB0aHJlYWQgaW50KiBiKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIGApOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Nj
cmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1
cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9w
ZXItdmFyaWFibGUtbGlmZXRpbWUtMi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJl
T25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9w
ZXItdmFyaWFibGUtbGlmZXRpbWUtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vu
c3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5OGMzMTA1
ODZiNmU3ZjI3NmRlYmRkZWFmMGNjOTViMWU4ZjJlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0yLmh0
bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7
CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBmbG9hdCogcHRyLCBm
bG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAqcHRyID0gdmFsdWU7Cit9CisKK3RocmVhZCBmbG9h
dCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gJnZhbHVlOworfQorCit0aHJl
YWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJlYWxQdHIodmFs
dWUpOworfQorCit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgeworICAgIHJl
dHVybiBmaXJzdFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
MSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0KiBwdHJUb1No
YWRlID0gZmlyc3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZTIgPSBz
ZWNvbmRQdHIoMS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBmbG9hdCogZHVt
bXlQdHIgPSAmZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hhZGUyLCAw
LjApOworICAgIHRocmVhZCBmbG9hdCogZHVtbXkyID0gcmVhbFB0cihzaGFkZSk7CisKKyAgICBy
ZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKworICAgIHJlc3VsdC5zaGFkZSA9ICpwdHJUb1No
YWRlMjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAg
cmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRl
ckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0g
e3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNv
bnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5w
dXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVy
In1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJh
c3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJ
bnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1h
cCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsK
KyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owor
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rp
b24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2Fu
dmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1l
LTMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUz
MjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRp
bWUtMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhOGEyOGY1OGNhMjJhMTZmZGJjNTQwMjk0OTQ2NmFiMGI5
M2U1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJl
LXByb3Blci12YXJpYWJsZS1saWZldGltZS0zLmh0bWwKQEAgLTAsMCArMSwxNjMgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1Zf
UG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFz
c2lnblRvUHRyKHRocmVhZCBmbG9hdCogcHRyLCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAq
cHRyID0gdmFsdWU7Cit9CisKK3RocmVhZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sK
KyAgICBmbG9hdCB2ID0gdmFsdWU7CisgICAgcmV0dXJuICZ2OworfQorCit0aHJlYWQgZmxvYXQq
IGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJlYWxQdHIodmFsdWUpOworfQor
Cit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiBmaXJz
dFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAg
ICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0KiBwdHJUb1NoYWRlID0gZmly
c3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZTIgPSBzZWNvbmRQdHIo
MS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBmbG9hdCogZHVtbXlQdHIgPSAm
ZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hhZGUyLCAwLjApOworICAg
IHRocmVhZCBmbG9hdCogZHVtbXkyID0gcmVhbFB0cihzaGFkZSk7CisKKyAgICByZXN1bHQucG9z
aXRpb24gPSBwb3NpdGlvbjsKKworICAgIHJlc3VsdC5zaGFkZSA9ICpwdHJUb1NoYWRlMjsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihm
bG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZs
b2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFy
dChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2
ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxv
Y2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJp
YnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOwor
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLWV4cGVjdGVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1s
aWZldGltZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNk
MjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWE2YTJlZThiNDA3MzYzNjNiNGI2NzM0MzA1NzVhMTI0MzM5ZmQ5YgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxp
ZmV0aW1lLmh0bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZl
cnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQg
c2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBmbG9h
dCogcHRyLCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAqcHRyID0gdmFsdWU7Cit9CisKK3Ro
cmVhZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gJnZhbHVlOwor
fQorCit0aHJlYWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJl
YWxQdHIodmFsdWUpOworfQorCit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkg
eworICAgIHJldHVybiBmaXJzdFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVy
dGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0
KiBwdHJUb1NoYWRlID0gZmlyc3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9T
aGFkZTIgPSBzZWNvbmRQdHIoMS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBm
bG9hdCogZHVtbXlQdHIgPSAmZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRv
U2hhZGUyLCAwLjApOworICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZSwgc2hhZGUp
OworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisKKyAgICByZXN1bHQuc2hhZGUg
PSAqcHRyVG9TaGFkZTI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9h
dDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0
IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7
CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKwor
YXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0g
ZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBj
b25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFz
dGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Cisg
ICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQs
IGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRl
MCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0
cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2
fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAg
IGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9Owor
ICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlm
b3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExh
eW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
cjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIp
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEu
MDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZm
ZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwg
c2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNv
dXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Cisg
ICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7
CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4
dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFp
bihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENo
YWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBv
dXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJl
ZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRz
ID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwg
bG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVu
ZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRH
cm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZl
cnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXco
NCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0
IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0
UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsK
K30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW51bS1zcGVjLXRlc3RzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnVtLXNwZWMtdGVzdHMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJkMjQ2NGU5OTc3ZGY2NTA4YzI4NmQ3MDg4Y2Q5ODRlMDk2Mjhk
ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW51bS1zcGVj
LXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyBlbnVtRHVwbGljYXRl
cyAKK1BBU1MgZGVmYXVsdEVudW1Db25zdHJ1Y3RvciAKK1BBU1MgZW51bUFycmF5UmVmQmFzZSAK
K1BBU1MgZW51bUZsb2F0QmFzZSAKK1BBU1MgZW51bVB0ckJhc2UgCitQQVNTIGVudW1TdHJ1Y3RC
YXNlIAorUEFTUyBlbnVtTm9NZW1iZXJzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvZW51bS1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
ZW51bS1zcGVjLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU2YWI5YmQwNTEzMjBiYTMwZDNlYTNh
ZDE0MTBlYTJhNmMzYWY1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9lbnVtLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxl
PgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0
IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5lbnVtRHVwbGljYXRlcyA9IGFzeW5jICgp
ID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICAgICAgZW51bSBGb28geworICAg
ICAgICAgICAgICAgIFdhciA9IDQyLAorICAgICAgICAgICAgICAgIEZhbWluZSA9IDAsCisgICAg
ICAgICAgICAgICAgUGVzdGlsZW5jZSA9IDIzLAorICAgICAgICAgICAgICAgIERlYXRoID0gNDIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9OworCit3aGxzbFRlc3RzLmRlZmF1bHRFbnVt
Q29uc3RydWN0b3IgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgZW51bSBXZWVrZGF5IHsKKyAgICAgICAgICAgIE1vbmRheSwKKyAgICAgICAgICAgIFR1ZXNk
YXksCisgICAgICAgICAgICBXZWRuZXNkYXksCisgICAgICAgICAgICBUaHVyc2RheSwKKyAgICAg
ICAgICAgIFBpenphZGF5CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFdlZWtkYXkgeCA9IFdlZWtkYXkoKTsKKyAgICAgICAgICAgIHJldHVybiA0
MjsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLmVudW1B
cnJheVJlZkJhc2UgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBlbnVtIEZvbyA6IHRocmVhZCBpbnRbXSB7CisgICAgICAgICAgICAg
ICAgQmFyCisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLmVudW1G
bG9hdEJhc2UgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICBlbnVtIEZvbyA6IGZsb2F0IHsKKyAgICAgICAgICAgICAgICBCYXIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuZW51bVB0ckJhc2UgPSBh
c3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBlbnVtIEZvbyA6IHRocmVhZCBpbnQqIHsKKyAgICAgICAgICAgICAgICBCYXIKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuZW51bVN0cnVjdEJhc2UgPSBhc3lu
YyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBz
dHJ1Y3QgVGhpbmd5IHsgfQorICAgICAgICAgICAgZW51bSBGb28gOiBUaGluZ3kgeworICAgICAg
ICAgICAgICAgIEJhcgorICAgICAgICAgICAgfQorICAgICAgICBgKTsKK307CisKK3dobHNsVGVz
dHMuZW51bU5vTWVtYmVycyA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisg
ICAgICAgIGAKKyAgICAgICAgICAgIGVudW0gRm9vIHsgfQorICAgICAgICBgKTsKK307CisKK3J1
blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZXF1YWxpdHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2VxdWFsaXR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzM4NDc4M2Y0
ODUxMGYzNTNjMTUzMjc0NTQ3ZTVhN2U5ZGUwNmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2VxdWFsaXR5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBA
CisKK1BBU1MgZXF1YWxpdHkgCitQQVNTIG5vdEVxdWFsaXR5IAorUEFTUyBlcXVhbGl0eVR5cGVG
YWlsdXJlIAorUEFTUyBlcXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBlcXVhbHNXcm9u
Z1JldHVyblR5cGUgCitQQVNTIGxlc3NFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggCitQQVNTIGxl
c3NFcXVhbFdyb25nUmV0dXJuVHlwZSAKK1BBU1MgbGVzc1RoYW5Xcm9uZ0FyZ3VtZW50TGVuZ3Ro
IAorUEFTUyBsZXNzVGhhbldyb25nUmV0dXJuVHlwZSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2VxdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
ZXF1YWxpdHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjdmYTczOTkzNTIzZWU2MjQxYWFlN2FmNGVhYzU3
ZWRkNTYwMzhkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vx
dWFsaXR5Lmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLmVxdWFsaXR5ID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9n
cmFtID0gImJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ID09IHk7IH0iOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1ha2VVaW50
KDcpXSksIHRydWUpOworICAgIHByb2dyYW0gPSAiYm9vbCBmb28oaW50IHgsIGludCB5KSB7IHJl
dHVybiB4ID09IHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgZmFsc2UpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoNyksIG1ha2VJbnQoNyldKSwgdHJ1ZSk7CisgICAgcHJvZ3JhbSA9ICJib29sIGZvbyhi
b29sIHgsIGJvb2wgeSkgeyByZXR1cm4geCA9PSB5OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1h
a2VCb29sKHRydWUpXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2woZmFsc2Up
XSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pLCB0cnVlKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2wodHJ1ZSldKSwgdHJ1ZSk7Cit9CisKK3dobHNsVGVz
dHMubm90RXF1YWxpdHkgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAiYm9vbCBm
b28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggIT0geTsgfSI7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1h
a2VVaW50KDUpXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg3KV0pLCBmYWxzZSk7
CisgICAgcHJvZ3JhbSA9ICJib29sIGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggIT0geTsg
fSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtl
SW50KDcpXSksIGZhbHNlKTsKKyAgICBwcm9ncmFtID0gImJvb2wgZm9vKGJvb2wgeCwgYm9vbCB5
KSB7IHJldHVybiB4ICE9IHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2wodHJ1ZSld
KSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKGZhbHNlKV0pLCB0cnVlKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1
ZSksIG1ha2VCb29sKHRydWUpXSksIGZhbHNlKTsKK307CisKK3dobHNsVGVzdHMuZXF1YWxpdHlU
eXBlRmFpbHVyZSA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoImJvb2wgZm9v
KGludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOworfTsKKword2hsc2xUZXN0cy5l
cXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCkgeyByZXR1cm4g
dHJ1ZTsgfQorICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGludCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAg
ICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7
Cit9OworCit3aGxzbFRlc3RzLmVxdWFsc1dyb25nUmV0dXJuVHlwZSA9IGFzeW5jICgpID0+IHsK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28g
eyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3I9PShGb28sIEZvbykgeyByZXR1cm4gNDI7IH0K
KyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMubGVzc0VxdWFsV3JvbmdBcmd1bWVudExlbmd0
aCA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I8PSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBib29sIG9wZXJhdG9y
PD0oaW50KSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPD0oaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5sZXNzRXF1
YWxXcm9uZ1JldHVyblR5cGUgPSBhc3luYyAoKSA9PiB7CisgICAgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9y
PD0oRm9vLCBGb28pIHsgcmV0dXJuIDQyOyB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3Rz
Lmxlc3NUaGFuV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBj
aGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8KCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8KGludCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAg
ICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3I8KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7Cit9
CisKK3dobHNsVGVzdHMubGVzc1RoYW5Xcm9uZ1JldHVyblR5cGUgPSBhc3luYyAoKSA9PiB7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsg
fQorICAgICAgICAgICAgaW50IG9wZXJhdG9yPChGb28sIEZvbykgeyByZXR1cm4gNDI7IH0KKyAg
ICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1
NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NGVkYTMwZjY0YjZlODRkZDMwYzBlZDhjN2ZlOTE0YTUzYTRjZjI3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGgt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGZsb2F0TWF0aCAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGguaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2MGEzYzNlYTMz
NzYxYzMwYzIwMDI0OGI4ODMzOWY0ZWU4YjAxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qg
d2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmZsb2F0TWF0aCA9IGFzeW5jICgpID0+IHsK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgYm9vbCBmb28oKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gNDIuNSA9PSA0Mi41OworICAgICAgICB9CisgICAgICAgIGZsb2F0IGJh
cihmbG9hdCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQor
ICAgICAgICBmbG9hdCBmb282KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcig3
LjUpOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvbzkoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmxvYXQoNy41KTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28xMigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdCg3KTsKKyAgICAgICAgfQorICAg
ICAgICBmbG9hdCBmb28xMygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHggPSA3LjU7
CisgICAgICAgICAgICByZXR1cm4gZmxvYXQoeCk7CisgICAgICAgIH0KKyAgICBgOworCisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9vIiwgW10p
LCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dy
YW0sICJmb282IiwgW10pLCA3LjUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzkiLCBbXSksIDcuNSk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTIiLCBbXSksIDcpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEzIiwgW10p
LCA3LjUpOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBp
bnQgYmFyKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB4Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYmFyKDQuMCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgYmFyKGludCB4KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFy
KDQuMGYpOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFp
bCgKKyAgICAgICAgYAorICAgICAgICAgICAgdWludCBiYXIodWludCB4KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFyKDQuMCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICB1aW50IGJhcih1aW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZm9vKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXIoNC4wZik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zvci1sb29wLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mb3ItbG9vcC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWU2N2U1ZmIzZmU4ZDQxY2ZkYTg1OTY1NDEyNGNhOGU1Mzc4MjM1NQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mb3ItbG9vcC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgZm9yTG9vcCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2Zvci1sb29wLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvZm9yLWxvb3AuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTlhOWNmODdlYTM2ZmJkYzU4YTdjNWZhMjg4
NzZiNzg2YzVlMDcyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2Zvci1sb29wLmh0bWwKQEAgLTAsMCArMSwxNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Cis8dGl0bGU+THZhbHVlcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3Qt
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0
cy5mb3JMb29wID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
aW50IGZvbzEoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAg
ICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAx
KSB7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzIoaW50IHgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgZm9vMyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7
CisgICAgICAgICAgICBpbnQgaSA9IDEwMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgeDsgaSA9IGkgKyAxKSB7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAgICAgICAgaW50
IGZvbzQoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaSA9PSA0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBzdW0gPSBzdW0gKyBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1
bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vNShpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkg
PSBpICsgMSkgeworICAgICAgICAgICAgICAgIGlmIChpID09IDUpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIGk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAgICB9CisgICAgICAgIGludCBmb282KGlu
dCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyA7IGkgPSBpICsgMSkgeworICAgICAgICAgICAgICAgIGlmIChpID49IHgp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN1bSA9IHN1bSAr
IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAgICB9Cisg
ICAgICAgIGludCBmb283KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3VtID0g
MDsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoIDsgOyBpID0gaSAr
IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSB4KQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vOChpbnQgeCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBpbnQgaSA9
IDA7CisgICAgICAgICAgICBmb3IgKCA7IDsgKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPj0g
eCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc3VtID0gc3Vt
ICsgaTsKKyAgICAgICAgICAgICAgICBpID0gaSArIDE7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gc3VtOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtlSW50KDMpXSksIDMpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28xIiwg
W21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzEiLCBbbWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbbWFrZUludCgzKV0pLCAz
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
MiIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW21ha2VJbnQoNSldKSwgMTApOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoMyld
KSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzMiLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtlSW50
KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb280IiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbbWFrZUludCg1KV0pLCA2KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtl
SW50KDYpXSksIDExKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vNSIsIFttYWtlSW50KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb281IiwgW21ha2VJbnQoNCldKSwgNik7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBb
bWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg2KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg3KV0pLCAx
MCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzYiLCBbbWFrZUludCgzKV0pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNiIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNSld
KSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb282IiwgW21ha2VJbnQoNildKSwgMTUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNyldKSwgMjEpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW21ha2VJ
bnQoMyldKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzciLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFtt
YWtlSW50KDYpXSksIDE1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDcpXSksIDIxKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIsIFttYWtlSW50KDMpXSksIDMp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284
IiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg2KV0p
LCAxNSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzgiLCBbbWFrZUludCg3KV0pLCAyMSk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgOyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHggPSBpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoIDsgeCA8IDEwOyApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVu
VGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0ZXItdHlwZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZ2V0dGVyLXNldHRlci10eXBlLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wMzU3ZWM3YjdhOTA0ZTEwZDJlNDFiYjM2YWZmNTY2Y2E4MzAxYTY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0ZXItdHlw
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgZ2V0dGVyVHlwZSAKK1BBU1Mg
c2V0dGVyVHlwZSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRl
ci1zZXR0ZXItdHlwZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0
ZXItdHlwZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMWYwNDE2MjQyNDY5YzEzODEzOTBmYTQ4Nzk4Y2Y5
M2Y4NmY3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZ2V0
dGVyLXNldHRlci10eXBlLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKwor
d2hsc2xUZXN0cy5nZXR0ZXJUeXBlID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFp
bChgCisgICAgICAgIGludCBvcGVyYXRvci54KHRocmVhZCBpbnRbXSBmb28pCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmb29bMF07CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdh
aXQgY2hlY2tGYWlsKGAKKyAgICAgICAgaW50IG9wZXJhdG9yLngoaW50WzNdIGZvbykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZvb1swXTsKKyAgICAgICAgfQorICAgIGApOyAKKyAg
ICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgb3BlcmF0b3JbXSh0aHJlYWQgaW50W10g
Zm9vLCBpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb29baW5kZXhd
OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGlu
dCBvcGVyYXRvci54KGludFszXSBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
b29bMF07CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAg
ICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBp
bnQgb3BlcmF0b3JbXShGb28gZm9vLCB1aW50NCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZvb1tpbmRleC54XTsKKyAgICAgICAgfQorICAgIGApOyAKK307CisKK3dobHNs
VGVzdHMuc2V0dGVyVHlwZSA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAor
ICAgICAgICB0aHJlYWQgaW50W10gb3BlcmF0b3IueD0odGhyZWFkIGludFtdIGZvbywgdWludCB4
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgYCk7
IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGludFszXSBvcGVyYXRvci54PShpbnRb
M10gZm9vLCB1aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAg
ICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgdGhyZWFkIGlu
dFtdIG9wZXJhdG9yW109KHRocmVhZCBpbnRbXSBmb28sIHVpbnQgeCwgdWludCB5KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3
YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGludFszXSBvcGVyYXRvci54PShpbnRbM10gZm9vLCB1
aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAg
ICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAg
ICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBGb28gb3BlcmF0b3JbXT0oRm9vIGZv
bywgZmxvYXQ0IHksIHVpbnQgeikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54
OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIHN0
cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9w
ZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54Owor
ICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvci55PShGb28gZm9vLCBpbnQ0IHgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICBmb28ueCA9IHgueDsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICBgKTsgCit9OworCity
dW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaHVnZS1hcnJheS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvaHVnZS1hcnJheS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4
MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9odWdlLWFycmF5LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2h1Z2UtYXJy
YXkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9odWdlLWFycmF5Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDA4YTJmZjIyZWJhNTVlZjY2ZTc0YjI5ZjRlMjNhOTlmMDJhYjkzMgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9odWdlLWFycmF5Lmh0bWwKQEAgLTAs
MCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordm9pZCBmaWxsKHRocmVhZCBmbG9hdFtdIGFycmF5
LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIGFycmF5W2ldID0gdmFsdWU7CisgICAgfQorfQorCitbbnVtdGhyZWFk
cygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZm
ZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQp
IHsKKyAgICBmbG9hdFsxMDAwXSBhcnJheTsKKyAgICBpZiAoYXJyYXkubGVuZ3RoICE9IDEwMDAp
CisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7
ICsraSkgeworICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhcnJheVswXSA9IDAuMTMzNzsKKyAgICBpZiAoYXJyYXlbMF0gIT0gMC4x
MzM3KQorICAgICAgICByZXR1cm47CisKKyAgICB0aHJlYWQgZmxvYXRbXSBhcnJheVB0ciA9IEBh
cnJheTsKKyAgICBpZiAoYXJyYXlQdHIubGVuZ3RoICE9IDEwMDApCisgICAgICAgIHJldHVybjsK
KworICAgIGZpbGwoYXJyYXlQdHIsIDAuMTAxMCk7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwg
YXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5UHRyW2ldICE9IDAuMTAx
MCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFycmF5W2ldICE9IDAuMTAxMCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxsKEBhcnJheSwgMC4wMTAxKTsK
KyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICBp
ZiAoYXJyYXlQdHJbaV0gIT0gMC4wMTAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoYXJyYXlbaV0gIT0gMC4wMTAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5n
OiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRl
U3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7
CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0
IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVC
dWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIs
IDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdh
aXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJy
YXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRz
SW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQor
ICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2lm
LXN0YXRlbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaWYtc3Rh
dGVtZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTM4M2U3ZmFkNDZmZTM1N2QxOWUxMTBh
ZDU2Y2Q4NDUyMWE2YmEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2lmLXN0YXRlbWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1MgaWZT
dGF0ZW1lbnQgCitQQVNTIGlmRWxzZVN0YXRlbWVudCAKK1BBU1MgaWZFbHNlSWZTdGF0ZW1lbnQg
CitQQVNTIGlmRWxzZUlmRWxzZVN0YXRlbWVudCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2lmLXN0YXRlbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MjY0OGNkNWRjMTNhMzAyMzVhYTJkZDk1
ZGM1YmM5Zjg1NjFmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvaWYtc3RhdGVtZW50Lmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0g
e307CisKK3dobHNsVGVzdHMuaWZTdGF0ZW1lbnQgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBw
cm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgeSA9IDY7CisgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CisgICAgICAgICAgICAgICAg
eSA9IDg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQor
ICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDMpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSld
KSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDYpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCld
KSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDkpXSksIDYpOworfQorCit3aGxzbFRlc3RzLmlmRWxzZVN0YXRlbWVu
dCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28o
aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgIGlm
ICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICB5ID0gODsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgeSA9IDk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4geTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDMpXSksIDkpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0p
LCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNSldKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDYpXSksIDkpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0p
LCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoOCldKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDkpOworfQorCit3aGxzbFRl
c3RzLmlmRWxzZUlmU3RhdGVtZW50ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHkg
PSA2OworICAgICAgICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAgICAgIHkgPSA4Owor
ICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDgpIHsKKyAgICAgICAgICAgICAgICB5ID0gOTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgYDsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoMyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg1KV0pLCA2KTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNildKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoOSldKSwgNik7Cit9CisKK3dobHNsVGVzdHMuaWZFbHNlSWZFbHNlU3RhdGVtZW50
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhp
bnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgaWYg
KHggPT0gNykgeworICAgICAgICAgICAgICAgIHkgPSA4OworICAgICAgICAgICAgfSBlbHNlIGlm
ICh4ID09IDgpIHsKKyAgICAgICAgICAgICAgICB5ID0gOTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgeSA9IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzKV0pLCAxMCk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQp
XSksIDEwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQoNSldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2KV0pLCAxMCk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDcpXSksIDgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOSldKSwgMTApOworfQorCity
dW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIyOGU1MGU3MTQ3NTBiNmNlYWM3NjIyMmYwNWNlYmE2MmQxYTUwYzMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5jcmVtZW50LWRlY3Jl
bWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgaW5jcmVtZW50QW5kRGVj
cmVtZW50IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5jcmVtZW50
LWRlY3JlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNy
ZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjY2NTlhNzNmZGQ3NzhmOWQxY2E2ZGY4YTliMjkyYWQy
ODQ1MWVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3Jl
bWVudC1kZWNyZW1lbnQuaHRtbApAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9
ImxvbmciPgorPHRpdGxlPkNvcHlpbmcuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNs
VGVzdHMuaW5jcmVtZW50QW5kRGVjcmVtZW50ID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9n
cmFtID0gYAorICAgICAgICBpbnQgZm9vMSgpIHsgaW50IHggPSAwOyByZXR1cm4geCsrOyB9Cisg
ICAgICAgIGludCBmb28yKCkgeyBpbnQgeCA9IDA7IHgrKzsgcmV0dXJuIHg7IH0KKyAgICAgICAg
aW50IGZvbzMoKSB7IGludCB4ID0gMDsgcmV0dXJuICsreDsgfQorICAgICAgICBpbnQgZm9vNCgp
IHsgaW50IHggPSAwOyArK3g7IHJldHVybiB4OyB9CisgICAgICAgIGludCBmb281KCkgeyBpbnQg
eCA9IDA7IHJldHVybiB4LS07IH0KKyAgICAgICAgaW50IGZvbzYoKSB7IGludCB4ID0gMDsgeC0t
OyByZXR1cm4geDsgfQorICAgICAgICBpbnQgZm9vNygpIHsgaW50IHggPSAwOyByZXR1cm4gLS14
OyB9CisgICAgICAgIGludCBmb284KCkgeyBpbnQgeCA9IDA7IC0teDsgcmV0dXJuIHg7IH0KKyAg
ICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28xIiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vMiIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW10pLCAxKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgMCk7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzYiLCBb
XSksIC0xKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vNyIsIFtdKSwgLTEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb284IiwgW10pLCAtMSk7Cit9OworCitydW5UZXN0cyh3aGxzbFRlc3Rz
KTsKKzwvc2NyaXB0PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvaW5kZXgtYW5kZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2luZGV4LWFuZGVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmNiNDk0NGVjYjgzNTljYzU0
N2QyOWIxNTJiYjIxMTAwNzFmMzZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2luZGV4LWFuZGVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFT
UyBpbmRleEFuZGVyV2l0aE5vdGhpbmdXcm9uZyAKK1BBU1MgaW5kZXhBbmRlcldpdGhXcm9uZ051
bWJlck9mQXJndW1lbnRzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
aW5kZXgtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1hbmRlci5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRhNzI4NzhiYWYxYTQ1YWQ0MjcyNWY2NTJmNjRhNTZiYTk0YmEwMWMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5kZXgtYW5kZXIu
aHRtbApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hh
cnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxl
PlRlc3Qgc3RydWN0cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5pbmRl
eEFuZGVyV2l0aE5vdGhpbmdXcm9uZyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0K
KyAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZm9vLCB1aW50KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIHg7CisgICAgICAgICAgICB4
LnggPSAxMzsKKyAgICAgICAgICAgIHJldHVybiB4WzY2Nl07CisgICAgICAgIH0KKyAgICBgOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSksIDEzKTsKK30KKword2hsc2xUZXN0cy5pbmRleEFuZGVyV2l0aFdyb25nTnVtYmVyT2ZBcmd1
bWVudHMgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10oKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAgIHJldHVybiAmeDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICAgICAgaW50IHg7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQg
Rm9vKiBmb28pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPng7
CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0Zh
aWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgICAg
IGludCB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3Im
W10odGhyZWFkIEZvbyogZm9vLCB1aW50LCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKwor
cnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YWJiZmYxMTM0MzljMzEwZmI3NDZhYTUyZjQ5NDhmMjBmNmY3YzU0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LWdldHRlci1z
ZXR0ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIHBvaW50ZXJJbmRleEdl
dHRlciAKK1BBU1MgcG9pbnRlckdldHRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2luZGV4LWdldHRlci1zZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGEwNzlmYTU3ZDE4NWM1
YWRmMjY4Y2U1ZDJkY2ZmYjE0NGJlMzJmZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWwKQEAgLTAsMCArMSw4MSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1l
PSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhh
cm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMucG9pbnRlckluZGV4
R2V0dGVyID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oZGV2aWNlIGludCosIHVpbnQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
YCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBv
cGVyYXRvcltdKHRocmVhZCBpbnQqLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAgYXdhaXQg
Y2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXSh0aHJlYWRn
cm91cCBpbnQqLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiA1
NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAor
ICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXShjb25zdGFudCBpbnQqLCB1aW50
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiA1NDM7CisgICAgICAgICAg
ICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLnBvaW50ZXJHZXR0ZXIgPSBhc3luYyAo
KSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQg
b3BlcmF0b3IuZm9vKGRldmljZSBpbnQqKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbyh0aHJlYWQgaW50
KikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAg
ICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAg
ICAgICAgIGludCBvcGVyYXRvci5mb28odGhyZWFkZ3JvdXAgaW50KikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAgICAgfQorICAgICAgICBgKTsK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRv
ci5mb28oY29uc3RhbnQgaW50KikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gNTQzOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworCitydW5UZXN0cyh3aGxz
bFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIzNjM5ZDA1YTZiMzQyZjhmZWNhNDdmODE1NDMyNDg2N2YxMGVlNGMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5kZXgtc2V0dGVyLWdldHRlci1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw3IEBACisKK1BBU1MgaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVy
bG9hZCAKK1BBU1MgaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkIAorUEFTUyBu
b3RMb25lSW5kZXhTZXR0ZXIgCitQQVNTIGxvbmVJbmRleFNldHRlciAKK1BBU1MgbG9uZUluZGV4
U2V0dGVyUG9pbnRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2lu
ZGV4LXNldHRlci1nZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1z
ZXR0ZXItZ2V0dGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhMTVhYTc0NjRjN2E3ZTI2MjE4YWY2MWUy
NzhhN2I1Y2RhYmUwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLmluZGV4U2V0dGVyV2l0aE5vR2V0dGVyT3ZlcmxvYWQgPSBhc3lu
YyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIHN0cnVjdCBCYXIgeyB9CisgICAgICAgICAgICBp
bnQgb3BlcmF0b3JbXShGb28sIHVpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDUzNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJhciBvcGVyYXRvcltdPShC
YXIsIHVpbnQsIGludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQmFy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAgICAKK307CisKK3dobHNsVGVz
dHMuaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkID0gYXN5bmMgKCkgPT4KK3sK
KyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICBzdHJ1Y3QgQmFyIHsgfQorICAgICAgICBp
bnQgb3BlcmF0b3JbXShCYXIsIHVpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiA1
MzQ7CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9yW109KEJhciwgdWludCwgaW50KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQmFyKCk7CisgICAgICAgIH0KKyAgICAgICAg
aW50IGZvbygpIHsgcmV0dXJuIEJhcigpWzBdOyB9CisgICAgICAgIGludCBiYXIoKSB7CisgICAg
ICAgICAgICBCYXIgYjsKKyAgICAgICAgICAgIGJbMF0gPSA0MDA7CisgICAgICAgICAgICByZXR1
cm4gYlswXTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTM0KTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCA1MzQpOworfTsKKwor
d2hsc2xUZXN0cy5ub3RMb25lSW5kZXhTZXR0ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGNvbnN0
IHByb2dyYW0gPSBgCisgICAgICAgIGludCBvcGVyYXRvcltdKGludCwgdWludCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIDY1OworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRv
cltdPShpbnQsIHVpbnQsIGludCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDU0MzsK
KyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkgeworICAgICAgICAgICAgaW50IHg7CisgICAg
ICAgICAgICByZXR1cm4geFswXTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKCkgeworICAg
ICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB4WzBdID0gNDI7CisgICAgICAgICAgICByZXR1
cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNjUpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDU0Myk7Cit9OworCit3aGxz
bFRlc3RzLmxvbmVJbmRleFNldHRlciA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCB1aW50LCBp
bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfTsKKword2hsc2xUZXN0cy5sb25lSW5kZXhT
ZXR0ZXJQb2ludGVyID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yW109KHRocmVhZCBpbnQqIHB0
ciwgdWludCwgaW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwdHI7
CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAgICAKK307CisKK3J1blRlc3RzKHdo
bHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvaW50LWJpdC1tYXRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9pbnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MWI2YzUzZTFk
Y2MwY2RiNTdmNjU2ZmMyNjVkYjlmMjAxMjVmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvaW50LWJpdC1tYXRoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkg
QEAKKworUEFTUyBpbnRCaXRBbmQgCitQQVNTIGludEJpdE9yIAorUEFTUyBpbnRCaXRYb3IgCitQ
QVNTIGludEJpdE5vdCAKK1BBU1MgaW50TFNoaWZ0IAorUEFTUyBpbnRSU2hpZnQgCitQQVNTIGlu
dFNpbXBsZU1hdGggCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQt
Yml0LW1hdGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQtYml0LW1hdGguaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMTdhZjRkODhlNzgzYWJkZjY0NWIyODFkMTgyNGEzZjg5MzRkZGZlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2ludC1iaXQtbWF0aC5o
dG1sCkBAIC0wLDAgKzEsMTEwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hh
cnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxl
PlRlc3QgaW50IGJpdCBtYXRoLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3Rz
LmludEJpdEFuZCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAg
IGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAm
IGI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKSwgbWFrZUludCg3KV0pLCAxKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoNjU1MzUpLCBtYWtlSW50KDQyKV0pLCA0Mik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZUludCgt
NyldKSwgLTcpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCgwKSwgbWFrZUludCg4NTczMildKSwgMCk7Cit9CisKK3dobHNs
VGVzdHMuaW50Qml0T3IgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAg
ICAgICBpbnQgZm9vKGludCBhLCBpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGEgfCBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMSksIG1ha2VJbnQoNyldKSwgNyk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDY1NTM1KSwgbWFrZUludCg0MildKSwgNjU1MzUpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgtMSksIG1h
a2VJbnQoLTcpXSksIC0xKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1ha2VJbnQoODU3MzIpXSksIDg1NzMyKTsK
K30KKword2hsc2xUZXN0cy5pbnRCaXRYb3IgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9n
cmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCBhLCBpbnQgYikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMSksIG1ha2VJ
bnQoNyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFrZUludCg0MildKSwgNjU0OTMpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCgtMSksIG1ha2VJbnQoLTcpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKSwgbWFrZUludCg4NTczMild
KSwgODU3MzIpOworfQorCit3aGxzbFRlc3RzLmludEJpdE5vdCA9IGFzeW5jICgpID0+Cit7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IGEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB+YTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIC0y
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoNjU1MzUpXSksIC02NTUzNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKV0pLCAwKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoMCldKSwgLTEpOworfQorCit3aGxzbFRlc3RzLmludExTaGlmdCA9IGFzeW5jICgpID0+Cit7
CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IGEsIHVpbnQgYikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKKyAgICAgICAgfQorICAgIGA7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KDEpLCBtYWtlVWludCg3KV0pLCAxMjgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NTUzNSksIG1ha2VVaW50
KDIpXSksIDI2MjE0MCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZVVpbnQoNSldKSwgLTMyKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoMCksIG1ha2VVaW50KDMpXSksIDApOworfQorCit3aGxzbFRlc3RzLmludFJTaGlmdCA9IGFz
eW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IGEs
IHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPj4gYjsKKyAgICAgICAg
fQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlVWludCg3KV0pLCAwKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUp
LCBtYWtlVWludCgyKV0pLCAxNjM4Myk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZVVpbnQoNSldKSwgLTEp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgwKSwgbWFrZVVpbnQoMyldKSwgMCk7Cit9CisKK3dobHNsVGVzdHMuaW50U2lt
cGxlTWF0aCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9ICJpbnQgZm9vKGludCB4
LCBpbnQgeSkgeyByZXR1cm4geCArIHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCAx
Mik7CisgICAgcHJvZ3JhbSA9ICJpbnQgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCAtIHk7
IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSksIG1ha2VJbnQo
NyldKSwgLTIpOworICAgIHByb2dyYW0gPSAiaW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJu
IHggKiB5OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgMzUpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KSwg
bWFrZUludCgtNSldKSwgLTM1KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQtbGl0
ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQt
bGl0ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmRhZDY1OTNiNjEyN2E2
MmYyZTc0YzE4MDRiOTJmMmQzMDkxY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MyBAQAorCitQQVNTIHR3b0ludExpdGVyYWxzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvaW50LWxpdGVyYWwtY29tcGFyZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGY0MmU4MmViN2E5
YTZiYmRkODYwMzI0OTBkNTdmYTdlZTFjOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUuaHRtbApAQCAtMCwwICsxLDI0IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5h
bWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3Qg
aGFybmVzcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy50
d29JbnRMaXRlcmFscyA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgYm9vbCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gNDIgPT0gNDI7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10pLCB0cnVlKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7
Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9sb2dpY2FsLW5lZ2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9sb2dpY2FsLW5lZ2F0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzk4MTQwNTMzZDQ1
Y2U0NTQzNjFkNTY2NWI4NzQ3YTI0MDUwMDNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2xvZ2ljYWwtbmVnYXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MyBAQAorCitQQVNTIGxvZ2ljYWxOZWdhdGlvbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2xvZ2ljYWwtbmVnYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIyMTQ1ZmU1ZDBlODBhZTlh
NDQwZDNkZWJkODc3YjcwMTgzNjY4NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWwKQEAgLTAsMCArMSwyMiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5MdmFsdWVzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLmxvZ2ljYWxOZWdhdGlvbiA9IGFzeW5jICgpID0+Cit7CisgICAg
bGV0IHByb2dyYW0gPSAiYm9vbCBmb28oYm9vbCB4KSB7IHJldHVybiAheDsgfSI7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJv
b2wodHJ1ZSldKSwgZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKV0pLCB0cnVlKTsKK30KKworcnVu
VGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1icmVhay1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2xvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Jm
ODY5YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1icmVhay1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2xvb3BzLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtYnJl
YWsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jODIzODJkYWMwZTE5MGEyYTI0OGM1NzNiNjRkMWQ1OGY2NTBm
YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLWJy
ZWFrLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRl
eE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkp
IHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBmb3Ig
KHVpbnQgaSA9IDA7IGkgPCAxMDsgKGkgPSBpICsgMSwgc2hhZGUgPSBzaGFkZSArIDEuMCkpIHsK
KyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHNoYWRlID0gc2hhZGUgKyAxLjA7CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9z
aXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBz
aGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisg
ICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0
Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAx
LCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBb
YXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAs
IGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzog
MCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRl
dmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOworCisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
MTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5k
aW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0
YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd0Js
YWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2xvb3BzLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmODY5YTk3
OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJh
d0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2xvb3BzLWNvbnRpbnVlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtY29u
dGludWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2I0ZTkwMThlM2FkM2U0NDFiZjMzMjJiNWI5NDNlNmY2
MWE4YWFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3Bz
LWNvbnRpbnVlLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0
IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9vbCBiID0gdHJ1ZTsKKyAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGlmIChiKSB7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzaGFkZSA9IHNoYWRl
ICsgMS4wOworICAgIH0KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJl
c3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQg
ZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1Rh
cmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9
CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Cisg
ICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0
IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9
OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJs
ZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFM
TAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJp
YnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07
CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxv
YXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0
dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6
IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3Rh
Z2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBk
ZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBp
cGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVS
ZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4wOworCisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzdd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4w
OworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZm
ZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3Vy
Y2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBy
ZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHti
aW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3Vw
RGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3Jv
dXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0
Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2Us
IGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNv
bmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0
VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBj
b25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7
fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBj
b2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2
ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNv
bG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMt
ZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1leHBlY3RlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtZXhwZWN0
ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9sb29wcy1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9sb29wcy1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZmQyODA1Y2I2MDgyNjNkYzkxOWVhMTM2NDcwMWM0N2JhNDMxYTAxCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIGRvV2hpbGUgCitQQVNTIHNpbXBsZVdoaWxlIAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtc3BlYy10ZXN0cy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOGE5ODRkNTEyMDM0YWE4MTY2MzcwMjJhNTUzNzE0YzFiYTVkNDQwCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMuaHRt
bApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNl
dD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRl
c3QgbG9vcHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuZG9XaGlsZSA9
IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28xKGlu
dCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeSA9IDc7CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgeSA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IHdoaWxlICh4IDwgMTApOworICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0K
KyAgICAgICAgaW50IGZvbzIoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5ID0g
NzsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB5ID0gODsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gd2hpbGUgKHkgPT0gNyk7CisgICAgICAgICAgICBy
ZXR1cm4geTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vMyhpbnQgeCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgaWYgKHggPT0gMTEpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IDE1OworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c3VtID0gc3VtICsgeDsKKyAgICAgICAgICAgICAgICB4ID0geCArIDE7CisgICAgICAgICAgICB9
IHdoaWxlICh4IDwgMTMpOworICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAg
IGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzEiLCBbbWFrZUludCgxKV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtlSW50KDExKV0pLCA4KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFttYWtlSW50KDEp
XSksIDgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28zIiwgW21ha2VJbnQoOSldKSwgMTkpOworfQorCit3aGxzbFRlc3RzLnNpbXBsZVdoaWxl
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhp
bnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHggPCAxMykKKyAgICAgICAgICAg
ICAgICB4ID0geCAqIDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDEpXSksIDE2KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJm
Yjc2NzVjMDZjN2Q4Yjk0OWQ3MDU5YTI5ZTUzNjQyOTJiOTI4ZAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNo
YWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0
ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCks
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKwor
ICAgIGZvciAodWludCBpID0gMDsgaSA8IDEwOyBpID0gaSArIDEpIHsKKyAgICAgICAgc2hhZGUg
PSBzaGFkZSArIDAuMTsKKyAgICB9CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsK
KyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Zy
YWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAx
LjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRl
ciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAg
ICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTog
Im5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwg
YWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRl
Qml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25z
dCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZz
ZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1h
dDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1
dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmli
dXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBj
b25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFn
bWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0
YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2Uu
Y3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAu
MTsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjE7CisKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNF0gPSAwLjE7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5
XSA9IDAuMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291
cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZl
ciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJB
cnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAg
IHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1
ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRp
bmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJp
bmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBb
YmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2Fu
dmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7
ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29u
dGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0
IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwor
CisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAg
Y29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcs
IHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwg
Y2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51
bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBj
b21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmlu
aXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9
CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2
aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVh
cmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2xvdHMtb2YtbG9jYWwtdmFyaWFibGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzA0MDc4MWE0YWVjN2JiMmMzZWM3MGU3YjUyZmYxOGZkY2U2YTI4ZQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgbG90c09mTG9jYWxWYXJpYWJsZXMgCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlh
Ymxlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvdHMtb2YtbG9jYWwtdmFyaWFi
bGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYxMDRiNDE2OTRmNTVhYzQ1YjlhODEwMmQxODE0NDI4ZjA4
Njk0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9m
LWxvY2FsLXZhcmlhYmxlcy5odG1sCkBAIC0wLDAgKzEsMzcgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+TG90cyBvZiBsb2NhbCB2YXJpYWJsZXMuPC90aXRsZT4KKzxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRl
c3RzID0ge307CisKK3dobHNsVGVzdHMubG90c09mTG9jYWxWYXJpYWJsZXMgPSBhc3luYyAoKSA9
PgoreworICAgIGxldCBzcmMgPSAiaW50IHN1bSgpIHtcbiI7CisgICAgc3JjICs9ICIgICAgaW50
IGkgPSAwO1xuIjsKKyAgICBsZXQgdGFyZ2V0ID0gMDsKKyAgICBjb25zdCBudW1WYXJzID0gNTA7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYXJzOyBpKyspIHsKKyAgICAgICAgc3JjICs9
IGAgICBpID0gJHtpfTtcbmA7CisgICAgICAgIHNyYyArPSBgICAgaW50IFYke2l9ID0gKGkgKyAz
KSAqIChpICsgMyk7XG5gOworICAgICAgICB0YXJnZXQgKz0gKGkgKyAzKSAqIChpICsgMyk7Cisg
ICAgfQorICAgIHNyYyArPSAiICAgIGludCByZXN1bHQgPSAwO1xuIjsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IG51bVZhcnM7IGkrKykgeworICAgICAgICBzcmMgKz0gYCAgICByZXN1bHQgKz0g
ViR7aX07XG5gOworICAgIH0KKyAgICBzcmMgKz0gIiAgICByZXR1cm4gcmVzdWx0O1xuIjsKKyAg
ICBzcmMgKz0gIn0iOworICAgIGxldCBwcm9ncmFtID0gc3JjOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJzdW0iLCBbXSksIHRhcmdldCk7Cit9CisK
K3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sdmFsdWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9sdmFsdWVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDAyMjMx
YzRlNTQ3ZWIyZDUzY2VkMWY4NWI0MWMwMWUyMjc1ZTQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2x2YWx1ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBA
QAorCitQQVNTIGxWYWx1ZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9sdmFsdWVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbHZhbHVlcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJhNTk3MzczMjg1YzM2NTc2YmM2NDczZTgyZjAwMDA2YjUyODE2OTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbHZhbHVlcy5odG1sCkBAIC0w
LDAgKzEsMTA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYt
OD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPkx2YWx1ZXMu
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMubFZhbHVlcyA9IGFzeW5jICgp
ID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYo
eCsrKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBh
d2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYoKyt4KTsKKyAgICAg
ICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBhd2FpdCBjaGVja0Zh
aWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSAw
OworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYoeCA9IDMpOworICAgICAgICAgICAgcmV0
dXJuICp5OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAg
ICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAg
ICAgICB0aHJlYWQgaW50KiB5ID0gJjM7CisgICAgICAgICAgICByZXR1cm4gKnk7CisgICAgICAg
IH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgaW50IGJhcihpbnQg
eCkgeworICAgICAgICAgICAgcmV0dXJuIHggKyAxOworICAgICAgICB9CisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgICAgICB0aHJl
YWQgaW50KiB5ID0gJmJhcigzKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQor
ICAgIGApOyAKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9
ICYoNywgeCk7CisgICAgICAgICAgICByZXR1cm4gKnk7CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBlbnVtIERheXMgeworICAgICAgICAgICAgTW9u
ZGF5LAorICAgICAgICAgICAgVHVlc2RheQorICAgICAgICB9CisgICAgICAgIGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgICAgICB0aHJlYWQgaW50
KiB5ID0gJihEYXlzLk1vbmRheSk7CisgICAgICAgICAgICByZXR1cm4gKnk7CisgICAgICAgIH0K
KyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgaW50IGZvbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRocmVhZCBib29sKiB5ID0gJih0cnVlICYmIGZhbHNlKTsKKyAg
ICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBhd2FpdCBjaGVj
a0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyZWFk
IGJvb2wqIHkgPSAmKCF0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQor
ICAgIGApOyAKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHggPSAzOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9
ICZ4OworICAgICAgICAgICAgcmV0dXJuICp5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzKTsK
K307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVz
dHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVm
LXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjNGNhNDkyMzY3OTgzN2JmMWI2
Y2UzNGI4ZTI0MzFjNThkNWM1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw1IEBACisKK1BBU1MgbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmIAorUEFTUyBtYWtlQXJyYXlS
ZWZGcm9tTG9jYWwgCitQQVNTIG1ha2VBcnJheVJlZkZyb21Qb2ludGVyIAorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZGRiZjQ1YTBkOGM1ZDJlYmVjODk5MmZhMTA3MzdkZTM1Y2Y4MWI0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVm
LXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgorPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVz
dHMgPSB7fTsKKword2hsc2xUZXN0cy5tYWtlQXJyYXlSZWZGcm9tQXJyYXlSZWYgPSBhc3luYyAo
KSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQg
YmFyKHRocmVhZCBpbnRbXSByZWYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlZlswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXoodGhyZWFkIGlu
dFtdIHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFyKEBwdHIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHggPSA0ODsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmF6KEB4
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMubWFrZUFycmF5
UmVmRnJvbUxvY2FsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgaW50IGJhcih0aHJlYWQgaW50W10gcmVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gcmVmWzBdOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgeCA9IDQ4OworICAgICAgICAgICAgcmV0dXJuIGJhcihAeCk7CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDQ4KTsKK30KKword2hsc2xUZXN0cy5tYWtlQXJyYXlSZWZGcm9tUG9p
bnRlciA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBi
YXIodGhyZWFkIGludFtdIHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlZlsw
XTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6KHRocmVhZCBpbnQqIHB0cikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGJhcihAcHRyKTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
Zm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSA0ODsKKyAgICAgICAgICAgIHJl
dHVybiBiYXooJngpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0OCk7Cit9CisKK3J1blRlc3Rz
KHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWZlcmVuY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNl
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGIzYjNlYzcx
OTRmNWNlMGRlYWExYTBlN2IwOTE5ZTQ1OGRhYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0bWwKQEAgLTAsMCArMSwx
ODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29u
c3Qgc2hhZGVyU291cmNlID0gYAorYm9vbCB0ZXN0MSgpIHsKKyAgICBpbnQgdmFsdWUgPSA0MjsK
KyAgICB0aHJlYWQgaW50W10gYXJyYXkgPSBAdmFsdWU7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAh
PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzBdICE9IDQyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzEyMDIxM10gIT0gMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXJyYXlbMF0gPSAxMzM3OworICAgIGlmICh2YWx1ZSAhPSAx
MzM3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCB0ZXN0MigpIHsKKyAgICBpbnQgdmFsdWUgPSA0MjsKKyAgICB0aHJlYWQgaW50KiBwdHIgPSAm
dmFsdWU7CisgICAgaWYgKCpwdHIgIT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHRocmVhZCBpbnRbXSBhcnJheSA9IEBwdHI7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzBdICE9IDQyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzEyMzc0MjE3XSAhPSAwKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgKnB0ciA9IDY2NjsKKyAgICBpZiAoKnB0ciAhPSA2NjYpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodmFsdWUgIT0gNjY2KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGFycmF5WzBdICE9IDY2NikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXJyYXlbMF0gPSA0MjQyOworICAgIGlmICgqcHRyICE9IDQyNDIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAodmFsdWUgIT0gNDI0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChhcnJheVswXSAhPSA0MjQyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGFycmF5Lmxlbmd0aCAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCB0ZXN0MygpIHsKKyAgICBpbnRbNDJdIHg7CisgICAgdGhyZWFkIGlu
dFs0Ml0qIGFycmF5UHRyID0gJng7CisgICAgaWYgKGFycmF5UHRyLT5sZW5ndGggIT0gNDIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHhbNDFdID0gNjY2OworICAgIGlmICgoKmFycmF5
UHRyKVs0MV0gIT0gNjY2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCgqYXJyYXlQ
dHIpWzBdICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHRocmVhZCBpbnRbXSBh
cnJheSA9IEB4OworICAgIGlmIChhcnJheS5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGFycmF5WzBdID0gMTMzNzsKKyAgICBpZiAoeFswXSAhPSAxMzM3KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCgqYXJyYXlQdHIpWzBdICE9IDEzMzcpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHRlc3Q0KCkg
eworICAgIHRocmVhZCBpbnQqIHB0ciA9IG51bGw7CisKKyAgICB0aHJlYWQgaW50W10gYXJyYXkg
PSBAcHRyOworICAgIGlmIChhcnJheS5sZW5ndGggIT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGFycmF5WzBdICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChhcnJheVsxMDAwMDBdICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21w
dXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJl
YWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBpZiAoIXRlc3QxKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghdGVzdDIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCF0ZXN0MygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRlc3Q0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
Y29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0
ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIi
fV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9T
UkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3Jp
cHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5
KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAg
IGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9Owor
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAs
IHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIu
c2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3Bh
dGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0Fy
cmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBsZXQg
cmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwor
ICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgi
Iik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVy
LnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0Rldmlj
ZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0
aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7
Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM1ODU1OTYyMzVjMmE0MThjMTRlMjc2MGNhZjlmNzAyMTFjZjkzZDgKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cmljZXMtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgYnVpbHRpbk1hdHJpY2VzIAorUEFTUyBt
YXRyaXhNdWx0aXBsaWNhdGlvbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL21hdHJpY2VzLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9t
YXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZmMmJkOTk2OWJhYzgwMTMwYzBl
ZGFhMzZiZjljODg5NDMwOTBhYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKQEAgLTAsMCArMSwyMDQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNz
LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmJ1aWx0aW5NYXRyaWNlcyA9
IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgZmxvYXQgZm9vKCkK
KyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyeDIgYTsKKyAgICAgICAgICAgIGFbMF1bMF0g
PSAxOworICAgICAgICAgICAgYVswXVsxXSA9IDI7CisgICAgICAgICAgICBhWzFdWzBdID0gMzsK
KyAgICAgICAgICAgIGFbMV1bMV0gPSA0OworICAgICAgICAgICAgcmV0dXJuIGFbMF1bMF07Cisg
ICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZs
b2F0MngzIGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsKKyAgICAgICAgICAgIGFbMF1bMV0g
PSAyOworICAgICAgICAgICAgYVswXVsyXSA9IDM7CisgICAgICAgICAgICBhWzFdWzBdID0gNDsK
KyAgICAgICAgICAgIGFbMV1bMV0gPSA1OworICAgICAgICAgICAgYVsxXVsyXSA9IDY7CisgICAg
ICAgICAgICByZXR1cm4gYVsxXVsyXTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28zKCkK
KyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyeDIgYTsKKyAgICAgICAgICAgIHJldHVybiBh
WzBdWzBdOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vNCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZsb2F0MngyIGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsKKyAgICAgICAgICAg
IGFbMF1bMV0gPSAyOworICAgICAgICAgICAgYVsxXVswXSA9IDM7CisgICAgICAgICAgICBhWzFd
WzFdID0gNDsKKyAgICAgICAgICAgIGZsb2F0MngyIGI7CisgICAgICAgICAgICBiWzBdWzBdID0g
NTsKKyAgICAgICAgICAgIGJbMF1bMV0gPSA2OworICAgICAgICAgICAgYlsxXVswXSA9IDc7Cisg
ICAgICAgICAgICBiWzFdWzFdID0gODsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IDI7ICsraSkgeworICAgICAgICAgICAgICAgIGZvciAodWludCBqID0gMDsgaiA8IDI7ICsraikg
eworICAgICAgICAgICAgICAgICAgICBhW2ldW2pdICs9IDQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgfQorICAg
ICAgICBib29sIGZvbzUoKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDJ4MiBhOworICAg
ICAgICAgICAgYVswXSA9IGZsb2F0MigxLCAyKTsKKyAgICAgICAgICAgIGFbMV0gPSBmbG9hdDIo
MywgNCk7CisgICAgICAgICAgICBmbG9hdDJ4MiBiOworICAgICAgICAgICAgYlswXVswXSA9IDE7
CisgICAgICAgICAgICBiWzBdWzFdID0gMjsKKyAgICAgICAgICAgIGJbMV1bMF0gPSAzOworICAg
ICAgICAgICAgYlsxXVsxXSA9IDQ7CisgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAg
ICB9CisgICAgICAgIGJvb2wgZm9vNigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0Mngy
IGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsKKyAgICAgICAgICAgIGFbMF1bMV0gPSAyOwor
ICAgICAgICAgICAgYVsxXVswXSA9IDM7CisgICAgICAgICAgICBhWzFdWzFdID0gNDsKKyAgICAg
ICAgICAgIGZsb2F0MngyIGI7CisgICAgICAgICAgICBiWzBdWzBdID0gNTsKKyAgICAgICAgICAg
IGJbMF1bMV0gPSAxMDsKKyAgICAgICAgICAgIGJbMV1bMF0gPSAxODsKKyAgICAgICAgICAgIGJb
MV1bMV0gPSAyNDsKKyAgICAgICAgICAgIGFbMF0gKj0gNTsKKyAgICAgICAgICAgIGFbMV0gKj0g
NjsKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQg
Zm9vNygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0MngzIGEgPSBmbG9hdDJ4MyhmbG9h
dDMoMywgNCwgNSksIGZsb2F0Myg2LCA3LCA4KSk7CisgICAgICAgICAgICByZXR1cm4gYVswXVsy
XTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA2KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW10pLCAwKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb280
IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
cHJvZ3JhbSwgICJmb281IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb282IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW10pLCA1KTsK
K307CisKK3dobHNsVGVzdHMubWF0cml4TXVsdGlwbGljYXRpb24gPSBhc3luYyAoKSA9PiB7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGZsb2F0Mng0IG11bHRpcGx5KGZsb2F0MngzIHgs
IGZsb2F0M3g0IHkpIHsKKyAgICAgICAgICAgIC8vIENvcGllZCBhbmQgcGFzdGVkIGZyb20gdGhl
IHN0YW5kYXJkIGxpYnJhcnkKKyAgICAgICAgICAgIGZsb2F0Mng0IHJlc3VsdDsKKyAgICAgICAg
ICAgIHJlc3VsdFswXVswXSA9IDA7CisgICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsw
XSAqIHlbMF1bMF07CisgICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsxXSAqIHlbMV1b
MF07CisgICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsyXSAqIHlbMl1bMF07CisgICAg
ICAgICAgICByZXN1bHRbMF1bMV0gPSAwOworICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhb
MF1bMF0gKiB5WzBdWzFdOworICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMV0gKiB5
WzFdWzFdOworICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMl0gKiB5WzJdWzFdOwor
ICAgICAgICAgICAgcmVzdWx0WzBdWzJdID0gMDsKKyAgICAgICAgICAgIHJlc3VsdFswXVsyXSAr
PSB4WzBdWzBdICogeVswXVsyXTsKKyAgICAgICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzFd
ICogeVsxXVsyXTsKKyAgICAgICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzJdICogeVsyXVsy
XTsKKyAgICAgICAgICAgIHJlc3VsdFswXVszXSA9IDA7CisgICAgICAgICAgICByZXN1bHRbMF1b
M10gKz0geFswXVswXSAqIHlbMF1bM107CisgICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFsw
XVsxXSAqIHlbMV1bM107CisgICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFswXVsyXSAqIHlb
Ml1bM107CisgICAgICAgICAgICByZXN1bHRbMV1bMF0gPSAwOworICAgICAgICAgICAgcmVzdWx0
WzFdWzBdICs9IHhbMV1bMF0gKiB5WzBdWzBdOworICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9
IHhbMV1bMV0gKiB5WzFdWzBdOworICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9IHhbMV1bMl0g
KiB5WzJdWzBdOworICAgICAgICAgICAgcmVzdWx0WzFdWzFdID0gMDsKKyAgICAgICAgICAgIHJl
c3VsdFsxXVsxXSArPSB4WzFdWzBdICogeVswXVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFsxXVsx
XSArPSB4WzFdWzFdICogeVsxXVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFsxXVsxXSArPSB4WzFd
WzJdICogeVsyXVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFsxXVsyXSA9IDA7CisgICAgICAgICAg
ICByZXN1bHRbMV1bMl0gKz0geFsxXVswXSAqIHlbMF1bMl07CisgICAgICAgICAgICByZXN1bHRb
MV1bMl0gKz0geFsxXVsxXSAqIHlbMV1bMl07CisgICAgICAgICAgICByZXN1bHRbMV1bMl0gKz0g
eFsxXVsyXSAqIHlbMl1bMl07CisgICAgICAgICAgICByZXN1bHRbMV1bM10gPSAwOworICAgICAg
ICAgICAgcmVzdWx0WzFdWzNdICs9IHhbMV1bMF0gKiB5WzBdWzNdOworICAgICAgICAgICAgcmVz
dWx0WzFdWzNdICs9IHhbMV1bMV0gKiB5WzFdWzNdOworICAgICAgICAgICAgcmVzdWx0WzFdWzNd
ICs9IHhbMV1bMl0gKiB5WzJdWzNdOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgICAgICBmbG9hdDJ4MyBtYXRyaXgxKCkgeworICAgICAgICAgICAgZmxvYXQyeDMg
eDsKKyAgICAgICAgICAgIHhbMF1bMF0gPSAyOworICAgICAgICAgICAgeFswXVsxXSA9IDM7Cisg
ICAgICAgICAgICB4WzBdWzJdID0gNTsKKyAgICAgICAgICAgIHhbMV1bMF0gPSA3OworICAgICAg
ICAgICAgeFsxXVsxXSA9IDExOworICAgICAgICAgICAgeFsxXVsyXSA9IDEzOworICAgICAgICAg
ICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQzeDQgbWF0cml4MigpIHsKKyAg
ICAgICAgICAgIGZsb2F0M3g0IHk7CisgICAgICAgICAgICB5WzBdWzBdID0gMTc7CisgICAgICAg
ICAgICB5WzBdWzFdID0gMTk7CisgICAgICAgICAgICB5WzBdWzJdID0gMjM7CisgICAgICAgICAg
ICB5WzBdWzNdID0gMjk7CisgICAgICAgICAgICB5WzFdWzBdID0gMzE7CisgICAgICAgICAgICB5
WzFdWzFdID0gMzc7CisgICAgICAgICAgICB5WzFdWzJdID0gNDE7CisgICAgICAgICAgICB5WzFd
WzNdID0gNDM7CisgICAgICAgICAgICB5WzJdWzBdID0gNDc7CisgICAgICAgICAgICB5WzJdWzFd
ID0gNTM7CisgICAgICAgICAgICB5WzJdWzJdID0gNTk7CisgICAgICAgICAgICB5WzJdWzNdID0g
NjE7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28w
MCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlb
MF1bMF07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMDEoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzBdWzFdOworICAgICAgICB9Cisg
ICAgICAgIGZsb2F0IGZvbzAyKCkgeworICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJp
eDEoKSwgbWF0cml4MigpKVswXVsyXTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28wMygp
IHsKKyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMF1b
M107CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMTAoKSB7CisgICAgICAgICAgICByZXR1
cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzBdOworICAgICAgICB9CisgICAg
ICAgIGZsb2F0IGZvbzExKCkgeworICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEo
KSwgbWF0cml4MigpKVsxXVsxXTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28xMigpIHsK
KyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bMl07
CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMTMoKSB7CisgICAgICAgICAgICByZXR1cm4g
bXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzNdOworICAgICAgICB9CisgICAgYDsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28w
MCIsIFtdKSwgMTcgKiAyICsgMzEgKiAzICsgNDcgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMSIsIFtdKSwgMTkgKiAyICsgMzcg
KiAzICsgNTMgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9u
KHByb2dyYW0sICJmb28wMiIsIFtdKSwgMjMgKiAyICsgNDEgKiAzICsgNTkgKiA1KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMyIsIFtd
KSwgMjkgKiAyICsgNDMgKiAzICsgNjEgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28xMCIsIFtdKSwgMTcgKiA3ICsgMzEgKiAxMSAr
IDQ3ICogMTMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzExIiwgW10pLCAxOSAqIDcgKyAzNyAqIDExICsgNTMgKiAxMyk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTIiLCBbXSks
IDIzICogNyArIDQxICogMTEgKyA1OSAqIDEzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28xMyIsIFtdKSwgMjkgKiA3ICsgNDMgKiAxMSAr
IDYxICogMTMpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtMi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LTItZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LTItZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvbWF0cml4LTIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtMi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY0NTZmOTUzM2RkNWM3ZmU5Mjc2M2Q4YzFkZTE4MmViMzRlZDU3YzQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LTIuaHRtbApA
QCAtMCwwICsxLDE1NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitib29sIGFsbEVxdWFsKGZsb2F0NHg0IG1h
dCwgZmxvYXQgdmFsdWUpCit7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAx
KSB7CisgICAgICAgIGZvciAodWludCBqID0gMDsgaiA8IDQ7IGogPSBqICsgMSkgeworICAgICAg
ICAgICAgaWYgKG1hdFtpXVtqXSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsbCh0
aHJlYWQgZmxvYXQ0eDQqIG1hdCwgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQ0eDQgcmVzdWx0
OworICAgIGZvciAodWludCBpID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkgeworICAgICAgICAgICAg
cmVzdWx0W2ldID0gZmxvYXQ0KHZhbHVlLCB2YWx1ZSwgdmFsdWUsIHZhbHVlKTsKKyAgICB9Cisg
ICAgKm1hdCA9IHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBmaWxsKHRocmVh
ZCBmbG9hdDQqIHZlYywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQ0IHJlc3VsdDsKKyAgICBm
b3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpIHsKKyAgICAgICAgcmVzdWx0W2ldID0g
dmFsdWU7CisgICAgfQorICAgICp2ZWMgPSByZXN1bHQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgYWxsRXF1YWwoZmxvYXQ0IHZlYywgZmxvYXQgdmFsdWUpCit7CisgICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGlmICh2ZWNbaV0gIT0gdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlz
cGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0NHg0IG1hdDsKKyAgICBmaWxsKCZtYXQsIDEpOwor
ICAgIGlmICghYWxsRXF1YWwobWF0LCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQ0
IHZlYzsKKyAgICBmaWxsKCZ2ZWMsIDEpOworICAgIGlmICghYWxsRXF1YWwodmVjLCAxKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZmxvYXQ0IHZlYzIgPSBtdWwobWF0LCB2ZWMpOworICAgIGlm
ICghYWxsRXF1YWwodmVjMiwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0NHg0IG1h
dDIgPSBtdWwobWF0LCBtYXQpOworICAgIGlmICghYWxsRXF1YWwobWF0MiwgNCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1hdDIgPSBtdWwobWF0MiwgbWF0Mik7CisgICAgaWYgKCFhbGxFcXVh
bChtYXQyLCA2NCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJ1ZmZlclt1aW50KHRocmVhZElE
LngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsKK30KK2A7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3Jh
Z2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5l
KGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9y
ID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
YnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBi
dWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2Owor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5Wzdd
ID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVy
VXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVy
LCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291
cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xh
eW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFu
ZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIo
YnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRlUGFz
c0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0
ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBh
c3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5kaXNwYXRjaCg0LCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygp
OworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAg
ICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0
IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7
CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0
c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PSAyCisgICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAorICAgICAgICAmJiByZXN1bHRzRmxv
YXQzMkFycmF5WzJdID09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSA9PSA4
CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gPT0gNQorICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzVdID09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2
XSA9PSA3CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT0gOCkKKyAgICAgICAg
dGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICBy
ZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Citn
ZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNl
KS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmlu
aXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvbWF0cml4LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4
YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQ
QVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtbWVtb3J5LWxheW91
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1s
YXlvdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFT
UyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1sYXlvdXQu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtbWVtb3J5LWxheW91dC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmViMDgxNDg1YzdiZDViMDJjNWI3MzRlNDBiMjIxNzJjY2QyOTYxN2YKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1s
YXlvdXQuaHRtbApAQCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygx
LCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdDR4NFtdIGJ1
ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJ
RCkgeworICAgIGZsb2F0NHg0IHJlc3VsdDsKKyAgICByZXN1bHRbMF0gPSBmbG9hdDQoMSwgMiwg
MywgNCk7CisgICAgcmVzdWx0WzFdID0gZmxvYXQ0KDUsIDYsIDcsIDgpOworICAgIHJlc3VsdFsy
XSA9IGZsb2F0NCg5LCAxMCwgMTEsIDEyKTsKKyAgICByZXN1bHRbM10gPSBmbG9hdDQoMTMsIDE0
LCAxNSwgMTYpOworCisgICAgZmxvYXQ0eDQgbWF0ID0gYnVmZmVyWzBdOworCisgICAgaWYgKG1h
dFswXVswXSA9PSAwCisgICAgICAgICYmIG1hdFswXVsxXSA9PSAxCisgICAgICAgICYmIG1hdFsw
XVsyXSA9PSAyCisgICAgICAgICYmIG1hdFswXVszXSA9PSAzCisKKyAgICAgICAgJiYgbWF0WzFd
WzBdID09IDQKKyAgICAgICAgJiYgbWF0WzFdWzFdID09IDUKKyAgICAgICAgJiYgbWF0WzFdWzJd
ID09IDYKKyAgICAgICAgJiYgbWF0WzFdWzNdID09IDcKKworICAgICAgICAmJiBtYXRbMl1bMF0g
PT0gOAorICAgICAgICAmJiBtYXRbMl1bMV0gPT0gOQorICAgICAgICAmJiBtYXRbMl1bMl0gPT0g
MTAKKyAgICAgICAgJiYgbWF0WzJdWzNdID09IDExCisKKyAgICAgICAgJiYgbWF0WzNdWzBdID09
IDEyCisgICAgICAgICYmIG1hdFszXVsxXSA9PSAxMworICAgICAgICAmJiBtYXRbM11bMl0gPT0g
MTQKKyAgICAgICAgJiYgbWF0WzNdWzNdID09IDE1KSB7CisgICAgICAgIGJ1ZmZlclswXSA9IHJl
c3VsdDsKKyAgICB9Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVT
dGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
ID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAx
NjsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJh
eUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMV0gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDg7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gMTI7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gMTsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2
XSA9IDk7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTM7CisgICAgYnVmZmVyRmxvYXQz
MkFycmF5WzhdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbOV0gPSA2OworICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVsxMF0gPSAxMDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTQ7
CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5
WzEzXSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDExOworICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVsxNV0gPSAxNTsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9S
QUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JF
QUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3Vs
dHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVy
OiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2Jp
bmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBE
ZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91
cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
KGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5
QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBj
b25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNz
KCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAg
IGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIu
bWFwUmVhZEFzeW5jKCk7CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJh
eVswXSA9PT0gMQorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09PSA1CisgICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gPT09IDkKKyAgICAgICAgJiYgcmVzdWx0c0Zs
b2F0MzJBcnJheVszXSA9PT0gMTMKKworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRd
ID09PSAyCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gPT09IDYKKyAgICAgICAg
JiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PT0gMTAKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0
MzJBcnJheVs3XSA9PT0gMTQKKworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzhdID09
PSAzCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbOV0gPT09IDcKKyAgICAgICAgJiYg
cmVzdWx0c0Zsb2F0MzJBcnJheVsxMF0gPT09IDExCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMy
QXJyYXlbMTFdID09PSAxNQorCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTJdID09
PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTNdID09PSA4CisgICAgICAgICYm
IHJlc3VsdHNGbG9hdDMyQXJyYXlbMTRdID09PSAxMgorICAgICAgICAmJiByZXN1bHRzRmxvYXQz
MkFycmF5WzE1XSA9PT0gMTYpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAg
ICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQo
IiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgewor
ICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRy
aXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXguaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kYzNiNjVjMjg2YjNkNTExOTA3YzhmOTc3YzZiNzcyOGRlMjE1MWQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC5odG1sCkBAIC0wLDAgKzEsMTY2
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0
IHNoYWRlclNvdXJjZSA9IGAKK2Jvb2wgYWxsRXF1YWwoZmxvYXQyeDMgbWF0LCBmbG9hdCB2YWx1
ZSkKK3sKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyOyBpID0gaSArIDEpIHsKKyAgICAgICAg
Zm9yICh1aW50IGogPSAwOyBqIDwgMzsgaiA9IGogKyAxKSB7CisgICAgICAgICAgICBpZiAobWF0
W2ldW2pdICE9IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworW251bXRocmVhZHMoMSwgMSwgMSldCitj
b21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rl
cih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBmbG9h
dDJ4MyBmb287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDApKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb28gPSBmb28gKyBmbG9hdDJ4MyhmbG9hdDMoMS4wLCAxLjAsIDEuMCksIGZsb2F0Mygx
LjAsIDEuMCwgMS4wKSk7CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDEpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb28gPSBmb28gKiBmbG9hdDJ4MyhmbG9hdDMoOC41LCA4LjUsIDguNSksIGZs
b2F0Myg4LjUsIDguNSwgOC41KSk7CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDguNSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyAtIGZsb2F0MngzKGZsb2F0Myg3LjUsIDcuNSwg
Ny41KSwgZmxvYXQzKDcuNSwgNy41LCA3LjUpKTsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgMSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZsb2F0MngzKGZsb2F0MygxLjAs
IDEuMCwgMS4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsKKyAgICBpZiAoIWFsbEVxdWFsKGZv
bywgMikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZvbzsKKyAgICBpZiAo
IWFsbEVxdWFsKGZvbywgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZv
bzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgOCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZs
b2F0MyBmb3VydHlUd287CisgICAgZm91cnR5VHdvLnggPSA0MjsKKyAgICBmb3VydHlUd28ueSA9
IDQyOworICAgIGZvdXJ0eVR3by56ID0gNDI7CisKKyAgICBmb29bMF0gPSBmb3VydHlUd287Cisg
ICAgZm9vWzFdID0gZm91cnR5VHdvOworICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvb1sxMzM3XSA9IGZvdXJ0eVR3bzsKKyAgICBpZiAoIWFsbEVx
dWFsKGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb29bMTAwMDAwMF0gPSBmb3Vy
dHlUd287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm91cnR5VHdvWzEzMzddID0gNTA7CisgICAgZm9vWzFdID0gZm91cnR5VHdvOworICAgIGlm
ICghYWxsRXF1YWwoZm9vLCA0MikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvdXJ0eVR3b1sx
MDAwMDAwXSA9IDUwOworICAgIGZvb1sxXSA9IGZvdXJ0eVR3bzsKKyAgICBpZiAoIWFsbEVxdWFs
KGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdDMgc2hvdWxkQmVaZXJvID0g
Zm9vWzEwMDAwMF07CisgICAgaWYgKHNob3VsZEJlWmVyby54ICE9IDAgfHwgc2hvdWxkQmVaZXJv
LnkgIT0gMCB8fCBzaG91bGRCZVplcm8ueiAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoZm91cnR5VHdvWzEwMDAwMDAwXSAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBidWZm
ZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Cit9
CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0
ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4OworCisgICAgY29uc3Qg
YnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7
CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlb
M10gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7CisgICAgYnVmZmVyRmxvYXQz
MkFycmF5WzVdID0gNjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OworICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVs3XSA9IDg7CisgICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RP
UkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9S
RUFEfTsKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1
bHRzQnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZl
cjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHti
aW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3Vw
RGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3Jv
dXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVuY29kZXIuY29w
eUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7CisgICAg
Y29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFz
cygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUp
OworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAg
ICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goNCwgMSwgMSk7CisgICAgY29tcHV0ZVBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVy
Lm1hcFJlYWRBc3luYygpOworICAgIGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJy
YXlbMF0gPT0gMgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQKKyAgICAg
ICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PSA2CisgICAgICAgICYmIHJlc3VsdHNGbG9h
dDMyQXJyYXlbM10gPT0gOAorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUK
KyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9PSA2CisgICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNl0gPT0gNworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5Wzdd
ID09IDgpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZh
aWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNz
ZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJl
c3Npb24tcnZhbHVlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbmVz
dGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNh
MjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL25lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmQ1ZjE4YzM0ZDIxZmFhNTFjZmFhMjc3Y2ExZjBjMTY4Yzc4YjRhNQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJl
c3Npb24tcnZhbHVlLmh0bWwKQEAgLTAsMCArMSwxNDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorCitz
dHJ1Y3QgQmFyIHsKKyAgICBmbG9hdCBzaGFkZTsKK30KK3N0cnVjdCBGb28geworICAgIEJhciBi
YXI7Cit9CisKK3N0cnVjdCBXcmFwcGVyIHsKKyAgICBGb28gZm9vOworfQorCitzdHJ1Y3QgVmVy
dGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgx
KSkgeworICAgIFdyYXBwZXIgd3JhcHBlcjsKKyAgICB3cmFwcGVyLmZvby5iYXIuc2hhZGUgPSBz
aGFkZTsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0
aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHdyYXBwZXIuZm9vLmJhci5zaGFkZTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hh
ZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNl
KSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3Rh
Z2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsK
KyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0
cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFj
ZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9y
bWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9
XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUg
PSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjog
MSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0g
W2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIw
LCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBd
OworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVgg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJj
ZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRp
bmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdy
b3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAg
Y29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmlu
ZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0p
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdX
aGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9uZXN0ZWQtbG9vcC1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjg2OWE5Nzk2ZjM1
ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdCbGFja1Nx
dWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQt
bG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL25lc3RlZC1sb29wLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzRiMTE4MTgyMzRmMTc3MTc4YzAzMDJjNzE1ZTg1YjBhOWUyMzA2NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtbG9vcC5odG1sCkBA
IC0wLDAgKzEsMTc1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAg
IGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVy
dGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7CisgICAgZm9yICh1aW50IGkgPSAw
OyBpIDwgMTA7IGkgPSBpICsgMSkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNoYWRlID0gMS4wOworICAgICAgICB9CisKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSB3aGlsZSAoKHNoYWRlID0gMS4wLCBmYWxzZSkpOworCisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlICsgMS4wLCBmYWxzZSkpOworCisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlIC0gMS4wLCBm
YWxzZSkpOworCisgICAgICAgIHdoaWxlICgoc2hhZGUgPSBzaGFkZSArIDEuMCwgdHJ1ZSkpIHsK
KyAgICAgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgLSAxLjAsIHRy
dWUpKSB7CisgICAgICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9z
aXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBz
aGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisg
ICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0
Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAx
LCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBb
YXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAs
IGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzog
MCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRl
dmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOworCisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
MTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5k
aW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0
YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd0Js
YWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9udWxsLWFyZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
bnVsbC1hcmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyYTBjZjM5ZThhMGZlY2M4ZjMzNGFj
MTg2M2ExZTNkZjhjYTlmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvbnVsbC1hcmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHBhc3NO
dWxsVG9QdHJNb25vbW9ycGhpYyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL251bGwtYXJnLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1hcmcuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMWIyZWVhYjEyMGZlZGI0MmMwNzFmODc5YTRlN2E0MDc2MDU1ZmEzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJnLmh0bWwK
QEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9
dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0
IHN0cnVjdHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMucGFzc051bGxU
b1B0ck1vbm9tb3JwaGljID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgaW50IGZvbyh0aHJlYWQgaW50KiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcHRyOworICAgICAgICB9CisgICAgICAgIGludCBiYXIoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZm9vKG51bGwpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAwKTsKK30K
KworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJyYXktcmVmLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1hcnJheS1yZWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDljOTQ2
OTRjOGFmMTBkOWUwZmY5YjZjNGU4ZWFiNWE5ZmYzNTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJyYXktcmVmLmh0bWwKQEAgLTAsMCArMSw2NCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBu
YW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IGxvb3BzLjwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qg
d2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmRlcmVmZXJlbmNlRGVmYXVsdE51bGxBcnJh
eVJlZiA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJlYWQgaW50W10gcDsKKyAgICAgICAgICAg
IHJldHVybiBwWzBdOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKK30KKword2hsc2xUZXN0
cy5kZWZhdWx0SW5pdGlhbGl6ZWROdWxsQXJyYXlSZWZJbnRMaXRlcmFsID0gYXN5bmMgKCkgPT4K
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBwWzBd
OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKK30KKword2hsc2xUZXN0cy5wYXNzTnVsbFRv
UHRyTW9ub21vcnBoaWNBcnJheVJlZiA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIGludCBmb28odGhyZWFkIGludFtdIHB0cikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHB0clswdV07CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CisgICAgICAgIH0KKyAgICBgOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBb
XSksIDApOworfQorCit3aGxzbFRlc3RzLmxvYWROdWxsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBh
d2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgc2luayh0aHJlYWQg
aW50KiB4KSB7IH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBzaW5rKCpudWxsKTsgfQorICAg
ICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtZGVyZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtZGVyZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZh
ZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVs
bC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9udWxsLWRlcmVmZXJlbmNlLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1kZXJlZmVyZW5jZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzMGE3
ZWM1ODM4NmQzYjM1YmI2MjdhMjBmZTEzZDhhZDYzODJkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1kZXJlZmVyZW5jZS5odG1sCkBAIC0wLDAgKzEs
MTI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Nv
bnN0IHNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gdGhyZWFkIGludCo7CitGb28gZ2V0
TnVsbFB0cigpCit7CisgICAgcmV0dXJuIG51bGw7Cit9CisKK3N0cnVjdCBYWVogeworICAgIGZs
b2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6OworfQorCitbbnVtdGhyZWFkcygyLCAx
LCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6
IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewor
ICAgIEZvbyBwdHIgPSBudWxsOworICAgICpwdHIgPSA0MjsKKyAgICAqZ2V0TnVsbFB0cigpID0g
NDI7CisgICAgaWYgKCpwdHIgPT0gMCkgeworICAgICAgICBpZiAocHRyID09IGdldE51bGxQdHIo
KSkgeworICAgICAgICAgICAgaWYgKCpnZXROdWxsUHRyKCkgPT0gMCkgeworICAgICAgICAgICAg
ICAgIHRocmVhZCBYWVoqIHh5elB0ciA9IG51bGw7CisgICAgICAgICAgICAgICAgWFlaIHh5ejsK
KyAgICAgICAgICAgICAgICB4eXoueCA9IDE7CisgICAgICAgICAgICAgICAgeHl6LnkgPSAxOwor
ICAgICAgICAgICAgICAgIHh5ei56ID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoeHl6LnogPT0g
MS4wICYmIHh5ei55ID09IDEuMCAmJiB4eXoueiA9PSAxLjApIHsKKyAgICAgICAgICAgICAgICAg
ICAgKnh5elB0ciA9IHh5ejsKKyAgICAgICAgICAgICAgICAgICAgeHl6ID0gKnh5elB0cjsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHh5ei56ID09IDAuMCAmJiB4eXoueSA9PSAwLjAgJiYgeHl6
LnogPT0gMC4wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJipnZXROdWxsUHRyKCkg
PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmKigmKmdldE51bGxQ
dHIoKSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJb
dWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5n
OiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRl
U3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICog
ODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJh
eUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1Owor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZd
ID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVC
dWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIs
IDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdh
aXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRzRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChy
ZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gPT0gNgorICAgICAg
ICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0
MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gPT0gNgor
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09IDcKKyAgICAgICAgJiYgcmVzdWx0
c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNl
CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30K
K3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5j
dGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFp
bGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
b29iLWFjY2Vzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb29iLWFj
Y2Vzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3
ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL29vYi1hY2Nlc3MuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9vb2ItYWNjZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZiMjYyOTQ2YWM4M2RlMDUw
OTlkMGU0MmRmYThjZTUwODMwMzViNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9vb2ItYWNjZXNzLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitbbnVtdGhyZWFkcygyLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlz
cGF0Y2hUaHJlYWRJRCkgeworICAgIGJ1ZmZlclsxMzM3XSA9IDAuMDsKKyAgICBidWZmZXJbNDI0
MjQyNDJdID0gMC4wOworICAgIGlmIChidWZmZXJbMTAwMDAwXSA9PSAwLjApCisgICAgICAgIGJ1
ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsK
K30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0
eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6
IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBjb25z
dCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJ
VEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZl
ckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0g
MjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5T
VE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0g
e2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRH
cm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5j
b3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAg
ICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQ
YXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGlu
ZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZm
ZXIubWFwUmVhZEFzeW5jKCk7CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0MzJB
cnJheVswXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAorICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzJdID09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zs
b2F0MzJBcnJheVszXSA9PSA4CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gPT0g
NQorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzVdID09IDYKKyAgICAgICAgJiYgcmVz
dWx0c0Zsb2F0MzJBcnJheVs2XSA9PSA3CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlb
N10gPT0gOCkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0
RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7
CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBh
c3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL29wZXJhdG9yLW92ZXJs
b2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9vcGVyYXRvci1vdmVy
bG9hZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQwZjNkMTdlNmJiMWI5ODAwMDExYTgzZmE0
OTAxYzIwZWNhZTM1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1Mg
b3BlcmF0b3JXaXRob3V0VW5pbmZlcnJhYmxlVHlwZVZhcmlhYmxlIAorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9vcGVyYXRvci1vdmVybG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3ZmNl
YzY4MzNkZjJiZWEwMzNmMGNkZjU3YWRlZjFjM2Y3ZmE2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQuaHRtbApAQCAtMCwwICsx
LDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxt
ZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPk9wZXJhdG9yKyBvdmVy
bG9hZC48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5vcGVyYXRvcldpdGhv
dXRVbmluZmVycmFibGVUeXBlVmFyaWFibGUgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dy
YW0gPSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAg
IH0KKyAgICAgICAgRm9vIG9wZXJhdG9yKyhGb28gYSwgRm9vIGIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQueCA9IGEueCArIGIueDsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBhOworICAgICAgICAgICAgYS54ID0gNjQ1OworICAg
ICAgICAgICAgRm9vIGI7CisgICAgICAgICAgICBiLnggPSAtMzU7CisgICAgICAgICAgICByZXR1
cm4gKGEgKyBiKS54OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA2NDUgLSAzNSk7Cit9CisKK3J1
blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvb3ZlcmxvYWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL292ZXJsb2FkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGI2MTA2YjA4
NjRlNTZkNjNhM2E1NzA0MWY0NmZmZGI2MTBmNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJsb2FkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAK
KworUEFTUyBpbnRPdmVybG9hZFJlc29sdXRpb24gCitQQVNTIGludE92ZXJsb2FkUmVzb2x1dGlv
blJldmVyc2VPcmRlciAKK1BBU1Mgbm90RXF1YWxzT3ZlcmxvYWQgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9vdmVybG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL292ZXJsb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U1NDcyYmIyYTRkZTE2N2U5MTdlYThl
NjlkYjFlMTM5M2Q2ZWNiMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9vdmVybG9hZC5odG1sCkBAIC0wLDAgKzEsNDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0i
bG9uZyI+Cis8dGl0bGU+T3ZlcmxvYWQuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNs
VGVzdHMuaW50T3ZlcmxvYWRSZXNvbHV0aW9uID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICAgICAgaW50
IGZvbyh1aW50KSB7IHJldHVybiAyOyB9CisgICAgICAgIGludCBmb28oZmxvYXQpIHsgcmV0dXJu
IDM7IH0KKyAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7IH0KKyAgICBgOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSks
IDEpOworfQorCit3aGxzbFRlc3RzLmludE92ZXJsb2FkUmVzb2x1dGlvblJldmVyc2VPcmRlciA9
IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oZmxv
YXQpIHsgcmV0dXJuIDM7IH0KKyAgICAgICAgaW50IGZvbyh1aW50KSB7IHJldHVybiAyOyB9Cisg
ICAgICAgIGludCBmb28oaW50KSB7IHJldHVybiAxOyB9CisgICAgICAgIGludCBiYXIoKSB7IHJl
dHVybiBmb28oNDIpOyB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAxKTsKK30KKword2hsc2xUZXN0cy5ub3RFcXVh
bHNPdmVybG9hZCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KEZvbywgRm9vKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGApOworfQorCitydW5UZXN0
cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zODY0MDA5NWY3MzFlZjczYWFjZTllMzY4YWExMDYyYTYxZDBiYjc2Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1Mgb3ZlcnJpZGVTdWJzY3JpcHRTdHJ1Y3Qg
CitQQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kRG9TdG9yZXMgCitQQVNTIG92ZXJyaWRl
U3Vic2NyaXB0U3RydWN0QW5kVXNlUG9pbnRlcnMgCitQQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3Ry
dWN0QW5kVXNlUG9pbnRlcnNJbmNvcnJlY3RseSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxZjdhYWM3NWRiNDg0
MjhlZTJiYjIwMjY3ZjU4YzI0YzlkYjU2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWwKQEAgLTAsMCArMSwxMjggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBvdmVycmlkZSBzdWJzY3Jp
cHRzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLm92ZXJyaWRlU3Vic2Ny
aXB0U3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
c3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIGludCB5OworICAg
ICAgICB9CisgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywg
dWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCisgICAg
ICAgICAgICAgICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBG
b28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA0OTg7CisgICAgICAgICAgICBmb28ueSA9IDE5
OworICAgICAgICAgICAgcmV0dXJuIGZvb1swXSArIGZvb1sxXSAqIDM7CisgICAgICAgIH0KKyAg
ICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSksIDQ5OCArIDE5ICogMyk7Cit9CisKK3dobHNsVGVzdHMub3ZlcnJpZGVTdWJzY3Jp
cHRTdHJ1Y3RBbmREb1N0b3JlcyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBg
CisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBp
bnQgeTsKKyAgICAgICAgfQorICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQg
Rm9vKiBmb28sIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9
PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvb1swXSA9IDQ5ODsKKyAgICAgICAgICAg
IGZvb1sxXSA9IDE5OworICAgICAgICAgICAgcmV0dXJuIGZvby54ICsgZm9vLnk7CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDQ5OCArIDE5KTsKK30KKword2hsc2xUZXN0cy5vdmVycmlkZVN1YnNj
cmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAg
ICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRo
cmVhZCBGb28qIGZvbywgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICBp
ZiAoaW5kZXggPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGludCBiYXIodGhyZWFkIEZvbyog
Zm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKCpmb28pWzBdICsgKCpmb28pWzFd
OworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBG
b28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA0OTg7CisgICAgICAgICAgICBmb28ueSA9IDE5
OworICAgICAgICAgICAgcmV0dXJuIGJhcigmZm9vKTsKKyAgICAgICAgfQorICAgIGA7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwg
NDk4ICsgMTkpOworfQorCit3aGxzbFRlc3RzLm92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kVXNl
UG9pbnRlcnNJbmNvcnJlY3RseSA9IGFzeW5jICgpID0+Cit7CisgICAgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgICAgICBpbnQgeDsK
KyAgICAgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocmVh
ZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywgdWludCBpbmRleCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT55OworICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGJhcih0aHJlYWQgRm9vKiBmb28p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvb1swXSArIGZvb1sxXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBmb28oKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICAgICAgZm9vLnggPSA0OTg7CisgICAg
ICAgICAgICAgICAgZm9vLnkgPSAxOTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFyKCZmb28p
OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7
Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3BsdXMtZXF1YWxzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9w
bHVzLWVxdWFscy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZmMDljYzY1ZjYyMTcxOTk1ZDZk
ZTU4ZjYwODUzMjI5MjY1MzFjYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9wbHVzLWVxdWFscy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1Mg
cGx1c0VxdWFscyAKK1BBU1MgcGx1c0VxdWFsc1Jlc3VsdCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvcGx1cy1lcXVhbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmY1ZWNiNDE0NjI5NThiZDg3NTk5
Y2NiODUyMThjODk1ZTFmMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3BsdXMtZXF1YWxzLmh0bWwKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IG92ZXJyaWRlIHN1YnNjcmlwdHMuPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxz
bFRlc3RzID0ge307CisKK3dobHNsVGVzdHMucGx1c0VxdWFscyA9IGFzeW5jICgpID0+Cit7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHggKz0gNDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAg
IGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOworfQorCit3aGxzbFRlc3RzLnBsdXNFcXVh
bHNSZXN1bHQgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBp
bnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geCArPSA0MjsKKyAg
ICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOworfQorCitydW5UZXN0
cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvcG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcyYzVkOGFjNTQ4MjhiMGJhZDgwMTA5MDNlMzUxYTNkYTcyNWUwMzYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9pbnRlci1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBwb2ludGVyVG9Qb2ludGVyIAorUEFT
UyBwb2ludGVyVG9NZW1iZXIgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9wb2ludGVyLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb2lu
dGVyLXNwZWMtdGVzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmJiMjk3YzgzODk5ZGM3ZjI2Njk1NWYx
YjJkYmNkNjYyOWQ4YTU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3BvaW50ZXItc3BlYy10ZXN0cy5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0
bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29u
c3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLnBvaW50ZXJUb1BvaW50ZXIgPSBhc3lu
YyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB0aHJlYWQgaW50KiBwID0gJng7
CisgICAgICAgICAgICB0aHJlYWQgaW50KiogcHAgPSAmcDsKKyAgICAgICAgICAgIGludCp0aHJl
YWQqdGhyZWFkIHFxID0gcHA7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAg
ICAgIHggPSA0MjsKKyAgICAgICAgICAgICpwID0gNzY7CisgICAgICAgICAgICByZXN1bHQgKz0g
eDsKKyAgICAgICAgICAgICoqcHAgPSAzOTsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAg
ICAgICAgICAgKipxcSA9IDgzOworICAgICAgICAgICAgcmVzdWx0ICs9IHg7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgYDs7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzYgKyAzOSArIDgzKTsK
K30KKword2hsc2xUZXN0cy5wb2ludGVyVG9NZW1iZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZsb2F0MyB4OworICAgICAgICAgICAgICAgIHRocmVh
ZCBmbG9hdCogeSA9ICZ4WzFdOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZsb2F0M3gzIHg7CisgICAgICAgICAgICAgICAgdGhy
ZWFkIGZsb2F0MyogeSA9ICZ4WzFdOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKwor
cnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb3N0Zml4LXByZWZpeC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3NWJkZjEwZjYxYjRlODNlMWEyNjRjYjdjOGE2ZjZhNTk0MWM0OWQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTYgQEAKKworUEFTUyBwcmVmaXhQbHVzUGx1cyAKK1BBU1MgcHJlZml4
UGx1c1BsdXNSZXN1bHQgCitQQVNTIHBvc3RmaXhQbHVzUGx1cyAKK1BBU1MgcG9zdGZpeFBsdXNQ
bHVzUmVzdWx0IAorUEFTUyBwcmVmaXhNaW51c01pbnVzIAorUEFTUyBwcmVmaXhNaW51c01pbnVz
UmVzdWx0IAorUEFTUyBwb3N0Zml4TWludXNNaW51cyAKK1BBU1MgcG9zdGZpeE1pbnVzTWludXNS
ZXN1bHQgCitQQVNTIHBsdXNFcXVhbHMgCitQQVNTIHBsdXNFcXVhbHNSZXN1bHQgCitQQVNTIG1p
bnVzRXF1YWxzIAorUEFTUyBtaW51c0VxdWFsc1Jlc3VsdCAKK1BBU1MgdGltZXNFcXVhbHMgCitQ
QVNTIHRpbWVzRXF1YWxzUmVzdWx0IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvcG9zdGZpeC1wcmVmaXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb3N0
Zml4LXByZWZpeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4OGRjZjY0OGFlMjUwODViNzRkODY4ZWZhZjJl
MzE1MzAwNTI3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
cG9zdGZpeC1wcmVmaXguaHRtbApAQCAtMCwwICsxLDE3MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLnByZWZpeFBsdXNQbHVzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKyt4OworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBgOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg2NCldKSwgNjUpOworfQorCit3aGxzbFRlc3RzLnByZWZpeFBsdXNQbHVzUmVzdWx0ID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICsreDsKKyAgICAgICAgfQorICAgIGA7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDY0KV0pLCA2NSk7Cit9CisKK3dobHNsVGVzdHMucG9zdGZpeFBsdXNQbHVzID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgeworICAgICAgICAgICAgeCsrOworICAgICAgICAgICAgcmV0dXJuIHg7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjUpOworfQorCit3aGxzbFRlc3RzLnBv
c3RmaXhQbHVzUGx1c1Jlc3VsdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBg
CisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4
Kys7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjQpOworfQorCit3aGxzbFRl
c3RzLnByZWZpeE1pbnVzTWludXMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0g
YAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICAtLXg7Cisg
ICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2
Myk7Cit9CisKK3dobHNsVGVzdHMucHJlZml4TWludXNNaW51c1Jlc3VsdCA9IGFzeW5jICgpID0+
Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAtLXg7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2
NCldKSwgNjMpOworfQorCit3aGxzbFRlc3RzLnBvc3RmaXhNaW51c01pbnVzID0gYXN5bmMgKCkg
PT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAg
ICAgeworICAgICAgICAgICAgeC0tOworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0K
KyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCg2NCldKSwgNjMpOworfQorCit3aGxzbFRlc3RzLnBvc3RmaXhNaW51
c01pbnVzUmVzdWx0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHgtLTsKKyAg
ICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2NCk7Cit9CisKK3dobHNsVGVzdHMucGx1
c0VxdWFscyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGlu
dCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggKz0gNDI7CisgICAgICAgICAg
ICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIp
OworfQorCit3aGxzbFRlc3RzLnBsdXNFcXVhbHNSZXN1bHQgPSBhc3luYyAoKSA9PgoreworICAg
IGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4geCArPSA0MjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSld
KSwgMzg1ICsgNDIpOworfQorCit3aGxzbFRlc3RzLm1pbnVzRXF1YWxzID0gYXN5bmMgKCkgPT4g
eworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7
CisgICAgICAgICAgICB4IC09IDQyOworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0K
KyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCgzODUpXSksIDM4NSAtIDQyKTsKK30KKword2hsc2xUZXN0cy5taW51
c0VxdWFsc1Jlc3VsdCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHggLT0gNDI7
CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzODUpXSksIDM4NSAtIDQyKTsKK30KKword2hs
c2xUZXN0cy50aW1lc0VxdWFscyA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgeCAqPSA0MjsK
KyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0p
LCAzODUgKiA0Mik7Cit9CisKK3dobHNsVGVzdHMudGltZXNFcXVhbHNSZXN1bHQgPSBhc3luYyAo
KSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4ICo9IDQyOworICAgICAgICB9CisgICAgYDsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoMzg1KV0pLCAzODUgKiA0Mik7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVh
ZC1tb2RpZnktd3JpdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Jl
YWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0
NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUg
QEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdy
aXRlLWhpZ2gtem9tYmllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
cmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmll
cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lN2E3NTYxM2RjODVmNjIyMDFhNTJlZDQwYzMzMzE5ZTI5NGU0MDQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRl
LWhpZ2gtem9tYmllcy5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorYm9vbCBm
aWxsKHRocmVhZCBmbG9hdDR4NCogbWF0LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBmbG9hdDR4NCBy
ZXN1bHQ7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7CisgICAgICAg
ICAgICByZXN1bHRbaV0gPSBmbG9hdDQodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpOworICAg
IH0KKyAgICAqbWF0ID0gcmVzdWx0OworICAgIHJldHVybiB0cnVlOworfQorCitbbnVtdGhyZWFk
cygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1
ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJ
RCkgeworICAgIGZsb2F0NHg0IG1hdDsKKyAgICBmaWxsKCZtYXQsIDQpOworCisgICAgZmxvYXQ0
IHZlYzsKKyAgICB2ZWNbMF0gKz0gbWF0WzBdWzBdICsgbWF0WzBdWzFdICsgbWF0WzNdWzJdOwor
CisgICAgZmxvYXQgdmFsdWUgPSA0MjsKKyAgICB2YWx1ZSArPSB2ZWNbMF07CisKKyAgICBtYXRb
MF1bMF0gKz0gKG1hdFswXVswXSArPSAodmFsdWUgKz0gbWF0WzBdWzBdKSk7CisKKyAgICBidWZm
ZXJbdWludCh0aHJlYWRJRC54KV0gPSBtYXRbMF1bMF07Cit9CitgOworCithc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJj
b21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1
ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiAxOworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3Qg
cmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIs
IHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihi
dWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3Qg
cmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsK
KyAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRz
QXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDY2KQorICAg
ICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOwor
ICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChk
ZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1tb2RpZnktd3JpdGUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY3ZjFiMTFmYjMxYTExZmJmMThkYjc5ZDlhM2E3MDUzOTU3MGQ4YTAKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1tb2RpZnktd3JpdGUuaHRtbApAQCAt
MCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1
dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCkp
IHsKKyAgICBidWZmZXJbMF0gPSAxOworICAgIGJ1ZmZlclsxXSA9IGJ1ZmZlclswXSsrOworCisg
ICAgYnVmZmVyWzJdID0gMTsKKyAgICBidWZmZXJbM10gPSArK2J1ZmZlclsyXTsKKworICAgIGJ1
ZmZlcls0XSA9IDE7CisgICAgYnVmZmVyWzRdICs9IDU7CisKKyAgICBidWZmZXJbNV0gPSAxOwor
ICAgIGJ1ZmZlcls1XSAqPSA3OworCisgICAgaW50IHRvdGFsID0gMTQ7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAxMDsgaSArPSAyKSB7CisgICAgICAgIHRvdGFsICs9IGk7CisgICAgfQorICAg
IGJ1ZmZlcls2XSA9IHRvdGFsOworCisgICAgdG90YWwgPSAxNDsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgdG90YWwgKz0gaTsKKyAgICB9CisgICAgYnVmZmVy
WzddID0gdG90YWw7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBj
b25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9S
QUdFIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5k
aW5nID0ge2J1ZmZlcjogYnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5n
ID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2Jp
bmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIg
PSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCBjb21wdXRl
UGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0
ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNv
bnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICBjb25zdCByZXN1bHRzID0gbmV3IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAg
ICBpZiAocmVzdWx0c1swXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNbMV0gPT0gMQorICAgICAg
ICAmJiByZXN1bHRzWzJdID09IDIKKyAgICAgICAgJiYgcmVzdWx0c1szXSA9PSAyCisgICAgICAg
ICYmIHJlc3VsdHNbNF0gPT0gNgorICAgICAgICAmJiByZXN1bHRzWzVdID09IDcKKyAgICAgICAg
JiYgcmVzdWx0c1s2XSA9PSAzNAorICAgICAgICAmJiByZXN1bHRzWzddID09IDU5KQorICAgICAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAg
IGJ1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9yZWN1cnNpdmUtc3RydWN0cy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRlYjUzNDhkMDMzYzAzNDg4OGUxYmIxMDM3ZmNkNGUxMDNkM2ExOTkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIG11dHVhbGx5UmVjdXJzaXZlU3RydWN0
IAorUEFTUyBtdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdFdpdGhQb2ludGVyc0Jyb2tlbiAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MmYwOGQ0YWU5OThjNWFhOGIxNmU2YjI1MDEwNDdjZmJjODM0ZjBhCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwK
QEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9
dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0
IGxvb3BzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLm11dHVhbGx5UmVj
dXJzaXZlU3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgICAgIEJhciBiYXI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgICAg
ICBGb28gZm9vOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3do
bHNsVGVzdHMubXV0dWFsbHlSZWN1cnNpdmVTdHJ1Y3RXaXRoUG9pbnRlcnNCcm9rZW4gPSBhc3lu
YyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAg
ICAgICAgICAgIHRocmVhZCBCYXIqIGJhcjsKKyAgICAgICAgICAgIGludCBmb287CisgICAgICAg
IH0KKyAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAgICB0aHJlYWQgRm9vKiBmb287Cisg
ICAgICAgICAgICBpbnQgYmFyOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgQmFyIGJhcjsKKyAgICAgICAg
ICAgIGZvby5mb28gPSA1NjQ7CisgICAgICAgICAgICBiYXIuYmFyID0gNTM7CisgICAgICAgICAg
ICByZXR1cm4gZm9vLmJhci0+YmFyIC0gYmFyLmZvby0+Zm9vOworICAgICAgICB9CisgICAgYDsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10pLCAwKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JldHVybi1sb2NhbC12YXJp
YWJsZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JldHVybi1sb2Nh
bC12YXJpYWJsZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNm
OWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvcmV0dXJuLWxvY2FsLXZhcmlhYmxlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0
dXJuLWxvY2FsLXZhcmlhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJu
LWxvY2FsLXZhcmlhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMzZTM1NjdiNjhjNmQ2Y2VkNDYzZjc3
NjdjYTZhMzhmMTg1NTBlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9yZXR1cm4tbG9jYWwtdmFyaWFibGUuaHRtbApAQCAtMCwwICsxLDE0MCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJT
b3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKworZmxvYXQgY29w
eShmbG9hdCB2KSB7CisgICAgZmxvYXQgbG9jYWwgPSB2OworICAgIHJldHVybiBsb2NhbDsKK30K
KwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1
bHQ7CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUg
PSBjb3B5KHNoYWRlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQg
MCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsK
KworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCith
c3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9k
dWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNv
bnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0
ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAg
ICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwg
Y29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUw
ID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRy
aWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9
OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAg
Y29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVy
dGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZv
cm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
MERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzldID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBz
aXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291
cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xh
eW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsK
KyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1
bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWlu
KHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hh
aW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91
dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVk
ID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMg
PSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBs
b2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAg
IGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBh
c3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9
OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5k
ZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQ
aXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdy
b3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVy
cygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0
LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3Qg
Y29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRR
dWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVu
KGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZXR1cm4tc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLXNwZWMtdGVzdHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjZGU3YmFlMzFiNzZjMDQ4NjIwNDMwZGU2NzRlZTZiYWM3
NGM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJu
LXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKKworUEFTUyByZXR1cm5J
ZiAKK1BBU1MgcmV0dXJuUmVmZXJlbmNlVG9TYW1lUGFyYW1ldGVyIAorUEFTUyByZXR1cm5SZWZl
cmVuY2VUb1BhcmFtZXRlcldpdGhEaWZmZXJlbnRGdW5jdGlvbnMgCitQQVNTIHJldHVyblJlZmVy
ZW5jZVRvUGFyYW1ldGVyIAorUEFTUyByZXR1cm5SZWZlcmVuY2VUb0xvY2FsVmFyaWFibGVXaXRo
TmVzdGluZyAKK1BBU1MgcmV0dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlIAorUEFTUyByZXR1
cm5JbnRMaXRlcmFsVWludCAKK1BBU1MgcmV0dXJuSW50TGl0ZXJhbEZsb2F0IAorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLXNwZWMtdGVzdHMuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZXR1cm4tc3BlYy10ZXN0cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUxMmMzMDlmYzdhNjFkYzE0M2YwMGY5OGZlMWU5MjAxNmE2ZjQyY2IKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLXNwZWMtdGVzdHMuaHRtbApAQCAt
MCwwICsxLDIzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRm
LTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRo
ZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0
LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVz
dHMucmV0dXJuSWYgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgYCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAg
ICAgIGludCBmb28oaW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHkg
PSA2OworICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
eSA9IDg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBgKTsKKwor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgeSA9IDY7CisgICAgICAgICAg
ICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAgICAgICAgICB5ID0gODsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5
ID0gNjsKKyAgICAgICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ODsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDEwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMyldKSwgMTApOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCg0KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNildKSwgMTApOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg3KV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg5KV0pLCAxMCk7CisK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oaW50
IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAg
ICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDEwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cisg
ICAgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAg
ICAgIHJldHVybiA4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5ID0g
OTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAg
YDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoMyldKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSksIDkpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg1KV0pLCA5
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoNildKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoOSldKSwgOSk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGludCB5ID0gNjsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiA4OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAxMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIDExOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgICAgIGlmICh4ID09IDcpCisg
ICAgICAgICAgICAgICAgICAgIGludCB5ID0gODsKKyAgICAgICAgICAgICAgICByZXR1cm4geTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9OworCit3aGxzbFRlc3RzLnJldHVyblJlZmVy
ZW5jZVRvU2FtZVBhcmFtZXRlciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwbHVzKGJh
cig1KSwgYmFyKDcpKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwbHVzKHRocmVhZCBpbnQq
IHgsIHRocmVhZCBpbnQqIHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqeCArICp5
OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKyAgICBgOworCisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMTQpOwor
fTsKKword2hsc2xUZXN0cy5yZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlcldpdGhEaWZmZXJlbnRG
dW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGlu
dCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcigxMCkgKyAqYmF6KDIw
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcihpbnQgeCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICZ4OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGlu
dCogYmF6KGludCB5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJnk7CisgICAgICAg
IH0KKyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgMzApOworfTsKKword2hsc2xUZXN0cy5yZXR1cm5SZWZlcmVuY2VU
b1BhcmFtZXRlciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
aW50IGZvbyhib29sIGNvbmRpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpi
YXIoY29uZGl0aW9uLCAxLCAyKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJh
cihib29sIGNvbmRpdGlvbiwgaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uID8gJmEgOiAmYjsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29s
KHRydWUpXSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpXSksIDIpOworfTsKKword2hsc2xUZXN0cy5y
ZXR1cm5SZWZlcmVuY2VUb0xvY2FsVmFyaWFibGVXaXRoTmVzdGluZyA9IGFzeW5jICgpID0+IHsK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqYmFyKCkgKyAqYmF6KCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJl
YWQgaW50KiBiYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDIwOworICAgICAg
ICAgICAgcmV0dXJuICZhOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmF6KCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IGEgPSAyMjsKKyAgICAgICAgICAgIHJldHVybiAm
YTsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLnJldHVy
blJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZSA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3Jh
bSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
YmFyKCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXIoKQorICAgICAgICB7
CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAgICAgcmV0dXJuICZhOworICAgICAg
ICB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3dobHNsVGVzdHMucmV0dXJuSW50TGl0ZXJh
bFVpbnQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAidWludCBmb28oKSB7IHJl
dHVybiA0MjsgfSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3dobHNsVGVzdHMucmV0dXJuSW50TGl0ZXJh
bEZsb2F0ID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gImZsb2F0IGZvbygpIHsg
cmV0dXJuIDQyOyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOwor
PC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2V0dGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NldHRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMWYyZDZjMzQxYWI1
MGI2NmYyYjlhZTc4NDI3YTcyNzFiMDY4OThhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NldHRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDggQEAKKworUEFTUyBzZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgCitQQVNTIHNldHRlcldpdGhOb0dl
dHRlck92ZXJsb2FkIAorUEFTUyBzZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkIAorUEFT
UyByZWN1cnNpdmVTZXR0ZXJzIAorUEFTUyBsb25lU2V0dGVyIAorUEFTUyBsb25lU2V0dGVyUG9p
bnRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NldHRlci1zcGVj
LXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2V0dGVyLXNwZWMtdGVzdHMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NjAwZDZhN2M4MWNkNDRkODI0OTQ3MTEyZjYwNzU0NzllYWQ2NDlm
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NldHRlci1zcGVj
LXRlc3RzLmh0bWwKQEAgLTAsMCArMSwxMzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
Cis8dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRl
c3RzLnNldHRlcldpdGhNYXRjaGVkVHlwZSA9IGFzeW5jICgpID0+Cit7CisgICAgY29uc3QgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IG9wZXJhdG9yLmZvbyhpbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiA1OworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci5mb289KGlu
dCwgaW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICB9Cisg
ICAgICAgIGludCBmb28oKSB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIHguZm9v
ID0gNDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFy
KCkgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICByZXR1cm4geC5mb287CisgICAg
ICAgIH0KKyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNTQzKTsKKyAgICAvL2Fzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDUpOworfQorCit3aGxzbFRlc3RzLnNl
dHRlcldpdGhOb0dldHRlck92ZXJsb2FkID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVj
a0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAg
ICBzdHJ1Y3QgQmFyIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbyhGb28pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDUzNDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEJhciBvcGVyYXRvci5mb289KEJhciwgaW50KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBCYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cisg
ICAgICAgIAorfQorCit3aGxzbFRlc3RzLnNldHRlcldpdGhOb0dldHRlck92ZXJsb2FkRml4ZWQg
PSBhc3luYyAoKSA9PgoreworICAgIGNvbnN0IHByb2dyYW0gPWAKKyAgICAgICAgc3RydWN0IEJh
ciB7IH0KKyAgICAgICAgaW50IG9wZXJhdG9yLmZvbyhCYXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiA1MzQ7CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9yLmZvbz0oQmFy
LCBpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXIoKTsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgZm9vKCkgeworICAgICAgICAgICAgQmFyIGJhcjsKKyAgICAgICAgICAgIHJl
dHVybiBiYXIuZm9vOworICAgICAgICB9CisgICAgICAgIGludCBiYXIoKSB7CisgICAgICAgICAg
ICBCYXIgYmFyOworICAgICAgICAgICAgYmFyLmZvbyA9IDUyOworICAgICAgICAgICAgcmV0dXJu
IGJhci5mb287CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDUzNCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdKSwgNTM0KTsKK30KKwor
d2hsc2xUZXN0cy5yZWN1cnNpdmVTZXR0ZXJzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAg
ICAgICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXIgeworICAgICAgICAg
ICAgaW50IGE7CisgICAgICAgICAgICBpbnQgYjsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3Bl
cmF0b3IuYyhCYXIgYmFyKSB7IHJldHVybiBiYXIuYTsgfQorICAgICAgICBCYXIgb3BlcmF0b3Iu
YmFyKEZvbyBmb28pIHsgQmFyIGI7IGIuYSA9IGZvby54OyBiLmIgPSBmb28ueTsgcmV0dXJuIGI7
IH0KKyAgICAgICAgQmFyIG9wZXJhdG9yLmM9KEJhciBiYXIsIGludCBuZXd2YWwpIHsgYmFyLmEg
PSBuZXd2YWw7IHJldHVybiBiYXI7IH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLmJhcj0oRm9vIGZv
bywgQmFyIG5ld3ZhbCkgeyBmb28ueCA9IG5ld3ZhbC5hOyBmb28ueSA9IG5ld3ZhbC5iOyByZXR1
cm4gZm9vOyB9CisgICAgICAgIGludCBmKCkgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAg
ICAgICAgIGZvby54ID0gZm9vLnkgPSAzOworICAgICAgICAgICAgZm9vLmJhci5jID0gODsKKyAg
ICAgICAgICAgIHJldHVybiBmb28ueCoxMCArIGZvby55OworICAgICAgICB9CisgICAgYDsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZiIsIFtdKSwg
ODMpOworfQorCit3aGxzbFRlc3RzLmxvbmVTZXR0ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbz0o
aW50LCBpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQorCit3aGxzbFRlc3RzLmxvbmVT
ZXR0ZXJQb2ludGVyID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yLmZvbz0odGhyZWFkIGludCog
cHRyLCBpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQorCitydW5UZXN0cyh3aGxzbFRl
c3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NpbXBsZS1hcnJheXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NpbXBsZS1hcnJheXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZm
NTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBA
CitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtYXJyYXlzLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFkZmY5MTgyOTYzOTI5ZjExMGVmZGJiYWUwNDk5NTdkOWU4YTNkN2UKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy5odG1sCkBAIC0w
LDAgKzEsMTIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZvaWQgZmlsbCh0aHJlYWQgaW50W10gYXJyYXks
IGludCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGFycmF5W2ldID0gdmFsdWU7CisgICAgfQorfQorCitbbnVtdGhyZWFkcygx
LCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIg
OiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsK
KyAgICBpbnRbNDJdIGFycmF5OworICAgIGlmIChhcnJheS5sZW5ndGggIT0gNDIpCisgICAgICAg
IHJldHVybjsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhcnJheVswXSA9IDUxNzsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNTE3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0aHJlYWQgaW50W10gYXJyYXlQdHIgPSBAYXJyYXk7CisgICAgaWYgKGFy
cmF5UHRyLmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50WzQyXSBhcnJh
eTI7CisgICAgYXJyYXkyID0gYXJyYXk7CisgICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoYXJyYXkyWzBdICE9IDUxNykKKyAgICAgICAgcmV0dXJu
OworCisgICAgZmlsbChhcnJheVB0ciwgMTMzNyk7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwg
YXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5UHRyW2ldICE9IDEzMzcp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhcnJheVtpXSAhPSAxMzM3KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhcnJheTJbMF0gIT0gNTE3KQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVy
bjsKKyAgICBmb3IgKHVpbnQgaSA9IDE7IGkgPCBhcnJheTIubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgaWYgKGFycmF5MltpXSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5n
OiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRl
U3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7
CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0
IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVC
dWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIs
IDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdh
aXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJy
YXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRz
SW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQor
ICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Np
bXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIyNzljOThl
NGM3NGMwYjhjYzA2NjZkMzNkYTg3YmQ4MTc3NTBlOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw0IEBACisKK1BBU1Mgc2ltcGxlR2V0dGVyIAorUEFTUyBzaW1wbGVTZXR0ZXIgCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtZ2V0dGVyLXNldHRl
ci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWNjMjYyMmJiYTcwMGZhZjNmNDlkNmIxZDQ2NzJjMzA2MGM5Nzc2Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtZ2V0dGVy
LXNldHRlci5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLnNpbXBsZUdldHRlciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueCA9IDc4MDQ7Cisg
ICAgICAgICAgICByZXR1cm4gZm9vLnk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDc4MDQpOwor
fTsKKword2hsc2xUZXN0cy5zaW1wbGVTZXR0ZXIgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHBy
b2dyYW0gPSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvci55PShG
b28gZm9vLCBpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvby54ID0gdmFsdWU7
CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9vLnkgPSA3ODA0
OworICAgICAgICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3ODA0
KTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNiNzY2M2QwNjlkNGQ1N2RkOWI5MzA1YjA2Yzg4YjQzM2NkOGY2NDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDcgQEAKKworUEFTUyBzaW1wbGVVbnJlYWNoYWJsZUNvZGUgCitQ
QVNTIHNpbXBsZU5vUmV0dXJuIAorUEFTUyBzaW1wbGVSZWN1cnNpdmVTdHJ1Y3QgCitQQVNTIHNp
bXBsZVJlY3Vyc2lvbiAKK1BBU1Mgc2ltcGxlUmVjdXJzaW9uMiAKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NpbXBsZS10ZXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMzcxM2M1MTdlOGU2MWJi
NDhhNDA2ZDg0ZGVkZTNlNWFiMWIyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0
IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citj
b25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuc2ltcGxlVW5yZWFjaGFibGVDb2Rl
ID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisK
K3dobHNsVGVzdHMuc2ltcGxlTm9SZXR1cm4gPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hl
Y2tGYWlsKCJpbnQgZm9vKCkgeyB9Iik7Cit9CisKK3dobHNsVGVzdHMuc2ltcGxlUmVjdXJzaXZl
U3RydWN0ID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuc2ltcGxlUmVjdXJzaW9uID0g
YXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAg
ICAgdm9pZCBmb28oaW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9vKHgp
OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5zaW1wbGVSZWN1
cnNpb24yID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IGJhcihpbnQgeCkgeworICAgICAgICAgICAgICAgIGZvbyh4KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQg
Zm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvbyhiYXIoeCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8
L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
aW1wbGUtd2hpbGUtbG9vcC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzY2UwMjhiNDA0MmU3
OWRhOTJhNWFkN2YyNTRlN2I5YzFjMjhkODMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MyBAQAorCitQQVNTIHNpbXBsZVdoaWxlIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zaW1wbGUtd2hpbGUtbG9vcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyY2VhY2U4NTNmYjJiMGZiMmY4
NmEwZmNlZWVkZDljOGM2ZjU4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AuaHRtbApAQCAtMCwwICsxLDI3IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48
L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5zaW1wbGVXaGlsZSA9IGFzeW5j
ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAg
ICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHggPCAxMykKKyAgICAgICAgICAgICAgICB4ID0g
eCAqIDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDEpXSksIDE2KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yNzJjMWNhYmUwN2I2MDI0ZjllYjc1ZDNlNjg5MTAxYzA4MWJiMmVmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLW51bGwtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHN0b3JlTnVsbCAKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLW51bGwuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y0NGIzMmM1ZWQ2ZGU3
NmYyNWE5ZDA3NzQzYTdhN2JjYzE2MWNkYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLmh0bWwKQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0
IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3Rz
ID0ge307CisKK3dobHNsVGVzdHMuc3RvcmVOdWxsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgZm9vKCkgeyAqbnVsbCA9
IDQyOyB9CisgICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0
PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RvcmUt
dG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3N0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMtcHJvcGVybHktZXhwZWN0ZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLXRvLXBy
b3BlcnR5LXVwZGF0ZXMtcHJvcGVybHktZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS10by1w
cm9wZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlNGQ1
NWM1MTVhNjcxNmFlNTQzODlmYWUzMTBkZjhjZmU2Mjc2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJs
eS5odG1sCkBAIC0wLDAgKzEsMTU1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBpbnQgeDsKKyAgICBmbG9h
dCB5OworICAgIGludCB6OworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBCYXIgYmFyOworICAgIEJh
ciBiYXIyOworfQorCit0aHJlYWQgRm9vKiBwdHIoKSB7CisgICAgRm9vIGxvY2FsOworICAgIHJl
dHVybiAmbG9jYWw7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAg
ICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIEZvbyogcCA9IHB0cigpOworICAgIHAt
PmJhcjIueSA9IDEuMDsKKyAgICBmbG9hdCB2YWx1ZSA9IHAtPmJhcjIueTsKKworICAgIHJlc3Vs
dC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHZhbHVlOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0
IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0
KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRl
dmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kg
PSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9u
dEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBb
e2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6
IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0
YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAs
IGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtz
aGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25z
dCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0
MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlu
cHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6
IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRp
bmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9
XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExh
eW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0
ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5w
dXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6
ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZm
ZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9
IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAo
KTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVB
c3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0
MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZs
b2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNv
bnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Cisg
ICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVy
QmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRH
cm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmlu
ZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qg
c3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5E
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJl
bnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJl
LmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmlj
ZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBn
OiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2ht
ZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xl
YXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRl
eEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihk
ZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9u
KCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdHJ1Y3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MjBlZTFiMjg1
ODQ2YzhhNmZlMmZjZjQ0NWNhNjNmY2RhN2RhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKwor
UEFTUyBlbXB0eVN0cnVjdCAKK1BBU1Mgc2V0dGluZ0FuQXJyYXlJbnNpZGVBU3RydWN0IAorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0Lmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxMDdjOGRlMWNiNDMx
YzBkOTc2MmUzOTA2NGY2ODRhMWY5YTgxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdHJ1Y3QuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9
ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7
fTsKKword2hsc2xUZXN0cy5lbXB0eVN0cnVjdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHBy
b2dyYW0gPSBgCisgICAgICAgIHN0cnVjdCBUaGluZ3kgeyB9CisgICAgICAgIGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICBUaGluZ3kgdGhpbmd5OworICAgICAgICAgICAgcmV0dXJu
IDQ2OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Nik7Cit9OworCit3aGxzbFRlc3RzLnNldHRp
bmdBbkFycmF5SW5zaWRlQVN0cnVjdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50WzFdIGFycmF5OworICAg
ICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9v
OworICAgICAgICAgICAgdGhyZWFkIEZvbyogYmFyID0gJmZvbzsKKyAgICAgICAgICAgIGJhci0+
YXJyYXlbMF0gPSAyMTsKKyAgICAgICAgICAgIHJldHVybiBmb28uYXJyYXlbMF07CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDIxKTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3Jp
cHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3dpdGNo
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zd2l0Y2gtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNmM2JmNTEzYzY5ZmM2YTYzZmM4MzEyNGYzMWJiODNkZmU0NTEzMDEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3dpdGNoLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBzd2l0Y2hCcmVhayAKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N3aXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3N3aXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0NzA2MWIxNWEwOGVjNTNlMTE0YTY3
Mjc4ZDY2Y2M0ZmUxYTA2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc3dpdGNoLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJs
b25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0i
anMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9
OworCit3aGxzbFRlc3RzLnN3aXRjaEJyZWFrID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgIGNh
c2UgNzY3OgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAyNzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgNjk6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDc2
MjQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSA0OTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICBgOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg3NjcpXSksIDI3KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjkpXSksIDc2MjQpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKV0pLCA0
OSk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRlc3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnktc3BlYy10ZXN0LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MmI4ODY0ZjExMDE1ZjJmNGM1ZTZhN2IwZjA4NTFkOWEyN2M3
NDcxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnkt
c3BlYy10ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyB0ZXJuYXJ5RXhw
cmVzc2lvbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnkt
c3BlYy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRl
c3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40OTBhYTgzOGU3NDNkNjgwMmZkMDJiYWIzMDhiMWJhNzk3NWZh
YzQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnkt
c3BlYy10ZXN0Lmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KKzx0aXRsZT5UZXN0IGludCBiaXQgbWF0aC48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKwor
d2hsc2xUZXN0cy50ZXJuYXJ5RXhwcmVzc2lvbiA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHggPCAzID8gNCA6IDU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcihpbnQgeCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHggPCAxMCA/IDExIDogeCA8IDEyID8gMTQg
OiAxNTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6KGludCB4KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gMyA8IDQgPyB4IDogNTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDc2NyldKSwgNSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDIpXSksIDQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbbWFrZUludCg4KV0pLCAxMSk7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtl
SW50KDkpXSksIDExKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiYmFyIiwgW21ha2VJbnQoMTApXSksIDE0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW21ha2VJbnQoMTEpXSksIDE0KTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwg
W21ha2VJbnQoMTIpXSksIDE1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiYmFyIiwgW21ha2VJbnQoMTMpXSksIDE1KTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW21ha2VJbnQoMTQpXSks
IDE0KTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBm
b28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAg
ICAgICg0IDwgNSA/IHggOiA3KSA9IDg7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAg
IGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgaW50IHk7
CisgICAgICAgICAgICAgICAgKDAgPCAxID8geCA6IHkpID0gNDI7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHg7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNoZWNrRmFp
bCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgaW50IHk7CisgICAgICAgICAgICAg
ICAgdGhyZWFkIGludCogeiA9ICYoMCA8IDEgPyB4IDogeSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuICp6OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAgIGludCB5OworICAgICAgICAgICAgICAg
IHRocmVhZCBpbnRbXSB6ID0gQCgwIDwgMSA/IHggOiB5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKno7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgZmxvYXQgeTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gNCA8IDUgPyB4IDogeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNCA8IDUgPyA2IDogNy4wOworICAgICAg
ICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXN0LWhh
cm5lc3MtdGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVzdC1o
YXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwNzU3N2Q1MDRkOTZkNzdkYmM1
NjIzMTQ0OTE2MWUwNTJlMTVjNjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAK
KworUEFTUyBSZXR1cm4gYSBsaXRlcmFsIG9mIHR5cGUgYm9vbC4gCitQQVNTIFJldHVybiBhbiBl
eHBlY3RlZCBmbG9hdDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVl
LiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4g
ZXhwZWN0ZWQgZmxvYXQgdmFsdWUuIAorUEFTUyBVcGxvYWQgYW5kIHJldHVybiBhIGJvb2wgdmFs
dWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0IHZhbHVlLiAKK1BBU1MgUmV0dXJu
IGFuIGV4cGVjdGVkIGludCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCB1aW50IHZh
bHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0IHZhbHVlLiAKK1BBU1MgVXBsb2Fk
IG1hbnkgYm9vbCB2YWx1ZXMgYW5kIHJldHVybiBhIGNhbGN1bGF0ZWQgcmVzdWx0LiAKK1BBU1Mg
UmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3Rl
ZCBpbnQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWludCB2YWx1ZS4gCitQQVNT
IFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3Rl
ZCBmbG9hdDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVlLiAKK1BB
U1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0
ZWQgZmxvYXQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0IHZhbHVlLiAK
K1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGludCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBl
Y3RlZCB1aW50IHZhbHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0IHZhbHVlLiAK
K1BBU1MgVXBsb2FkIGFuZCBjYWxjdWxhdGUgYSByZXN1bHQgZnJvbSB2YXJpZWQgYXJndW1lbnQg
dHlwZXMuIAorUEFTUyBTdG9yZSBpbnRvIGEgZmxvYXQ0W10uIAorUEFTUyBVcGxvYWQgYSBpbnRb
XSBhbmQgc3RvcmUgaW50byBhIGludFtdLiAKK1BBU1MgVXBsb2FkIGEgZmxvYXQ0eDRbXSBhbmQg
c3RvcmUgaW50byBhIGZsb2F0NHg0W10uIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0
eDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0eDQgdmFsdWUuIAorUEFT
UyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0eDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhw
ZWN0ZWQgZmxvYXQ0eDQgdmFsdWUuIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvdGVzdC1oYXJuZXNzLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90
ZXN0LWhhcm5lc3MtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1MjkxNDYyMDcyZWIyMmY1NjliZjYz
ZTNiZjZiYTc5NTc2ZTVkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvdGVzdC1oYXJuZXNzLXRlc3QuaHRtbApAQCAtMCwwICsxLDI2NyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0
IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Citjb25zdCBlcHNpbG9uID0gMC4wMDAxOworCisvLyBGSVhNRTogQWRkICJ1Y2hhciIg
YmFjayBpbiB3aGVuIG9wZXJhdG9yKyh1Y2hhciwgdWNoYXIpIGlzIGF2YWlsYWJsZS4KK2NvbnN0
IG51bWVyaWNTY2FsYXJUeXBlcyA9IFsiaW50IiwgInVpbnQiLCAiZmxvYXQiXTsKKworY29uc3Qg
bnVtZXJpY1NjYWxhckZ1bmNzID0geworICAgICJpbnQiOiBjYWxsSW50RnVuY3Rpb24sCisgICAg
InVjaGFyIjogY2FsbFVjaGFyRnVuY3Rpb24sCisgICAgInVpbnQiOiBjYWxsVWludEZ1bmN0aW9u
LAorICAgICJmbG9hdCI6IGNhbGxGbG9hdEZ1bmN0aW9uCit9OworCitjb25zdCBzY2FsYXJBcmdN
YWtlcnMgPSB7CisgICAgImJvb2wiOiBtYWtlQm9vbCwKKyAgICAiaW50IjogbWFrZUludCwKKyAg
ICAidWNoYXIiOiBtYWtlVWNoYXIsCisgICAgInVpbnQiOiBtYWtlVWludCwKKyAgICAiZmxvYXQi
OiBtYWtlRmxvYXQKK307CisKK2NvbnN0IGFycmF5VHlwZUxlbmd0aHMgPSB7CisgICAgImZsb2F0
NCI6IDQsCisgICAgImZsb2F0NHg0IjogMTYKK307CisKK2NvbnN0IGFycmF5RnVuY3MgPSB7Cisg
ICAgImZsb2F0NCI6IGNhbGxGbG9hdDRGdW5jdGlvbiwKKyAgICAiZmxvYXQ0eDQiOiBjYWxsRmxv
YXQ0eDRGdW5jdGlvbiwKK307CisKK2NvbnN0IGFycmF5QXJnTWFrZXJzID0geworICAgICJmbG9h
dDQiOiBtYWtlRmxvYXQ0LAorICAgICJmbG9hdDR4NCI6IG1ha2VGbG9hdDR4NAorfTsKKworY29u
c3QgZmxvYXQ0eDRleHBlY3RlZCA9IFswLCA0LCA4LCAxMiwgMSwgNSwgOSwgMTMsIDIsIDYsIDEw
LCAxNCwgMywgNywgMTEsIDE1XTsKK2NvbnN0IGZsb2F0NHg0Q29sdW1uRXhwZWN0ZWQgPSBbMCwg
MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNV07Citjb25z
dCBmbG9hdDRleHBlY3RlZCA9IFswLCAxLCAyLCAzXTsKKworbGV0IHdobHNsVGVzdHMgPSB7fTsK
Kword2hsc2xUZXN0cy5saXRlcmFscyA9ICgpID0+IHsKKyAgICBjaGVja0Jvb2xzKCJSZXR1cm4g
YSBsaXRlcmFsIG9mIHR5cGUgYm9vbC4iLCAicmV0dXJuIHRydWU7Iik7CisgICAgY2hlY2tBcnJh
eXMoImZsb2F0NCIsICJyZXR1cm4gZmxvYXQ0KDAsIDEsIDIsIDMpOyIsIFtdLCBmbG9hdDRleHBl
Y3RlZCk7CisgICAgY2hlY2tOdW1lcmljU2NhbGFycygicmV0dXJuIDQyOyIsIFtdLCA0Mik7Cit9
OworCit3aGxzbFRlc3RzLnNpbmdsZUFyZ3VtZW50ID0gKCkgPT4geworICAgIGNoZWNrQm9vbHMo
IlVwbG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2YWx1ZS4iLCAicmV0dXJuIGluMDsiLCBbdHJ1ZV0p
OworICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0ZXhwZWN0
ZWRdLCBmbG9hdDRleHBlY3RlZCk7CisgICAgY2hlY2tOdW1lcmljU2NhbGFycygicmV0dXJuIGlu
MDsiLCBbNDJdLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLm1hbnlBcmd1bWVudHMgPSAoKSA9PiB7
CisgICAgY2hlY2tCb29scygiVXBsb2FkIG1hbnkgYm9vbCB2YWx1ZXMgYW5kIHJldHVybiBhIGNh
bGN1bGF0ZWQgcmVzdWx0LiIsCisgICAgICAgICJyZXR1cm4gaW4wICYgaW4xICYgaW4yICYgaW4z
ICYgaW40ICYgaW41ICYgaW42ICYgaW43OyIsCisgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlLCB0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7CisKKyAgICBsZXQgYm9keSA9ICJyZXR1cm4g
ZmxvYXQ0KGluMC54LCBpbjEueSwgaW4yLnosIGluMy53KTsiCisgICAgbGV0IGFyZ3MgPSBbXTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgYXJncy5wdXNoKGZsb2F0
NGV4cGVjdGVkKTsKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0IiwgYm9keSwgYXJncywgZmxvYXQ0
ZXhwZWN0ZWQpOworCisgICAgYm9keSA9IGByZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsg
aW40ICsgaW41ICsgaW42ICsgaW43O2A7CisgICAgY2hlY2tOdW1lcmljU2NhbGFycyhib2R5LCBb
MCwgMSwgMiwgMywgNCwgNSwgNiwgN10sIDI4KTsKK307CisKK3dobHNsVGVzdHMuYnVmZmVyc1dp
dGhPbmVWYWx1ZSA9ICgpID0+IHsKKyAgICBjb25zdCBib2R5ID0gYHJldHVybiBpbjBbMF07YAor
ICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCBib2R5LCBbW2Zsb2F0NGV4cGVjdGVkXV0sIGZsb2F0
NGV4cGVjdGVkKTsKKyAgICBjaGVja051bWVyaWNTY2FsYXJzKGJvZHksIFtbNDJdXSwgNDIpOwor
fTsKKword2hsc2xUZXN0cy5tdWx0aXBsZUJ1ZmZlckFyZ3VtZW50cyA9ICgpID0+IHsKKyAgICBs
ZXQgYm9keSA9IGAKKyAgICBmbG9hdCB4ID0gaW4wWzBdLnggKyBpbjBbMV0ueCArIGluMFsyXS54
ICsgaW4xLnggKyBpbjJbMF0ueDsKKyAgICBmbG9hdCB5ID0gaW4wWzBdLnkgKyBpbjBbMV0ueSAr
IGluMFsyXS55ICsgaW4xLnkgKyBpbjJbMF0ueTsKKyAgICBmbG9hdCB6ID0gaW4wWzBdLnogKyBp
bjBbMV0ueiArIGluMFsyXS56ICsgaW4xLnogKyBpbjJbMF0uejsKKyAgICBmbG9hdCB3ID0gaW4w
WzBdLncgKyBpbjBbMV0udyArIGluMFsyXS53ICsgaW4xLncgKyBpbjJbMF0udzsKKworICAgIHJl
dHVybiBmbG9hdDQoeCwgeSwgeiwgdyk7YDsKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0IiwgYm9k
eSwgW1tmbG9hdDRleHBlY3RlZCwgZmxvYXQ0ZXhwZWN0ZWQsIGZsb2F0NGV4cGVjdGVkXSwgZmxv
YXQ0ZXhwZWN0ZWQsIFtmbG9hdDRleHBlY3RlZF1dLCBbMCwgNSwgMTAsIDE1XSk7CisKKyAgICBi
b2R5ID0gYHJldHVybiBpbjBbMF0gKyBpbjBbMV0gKyBpbjBbMl0gKyBpbjEgKyBpbjJbMF07YDsK
KyAgICBjaGVja051bWVyaWNTY2FsYXJzKGJvZHksIFtbMCwgMSwgMl0sIDMsIFs0XV0sIDEwKTsK
K307CisKK3dobHNsVGVzdHMubXVsdGlwbGVBcmd1bWVudFR5cGVzID0gKCkgPT4geworICAgIGNv
bnN0IHNyYyA9IGBmbG9hdCB0ZXN0KGludCBpLCB1Y2hhciBjLCBmbG9hdDQgZjQsIGRldmljZSB1
aW50W10gdSwgZGV2aWNlIGZsb2F0W10gZnMpCisgICAgeworICAgICAgICByZXR1cm4gZmxvYXQo
aSkgKyBmbG9hdChjKSArIGY0LnggKyBmNC55ICsgZjQueiArIGY0LncgKyBmbG9hdCh1WzBdKSAr
IGZzWzBdICsgZnNbMV07CisgICAgfWA7CisgICAgY29uc3QgaSA9IG1ha2VJbnQoMSk7CisgICAg
Y29uc3QgYyA9IG1ha2VVY2hhcigyKTsKKyAgICBjb25zdCBmNCA9IG1ha2VGbG9hdDQoWzQsIDUs
IDYsIDddKTsKKyAgICBjb25zdCB1ID0gbWFrZVVpbnQoWzNdKTsKKyAgICBjb25zdCBmcyA9IG1h
a2VGbG9hdChbOCwgOV0pOworICAgIHdlYkdQVVByb21pc2VUZXN0KCgpID0+IHsKKyAgICAgICAg
cmV0dXJuIGNhbGxGbG9hdEZ1bmN0aW9uKHNyYywgInRlc3QiLCBbaSwgYywgZjQsIHUsIGZzXSku
dGhlbihyZXN1bHQgPT4geworICAgICAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0
LCA0NSwgZXBzaWxvbiwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAg
IH0pOworICAgIH0sICJVcGxvYWQgYW5kIGNhbGN1bGF0ZSBhIHJlc3VsdCBmcm9tIHZhcmllZCBh
cmd1bWVudCB0eXBlcy4iKTsKK307CisKK3dobHNsVGVzdHMuYnVmZmVyU3RvcmVzID0gKCkgPT4g
eworICAgIGxldCBzcmMgPSBgdm9pZCB0ZXN0KGRldmljZSBmbG9hdDRbXSBvdXQpIHsKKyAgICAg
ICAgb3V0WzBdID0gZmxvYXQ0KDAsIDEsIDIsIDMpOworICAgIH1gOworICAgIGNvbnN0IGZsb2F0
NE91dCA9IG1ha2VGbG9hdDQoW1swLCAwLCAwLCAwXV0pOworICAgIGNhbGxWb2lkRnVuY3Rpb24o
c3JjLCAidGVzdCIsIGZsb2F0NE91dCk7CisKKyAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7
CisgICAgICAgIHJldHVybiBmbG9hdDRPdXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVm
ZmVyID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJy
YXlCdWZmZXIpOworICAgICAgICAgICAgZm9yIChsZXQgaTsgaSA8IDQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtpXSwgaSwgIlRlc3Qgc3RvcmVk
IGV4cGVjdGVkIHZhbHVlcy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwg
IlN0b3JlIGludG8gYSBmbG9hdDRbXS4iKTsKKworICAgIHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNl
IGludFtdIGluLCBkZXZpY2UgaW50W10gb3V0KSB7CisgICAgICAgIGZvciAodWludCBpID0gMDsg
aSA8IDU7IGkgPSBpICsgMSkKKyAgICAgICAgICAgIG91dFtpXSA9IGluW2ldOworICAgIH1gOwor
ICAgIGNvbnN0IGFycmF5ID0gWzAsIDEsIDIsIDMsIDRdOworICAgIGNvbnN0IGlucHV0ID0gbWFr
ZUludChhcnJheSk7CisgICAgY29uc3Qgb3V0cHV0ID0gbWFrZUludChbMCwgMCwgMCwgMCwgMF0p
OworICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7CisK
KyAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7CisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0
QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJl
c3VsdCA9IG5ldyBVaW50MzJBcnJheShhcnJheUJ1ZmZlcik7CisgICAgICAgICAgICBhc3NlcnRf
YXJyYXlfZXF1YWxzKGFycmF5LCByZXN1bHQsICJUZXN0IHN0b3JlZCBleHBlY3RlZCB2YWx1ZXMu
Iik7CisgICAgICAgIH0pOworICAgIH0sICJVcGxvYWQgYSBpbnRbXSBhbmQgc3RvcmUgaW50byBh
IGludFtdLiIpOworfTsKKword2hsc2xUZXN0cy5mbG9hdDR4NHRlc3RzID0gKCkgPT4geworICAg
IGNvbnN0IHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNlIGZsb2F0NHg0W10gaW4sIGRldmljZSBmbG9h
dDR4NFtdIG91dCkgeworICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEp
CisgICAgICAgICAgICBvdXRbaV0gPSBpbltpXTsKKyAgICB9YDsKKyAgICBjb25zdCBpbnB1dCA9
IG1ha2VGbG9hdDR4NChbZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0
eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZF0pOworICAgIGNvbnN0IG91dHB1dCA9IG1ha2VG
bG9hdDR4NChuZXcgQXJyYXkoNjQpLmZpbGwoMCkpOworICAgIGNhbGxWb2lkRnVuY3Rpb24oc3Jj
LCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7CisKKyAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9
PiB7CisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVm
ZmVyID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJy
YXlCdWZmZXIpOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opCisgICAgICAgICAgICAg
ICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtpICogMTYgKyBqXSwgZmxvYXQ0eDRl
eHBlY3RlZFtqXSwgZXBzaWxvbiwgIlRlc3Qgc3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwgIlVwbG9hZCBhIGZsb2F0NHg0W10gYW5k
IHN0b3JlIGludG8gYSBmbG9hdDR4NFtdLiIpOworCisgICAgY2hlY2tBcnJheXMoImZsb2F0NHg0
IiwgInJldHVybiBmbG9hdDR4NChmbG9hdDQoMCwgMSwgMiwgMyksIGZsb2F0NCg0LCA1LCA2LCA3
KSwgZmxvYXQ0KDgsIDksIDEwLCAxMSksIGZsb2F0NCgxMiwgMTMsIDE0LCAxNSkpOyIsIFtdLCBm
bG9hdDR4NGV4cGVjdGVkKTsKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0eDQiLCAicmV0dXJuIGlu
MDsiLCBbZmxvYXQ0eDRleHBlY3RlZF0sIGZsb2F0NHg0ZXhwZWN0ZWQpOworICAgIGxldCBtdWx0
aXBsZTR4NGFyZ3MgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAg
ICAgICAgY29uc3QgYXJnID0gbmV3IEFycmF5KDE2KTsKKyAgICAgICAgYXJnLmZpbGwoMCk7Cisg
ICAgICAgIGFyZ1tpXSA9IGk7CisgICAgICAgIG11bHRpcGxlNHg0YXJncy5wdXNoKGFyZyk7Cisg
ICAgfQorICAgIGNoZWNrQXJyYXlzKCJmbG9hdDR4NCIsICJyZXR1cm4gaW4wICsgaW4xICsgaW4y
ICsgaW4zICsgaW40ICsgaW41ICsgaW42ICsgaW43ICsgaW44ICsgaW45ICsgaW4xMCArIGluMTEg
KyBpbjEyICsgaW4xMyArIGluMTQgKyBpbjE1OyIsIG11bHRpcGxlNHg0YXJncywgZmxvYXQ0eDRD
b2x1bW5FeHBlY3RlZCk7CisgICAgY2hlY2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBpbjBb
MF07IiwgW1tmbG9hdDR4NGV4cGVjdGVkXV0sIGZsb2F0NHg0ZXhwZWN0ZWQpOworfTsKKword2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCAoKSA9PiB7CisgICAgdHJ5IHsKKyAgICAgICAg
Zm9yIChjb25zdCBuYW1lIGluIHdobHNsVGVzdHMpIHsKKyAgICAgICAgICAgIGlmICghbmFtZS5z
dGFydHNXaXRoKCJfIikpCisgICAgICAgICAgICAgICAgd2hsc2xUZXN0c1tuYW1lXSgpOworICAg
ICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgCisgICAgICAg
IHRocm93IGU7CisgICAgfQorfSk7CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgKi8KKworY29uc3Qg
Y2hlY2tOdW1lcmljU2NhbGFycyA9IChib2R5LCBhcmdWYWx1ZXMsIGV4cGVjdGVkKSA9PiB7Cisg
ICAgbGV0IGZ1bmN0aW9ucyA9IFtdOworICAgIGxldCBzcmMgPSAiIjsKKyAgICBmb3IgKGxldCB0
eXBlIG9mIG51bWVyaWNTY2FsYXJUeXBlcykgeworICAgICAgICBsZXQgbmFtZSwgdmFsdWVzOwor
ICAgICAgICBbc3JjLCBuYW1lLCB2YWx1ZXNdID0gYXBwZW5kU2NhbGFyRnVuY3Rpb25Ub1NvdXJj
ZShzcmMsIHR5cGUsIGJvZHksIGFyZ1ZhbHVlcyk7CisgICAgICAgIGZ1bmN0aW9ucy5wdXNoKHsg
dHlwZTogdHlwZSwgbmFtZTogbmFtZSwgYXJnczogdmFsdWVzLCBleHBlY3RlZDogZXhwZWN0ZWQg
fSk7CisgICAgfQorCisgICAgZm9yIChjb25zdCBmIG9mIGZ1bmN0aW9ucykgeworICAgICAgICBj
b25zdCBjYWxsRnVuYyA9IG51bWVyaWNTY2FsYXJGdW5jc1tmLnR5cGVdOworICAgICAgICB3ZWJH
UFVQcm9taXNlVGVzdChhc3luYyAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gY2FsbEZ1bmMo
c3JjLCBmLm5hbWUsIGYuYXJncykudGhlbihyZXN1bHQgPT4geworICAgICAgICAgICAgICAgIGFz
c2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdCwgZi5leHBlY3RlZCwgZXBzaWxvbiwgIlRlc3QgcmV0
dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgYFJl
dHVybiBhbiBleHBlY3RlZCAke2YudHlwZX0gdmFsdWUuYCk7CisgICAgfQorfTsKKworY29uc3Qg
Y2hlY2tCb29scyA9IChtc2cgPSAiUmV0dXJuIGFuIGV4cGVjdGVkIGJvb2wgdmFsdWUuIiwgYm9k
eSwgYXJnVmFsdWVzID0gW10sIGV4cGVjdGVkID0gdHJ1ZSkgPT4geworICAgIGNvbnN0IFtzcmMs
IG5hbWUsIHZhbHVlc10gPSBhcHBlbmRTY2FsYXJGdW5jdGlvblRvU291cmNlKCIiLCAiYm9vbCIs
IGJvZHksIGFyZ1ZhbHVlcyk7IAorCisgICAgd2ViR1BVUHJvbWlzZVRlc3QoYXN5bmMgKCkgPT4g
eworICAgICAgICByZXR1cm4gY2FsbEJvb2xGdW5jdGlvbihzcmMsIG5hbWUsIHZhbHVlcykudGhl
bihyZXN1bHQgPT4geworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGV4cGVjdGVk
LCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICAgICAgfSwgZSA9PiB7Cisg
ICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV2ViR1BVVW5zdXBwb3J0ZWRFcnJvcikpCisg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSk7CisgICAgfSwgbXNnKTsKK307CisK
K2NvbnN0IGNoZWNrQXJyYXlzID0gKHR5cGUsIGJvZHksIGFyZ1ZhbHVlcyA9IFtdLCBleHBlY3Rl
ZCkgPT4geworICAgIGxldCBpbnB1dEFyZ3MgPSBbXTsKKyAgICBsZXQgdmFsdWVzID0gW107Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdWYWx1ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
Ly8gU3VwcG9ydCBhcnJheXMgb2YgZmxvYXQ0LCBpbmNsdWRpbmcgb25lIHdpdGggYSBzaW5nbGUg
ZmxvYXQ0LgorICAgICAgICBjb25zdCB0b3RhbExlbmd0aCA9IGFyZ1ZhbHVlc1tpXS5mbGF0KCku
bGVuZ3RoOworICAgICAgICBjb25zdCBpc0J1ZmZlciA9IGFyZ1ZhbHVlc1tpXS5sZW5ndGggPT09
IDEgfHwgdG90YWxMZW5ndGggPiBhcnJheVR5cGVMZW5ndGhzW3R5cGVdOworICAgICAgICBpbnB1
dEFyZ3MucHVzaChgJHtpc0J1ZmZlciA/ICJkZXZpY2UgIiA6ICIifSR7dHlwZX0ke2lzQnVmZmVy
ID8gIltdIiA6ICIifSBpbiR7aX1gKTsKKyAgICAgICAgdmFsdWVzLnB1c2goYXJyYXlBcmdNYWtl
cnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7CisgICAgfQorCisgICAgY29uc3Qgc3JjID0gYCR7dHlw
ZX0gJHt0eXBlfVRlc3QoJHtpbnB1dEFyZ3Muam9pbigiLCAiKX0pIHsgJHtib2R5fSB9CisgICAg
YDsKKworICAgIHdlYkdQVVByb21pc2VUZXN0KGFzeW5jICgpID0+IHsKKyAgICAgICAgcmV0dXJu
IGFycmF5RnVuY3NbdHlwZV0oc3JjLCBgJHt0eXBlfVRlc3RgLCB2YWx1ZXMpLnRoZW4ocmVzdWx0
ID0+IHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlUeXBlTGVuZ3Roc1t0
eXBlXTsgKytpKQorICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtp
XSwgZXhwZWN0ZWRbaV0sIGVwc2lsb24sICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIp
OworICAgICAgICB9KTsKKyAgICB9LCBgUmV0dXJuIGFuIGV4cGVjdGVkICR7dHlwZX0gdmFsdWUu
YCk7Cit9CisKK2NvbnN0IGFwcGVuZFNjYWxhckZ1bmN0aW9uVG9Tb3VyY2UgPSAoc3JjLCB0eXBl
LCBib2R5LCBhcmdWYWx1ZXMpID0+IHsKKyAgICBjb25zdCBuYW1lID0gYCR7dHlwZX1UZXN0YDsK
KworICAgIGxldCBpbnB1dEFyZ3MgPSBbXTsKKyAgICBsZXQgdmFsdWVzID0gW107CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBhcmdWYWx1ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
aXNCdWZmZXIgPSBBcnJheS5pc0FycmF5KGFyZ1ZhbHVlc1tpXSk7CisgICAgICAgIGlucHV0QXJn
cy5wdXNoKGAke2lzQnVmZmVyID8gImRldmljZSAiIDogIiJ9JHt0eXBlfSR7aXNCdWZmZXIgPyAi
W10iIDogIiJ9IGluJHtpfWApOworICAgICAgICB2YWx1ZXMucHVzaChzY2FsYXJBcmdNYWtlcnNb
dHlwZV0oYXJnVmFsdWVzW2ldKSk7CisgICAgfQorCisgICAgc3JjICs9IGAke3R5cGV9ICR7bmFt
ZX0oJHtpbnB1dEFyZ3Muam9pbigiLCAiKX0pIHsgJHtib2R5fSB9CisgICAgYDsKKyAgICAKKyAg
ICByZXR1cm4gW3NyYywgbmFtZSwgdmFsdWVzXTsKK307Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1nZXRkaW1lbnNpb25z
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1nZXRkaW1l
bnNpb25zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRk
MjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3RleHR1cmVzLWdldGRpbWVuc2lvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAor
UEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtZ2V0ZGltZW5z
aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLWdldGRpbWVuc2lv
bnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xOWYxMmY4YTFmMzZmYmE4ZTkzZDNhNzFhYmMwN2ZmNDAyNjIx
Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVz
LWdldGRpbWVuc2lvbnMuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10
aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoVGV4dHVyZTJEPGZs
b2F0ND4gdGhlVGV4dHVyZSA6IHJlZ2lzdGVyKHQwKSwgZGV2aWNlIHVpbnRbXSB0aGVCdWZmZXIg
OiByZWdpc3Rlcih1MSkpIHsKKyAgICB1aW50IHdpZHRoOworICAgIHVpbnQgaGVpZ2h0OworICAg
IHVpbnQgbnVtYmVyT2ZMZXZlbHM7CisgICAgR2V0RGltZW5zaW9ucyh0aGVUZXh0dXJlLCAwLCAm
d2lkdGgsICZoZWlnaHQsICZudW1iZXJPZkxldmVscyk7CisgICAgdGhlQnVmZmVyWzBdID0gd2lk
dGg7CisgICAgdGhlQnVmZmVyWzFdID0gaGVpZ2h0OworICAgIHRoZUJ1ZmZlclsyXSA9IG51bWJl
ck9mTGV2ZWxzOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic2FtcGxlZC10ZXh0dXJlIn0sIHtiaW5kaW5nOiAxLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2Us
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB0ZXh0dXJlRGVzY3JpcHRvciA9IHtzaXplOiB7d2lkdGg6IDIsIGhlaWdodDog
MiwgZGVwdGg6IDF9LCBmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgdXNhZ2U6IEdQVVRleHR1cmVVc2Fn
ZS5TQU1QTEVEfTsKKyAgICBjb25zdCB0ZXh0dXJlID0gZGV2aWNlLmNyZWF0ZVRleHR1cmUodGV4
dHVyZURlc2NyaXB0b3IpOworICAgIGNvbnN0IHRleHR1cmVWaWV3ID0gdGV4dHVyZS5jcmVhdGVE
ZWZhdWx0VmlldygpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZTogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAzLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1bHRz
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZTog
VWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAzfTsKKyAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5ncyA9IFt7YmluZGluZzogMCwgcmVzb3VyY2U6IHRleHR1cmVWaWV3fSwge2JpbmRpbmc6
IDEsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfV07CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3Jp
cHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IGJpbmRHcm91cEJpbmRp
bmdzfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRH
cm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIg
PSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNw
YXRjaCgxLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNB
cnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgY29u
c3QgcmVzdWx0c1VpbnQzMkFycmF5ID0gbmV3IFVpbnQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZl
cik7CisgICAgaWYgKHJlc3VsdHNVaW50MzJBcnJheVswXSA9PSAyCisgICAgICAgICYmIHJlc3Vs
dHNVaW50MzJBcnJheVsxXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNVaW50MzJBcnJheVsyXSA9
PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAg
ICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2Vk
KCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC1leHBl
Y3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLWxvYWQtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhl
MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVz
LWxvYWQtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1sb2FkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNGZlMGZj
ODRlOWQ0MjY3NzhjMjgxMTZiZWUyYWYzYTRhYjZmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC5odG1sCkBAIC0wLDAgKzEsMTQzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0
IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoVGV4dHVyZTJEPGZsb2F0ND4g
dGhlVGV4dHVyZSA6IHJlZ2lzdGVyKHQwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIExv
YWQodGhlVGV4dHVyZSwgaW50MigwLCAwKSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRl
dmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kg
PSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9u
dEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBb
e2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6
IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0
YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwg
YXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBd
OworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzYW1wbGVkLXRleHR1cmUifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0
YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRl
LCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3Vu
dDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUg
PSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgdGV4dHVyZURh
dGFCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogMiAqIDIsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkMgfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih0ZXh0dXJlRGF0YUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHRl
eHR1cmVEYXRhQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB0ZXh0dXJlRGF0YUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5ID0gbmV3
IFVpbnQ4QXJyYXkodGV4dHVyZURhdGFCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdGV4dHVyZURh
dGFCdWZmZXJVaW50OEFycmF5WzBdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhB
cnJheVsxXSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMl0gPSAyNTU7
CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzNdID0gMjU1OworICAgIHRleHR1cmVE
YXRhQnVmZmVyVWludDhBcnJheVs0XSA9IDEyODsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4
QXJyYXlbNV0gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzZdID0gMTI4
OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs3XSA9IDI1NTsKKyAgICB0ZXh0dXJl
RGF0YUJ1ZmZlclVpbnQ4QXJyYXlbOF0gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50
OEFycmF5WzldID0gMTI4OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxMF0gPSAx
Mjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzExXSA9IDI1NTsKKyAgICB0ZXh0
dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTJdID0gMTI4OworICAgIHRleHR1cmVEYXRhQnVmZmVy
VWludDhBcnJheVsxM10gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzE0
XSA9IDEyODsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTVdID0gMjU1OworICAg
IHRleHR1cmVEYXRhQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCB0ZXh0dXJlRGVzY3JpcHRv
ciA9IHtzaXplOiB7d2lkdGg6IDIsIGhlaWdodDogMiwgZGVwdGg6IDF9LCBmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgdXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5TQU1QTEVEIHwgR1BVVGV4dHVyZVVzYWdl
LlRSQU5TRkVSX0RTVH07CisgICAgY29uc3QgdGV4dHVyZSA9IGRldmljZS5jcmVhdGVUZXh0dXJl
KHRleHR1cmVEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB0ZXh0dXJlVmlldyA9IHRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmdzID0gW3tiaW5k
aW5nOiAwLCByZXNvdXJjZTogdGV4dHVyZVZpZXd9XTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNj
cmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogYmluZEdyb3VwQmlu
ZGluZ3N9OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmlu
ZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKwor
ICAgIGNvbnN0IGJ1ZmZlckNvcHlWaWV3ID0ge2J1ZmZlcjogdGV4dHVyZURhdGFCdWZmZXIsIHJv
d1BpdGNoOiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIsIGltYWdlSGVpZ2h0
OiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAyfTsKKyAgICBjb25zdCB0
ZXh0dXJlQ29weVZpZXcgPSB7dGV4dHVyZTogdGV4dHVyZX07CisgICAgY29uc3QgY29weVNpemUg
PSB7d2lkdGg6IDIsIGhlaWdodDogMiwgZGVwdGg6IDF9OworICAgIGNvbW1hbmRFbmNvZGVyLmNv
cHlCdWZmZXJUb1RleHR1cmUoYnVmZmVyQ29weVZpZXcsIHRleHR1cmVDb3B5VmlldywgY29weVNp
emUpOworCisgICAgY29uc3QgY2xlYXJDb2xvciA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsK
KyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJl
VmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3Rv
cmUiLCBjbGVhckNvbG9yfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51
bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBj
b21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmlu
aXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0
YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1do
aXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC90ZXh0dXJlcy1zYW1wbGUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC90ZXh0dXJlcy1zYW1wbGUtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2
NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLXNhbXBsZS1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3RleHR1cmVzLXNhbXBsZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1
cmVzLXNhbXBsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzNDVlNDc3MDRmZjFhMGFlZGU0NGIyNjFjNjA2
MDliYWRkOWU2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
dGV4dHVyZXMtc2FtcGxlLmh0bWwKQEAgLTAsMCArMSwxNDYgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAor
dmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
KSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK2ZyYWdtZW50IGZs
b2F0NCBmcmFnbWVudFNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJlIDogcmVnaXN0
ZXIodDApLCBzYW1wbGVyIHRoZVNhbXBsZXIgOiByZWdpc3RlcihzMSkpIDogU1ZfVGFyZ2V0IDAg
eworICAgIHJldHVybiBTYW1wbGUodGhlVGV4dHVyZSwgdGhlU2FtcGxlciwgZmxvYXQyKDAuNSwg
MC41KSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
fTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmli
dXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElu
cHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5
cGU6ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJzYW1wbGVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
MERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAo
KTsKKworICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50
OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAyLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB0
ZXh0dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodGV4dHVyZURhdGFCdWZmZXJE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgdGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHRleHR1cmVE
YXRhQnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KHRleHR1cmVEYXRhQnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVswXSA9IDI1NTsKKyAg
ICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFC
dWZmZXJVaW50OEFycmF5WzJdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJh
eVszXSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbNF0gPSAyNTU7Cisg
ICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVdID0gMjU1OworICAgIHRleHR1cmVEYXRh
QnVmZmVyVWludDhBcnJheVs2XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJy
YXlbN10gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzhdID0gMjU1Owor
ICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0
YUJ1ZmZlclVpbnQ4QXJyYXlbMTBdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhB
cnJheVsxMV0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzEyXSA9IDI1
NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTNdID0gMjU1OworICAgIHRleHR1
cmVEYXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJV
aW50OEFycmF5WzE1XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6ZToge3dpZHRoOiAyLCBoZWlnaHQ6IDIs
IGRlcHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIsIHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2Uu
U0FNUExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZFUl9EU1R9OworICAgIGNvbnN0IHRleHR1
cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBz
YW1wbGVyRGVzY3JpcHRvciA9IHttYWdGaWx0ZXI6ICJsaW5lYXIiLCBtaW5GaWx0ZXI6ICJsaW5l
YXIifTsKKyAgICBjb25zdCBzYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoc2FtcGxlckRl
c2NyaXB0b3IpOworCisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZ3MgPSBbe2JpbmRpbmc6IDAs
IHJlc291cmNlOiB0ZXh0dXJlVmlld30sIHtiaW5kaW5nOiAxLCByZXNvdXJjZTogc2FtcGxlcn1d
OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlv
dXQsIGJpbmRpbmdzOiBiaW5kR3JvdXBCaW5kaW5nc307CisgICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQorCisgICAgY29uc3QgYnVmZmVyQ29weVZpZXcgPSB7YnVm
ZmVyOiB0ZXh0dXJlRGF0YUJ1ZmZlciwgcm93UGl0Y2g6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA0ICogMiwgaW1hZ2VIZWlnaHQ6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogMiAqIDJ9OworICAgIGNvbnN0IHRleHR1cmVDb3B5VmlldyA9IHt0ZXh0dXJlOiB0ZXh0
dXJlfTsKKyAgICBjb25zdCBjb3B5U2l6ZSA9IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDog
MX07CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShidWZmZXJDb3B5Vmll
dywgdGV4dHVyZUNvcHlWaWV3LCBjb3B5U2l6ZSk7CisKKyAgICBjb25zdCBjbGVhckNvbG9yID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3J9XTsKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3Jp
cHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBj
b25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBi
aW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3Zl
cnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwg
MCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRC
dWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9
LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNpb25hbC1hcnJheS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdHdvLWRpbWVuc2lvbmFsLWFy
cmF5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdm
OGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3R3by1kaW1lbnNpb25hbC1hcnJheS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNT
IAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90d28tZGltZW5zaW9uYWwtYXJyYXku
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90d28tZGltZW5zaW9uYWwtYXJyYXkuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jZGEzNTliNmM4ZjIxMWNiMDg5MTU2YjdiZGFlMWU5NzhmZWE0YjIzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNpb25h
bC1hcnJheS5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZvaWQgZmlsbCh0
aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0WzEwXSB2YWx1ZSkgeworICAgIGZvciAodWlu
dCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGFycmF5W2ld
ID0gdmFsdWU7CisgICAgfQorfQorCit2b2lkIGZpbGwodGhyZWFkIGZsb2F0W10gYXJyYXksIGZs
b2F0IHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0g
aSArIDEpIHsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKK2Jvb2wgY29u
dGFpbnModGhyZWFkIGZsb2F0WzEwXVtdIGFycmF5LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAo
dWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGZvciAo
dWludCBqID0gMDsgaiA8IGFycmF5W2pdLmxlbmd0aDsgaiA9IGogKyAxKSB7CisgICAgICAgICAg
ICBpZiAoYXJyYXlbaV1bal0gIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIGNvbnRhaW5z
KHRocmVhZCBmbG9hdFtdIGFycmF5LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0g
MDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGlmIChhcnJheVtpXSAh
PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFk
ZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDog
U1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0WzEwXVs1XSBhcnJheTsKKyAgICBpZiAo
YXJyYXkubGVuZ3RoICE9IDUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNvbnRhaW5zKEBh
cnJheSwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGZsb2F0WzEwXSB2YWx1ZTsKKyAgICAg
ICAgZmlsbChAdmFsdWUsIGZsb2F0KGkpKTsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAg
ICB9CisKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgPSBpICsgMSkg
eworICAgICAgICBmbG9hdFsxMF0gdmFsdWUgPSBhcnJheVtpXTsKKyAgICAgICAgaWYgKCFjb250
YWlucyhAdmFsdWUsIGZsb2F0KGkpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBidWZmZXJbMF0gPSAxOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewor
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKwor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGlu
ZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0
ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAx
OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25z
dCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBi
aW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29t
bWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBj
b21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVy
LCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5l
KGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgw
LCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsK
KyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3
YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgbGV0IHJlc3VsdHNJbnQzMkFy
cmF5ID0gbmV3IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0
c0ludDMyQXJyYXlbMF0gPT09IDEpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UK
KyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90
eXBlLW1pc21hdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90eXBl
LW1pc21hdGNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTc4Njg1YmQwY2MzNThlM2M4YzU1
NWUwMWVjZGY3MmFhODYyNTdmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3R5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorCitQQVNT
IHR5cGVNaXNtYXRjaFJldHVybiAKK1BBU1MgdHlwZU1pc21hdGNoVmFyaWFibGVEZWNsIAorUEFT
UyB0eXBlTWlzbWF0Y2hBc3NpZ25tZW50IAorUEFTUyB0eXBlTWlzbWF0Y2hSZXR1cm5QYXJhbSAK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0Y2guaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90eXBlLW1pc21hdGNoLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWFlZDI0NDNjNmQ5M2QyYmUzYmFiOWY3NjJjNmI2ZGJhYjk0NDg5OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90eXBlLW1pc21hdGNoLmh0bWwKQEAgLTAs
MCArMSw2MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+
Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBX
SExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0
cy50eXBlTWlzbWF0Y2hSZXR1cm4gPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFp
bCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDEwLjU7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQor
Cit3aGxzbFRlc3RzLnR5cGVNaXNtYXRjaFZhcmlhYmxlRGVjbCA9IGFzeW5jICgpID0+Cit7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbyh1aW50
IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHkgPSB4OworICAgICAgICAg
ICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy50eXBlTWlzbWF0Y2hBc3NpZ25tZW50
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAg
ICAgICAgIHZvaWQgZm9vKHVpbnQgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnQgeTsKKyAgICAgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7
Cit9CisKK3dobHNsVGVzdHMudHlwZU1pc21hdGNoUmV0dXJuUGFyYW0gPSBhc3luYyAoKSA9Pgor
eworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbyh1
aW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAg
ICAgICB9CisgICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKworPC9zY3Jp
cHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdWludC1i
aXR3aXNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJpdHdp
c2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjZDY4NGY1MzU5MTE1YjA0NDI2NTIzZWU2NmRl
OTIwNDc4ZjBmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
dWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyB1aW50Qml0
QW5kIAorUEFTUyB1aW50Qml0T3IgCitQQVNTIHVpbnRCaXRYb3IgCitQQVNTIHVpbnRCaXROb3Qg
CitQQVNTIHVpbnRMU2hpZnQgCitQQVNTIHVpbnRSU2hpZnQgCitQQVNTIHVpbnRTaW1wbGVNYXRo
IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdWludC1iaXR3aXNlLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdWludC1iaXR3aXNlLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGY1OTEzOTlhZGE2ZjFjNTQ2YTk2ZDM1Y2JhZTNjODRhYTc3YjVjNgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJpdHdpc2UuaHRtbApAQCAtMCww
ICsxLDEwOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+
Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBX
SExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3do
bHNsVGVzdHMudWludEJpdEFuZCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhICYgYjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMSksIG1ha2VVaW50
KDcpXSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KSwgbWFrZVVpbnQoNDIpXSksIDQyKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludChNYXRoLnBvdygyLCAzMikgLSAxKSwgbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gNyld
KSwgNDI5NDk2NzI4OSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1ha2VVaW50KDg1NzMyKV0pLCAwKTsKK30K
Kword2hsc2xUZXN0cy51aW50Qml0T3IgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYSB8IGI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDEpLCBtYWtl
VWludCg3KV0pLCA3KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg2NTUzNSksIG1ha2VVaW50KDQyKV0pLCA2NTUzNSk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1ha2VVaW50KE1hdGgucG93KDIsIDMy
KSAgLSA3KV0pLCA0Mjk0OTY3Mjk1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFrZVVpbnQoODU3MzIpXSks
IDg1NzMyKTsKK30KKword2hsc2xUZXN0cy51aW50Qml0WG9yID0gYXN5bmMgKCkgPT4geworICAg
IGxldCBwcm9ncmFtID0gYAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9CisgICAgYDsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludCgxKSwgbWFrZVVpbnQoNyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
VWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBtYWtlVWludCg0
MildKSwgNjU0OTMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIsIDMyKSAtIDEpLCBtYWtlVWludChN
YXRoLnBvdygyLCAzMikgLSA3KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxV
aW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFrZVVpbnQoODU3MzIp
XSksIDg1NzMyKTsKK30KKword2hsc2xUZXN0cy51aW50Qml0Tm90ID0gYXN5bmMgKCkgPT4geyAK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgdWludCBmb28odWludCBhKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDEp
XSksIDQyOTQ5NjcyOTQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KV0pLCA0Mjk0OTAxNzYwKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludChNYXRoLnBvdygyLCAzMikgLSAxKV0pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKV0pLCA0Mjk0OTY3
Mjk1KTsKK30KKword2hsc2xUZXN0cy51aW50TFNoaWZ0ID0gYXN5bmMgKCkgPT4geworICAgIGxl
dCBwcm9ncmFtID0gYAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVp
bnQoMSksIG1ha2VVaW50KDcpXSksIDEyOCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
VWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBtYWtlVWludCgy
KV0pLCAyNjIxNDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIsIDMyKSAtIDEpLCBtYWtlVWludCg1
KV0pLCA0Mjk0OTY3MjY0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFrZVVpbnQoMyldKSwgMCk7Cit9Owor
Cit3aGxzbFRlc3RzLnVpbnRSU2hpZnQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYSA+PiBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgxKSwgbWFr
ZVVpbnQoNyldKSwgMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAxNjM4Myk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1ha2VVaW50KDUpXSksIDEzNDIxNzcy
Nyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZVVpbnQoMCksIG1ha2VVaW50KDMpXSksIDApOworfTsKKword2hsc2xUZXN0cy51
aW50U2ltcGxlTWF0aCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9ICJ1aW50IGZv
byh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCArIHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtl
VWludCg1KV0pLCAxMik7CisKKyAgICBwcm9ncmFtID0gInVpbnQgZm9vKHVpbnQgeCwgdWludCB5
KSB7IHJldHVybiB4IC0geTsgfSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1ha2VVaW50KDUpXSksIDIpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VVaW50KDUpLCBtYWtlVWludCg3KV0pLCA0Mjk0OTY3Mjk0KTsKKworICAgIHByb2dyYW0g
PSAidWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggKiB5OyB9IjsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWlu
dCg3KSwgbWFrZVVpbnQoNSldKSwgMzUpOworCisgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3Jr
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5NjAyCisgICAgLy8g
cHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCAvIHk7IH0iOwor
ICAgIC8vIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VVaW50KDcpLCBtYWtlVWludCgyKV0pLCAzKTsKK30KKworcnVuVGVzdHMod2hsc2xU
ZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlh
YmxlLTItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12YXJpYWJsZS0yLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12YXJpYWJsZS0yLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGJlODUyZjM5OWU5YWRiMDUwMTc4NDkwNjI1YzkxYjA4NWIwMmI5ZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTIu
aHRtbApAQCAtMCwwICsxLDQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDEsIDEsIDEp
XQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAg
ZmxvYXQ0IHZlYyA9IGZsb2F0NCh4LHgseCx4KTsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RB
ZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNl
KCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRl
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVy
In07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBb
e2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Cisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0g
e2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0
ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKK30KKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNE
ZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihm
dW5jdGlvbigpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFz
c2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12
YXJpYWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVm
aW5lZC12YXJpYWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVl
YjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VzZS11bmRlZmlu
ZWQtdmFyaWFibGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVk
LXZhcmlhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWE3Y2Q2MjM2NTc1NDlhMzhjOTY1YWFjYWRhOWRh
YjcwNTFhMzUzMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91
c2UtdW5kZWZpbmVkLXZhcmlhYmxlLmh0bWwKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlz
cGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0IGZvbzsKKyAgICBpZiAoZm9vKSB7CisgICAgICAg
IHggPSB4ICsgMTsKKyAgICB9Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOwor
ICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3Rh
Z2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7
Cit9CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1
bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBm
aW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dpbmctZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFkZWU1YjU4OWI0N2M4NWFiMmE0ODA1OTFmMDc3NzIxZmVlMDI5ODEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUtc2hh
ZG93aW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyB2YXJpYWJsZVNoYWRv
d2luZyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3ZhcmlhYmxlLXNo
YWRvd2luZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3ZhcmlhYmxlLXNoYWRvd2lu
Zy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNlYzFhNDM1ZGNmMTA1ZWZiNWY2ZTYyMTBmNzM2ZWE2MDE3Zjcy
ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUt
c2hhZG93aW5nLmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owor
Cit3aGxzbFRlc3RzLnZhcmlhYmxlU2hhZG93aW5nID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCB5OworICAgICAgICAgICAgaW50IHggPSA3OworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGludCB4ID0gODsKKyAgICAgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA4KTsKKworICAgIHBy
b2dyYW0gPSBgCisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
eTsKKyAgICAgICAgICAgIGludCB4ID0gNzsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbnQgeCA9IDg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB5ID0geDsKKyAgICAgICAg
ICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3KTsKK30KKworcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC92ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC92ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDBlZDA5
YWY5OTIwMzgwMmI2MzkxNmM2YTU2ODAxYTc0NTZkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3ZlY3Rvci1zeW50YXgtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMyBAQAorCitQQVNTIHZlY3RvclR5cGVTeW50YXggCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC92ZWN0b3Itc3ludGF4Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvdmVjdG9yLXN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMTVmMzkyYjFkZjlmMjc3Zjg5
ODBlOTNkYjQ2NWE4YzI5OTlkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvdmVjdG9yLXN5bnRheC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLnZlY3RvclR5cGVTeW50YXggPSBhc3luYyAoKSA9PgoreworICAg
IGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vMigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludDIgeDsKKyAgICAgICAgICAgIHZlY3RvcjxpbnQsIDI+IHogPSBpbnQyKDMsIDQpOwor
ICAgICAgICAgICAgeCA9IHo7CisgICAgICAgICAgICByZXR1cm4geC55OworICAgICAgICB9CisK
KyAgICAgICAgaW50IGZvbzMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQzIHg7CisgICAg
ICAgICAgICB2ZWN0b3I8aW50LCAzPiB6ID0gaW50MygzLCA0LCA1KTsKKyAgICAgICAgICAgIHgg
PSB6OworICAgICAgICAgICAgcmV0dXJuIHguejsKKyAgICAgICAgfQorCisgICAgICAgIGludCBm
b280KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50NCB4OworICAgICAgICAgICAgdmVjdG9y
PGludCw0PiB6ID0gaW50NCgzLCA0LCA1LCA2KTsKKyAgICAgICAgICAgIHggPSB6OworICAgICAg
ICAgICAgcmV0dXJuIHgudzsKKyAgICAgICAgfWA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgNCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIDUpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW10p
LCA2KTsKKworICAgIHByb2dyYW0gPSBgCisgICAgICAgIHR5cGVkZWYgaSA9IGludDsKKyAgICAg
ICAgaW50IGZvbzIoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQyIHg7CisgICAgICAgICAg
ICB2ZWN0b3I8aSwgMj4geiA9IGludDIoMywgNCk7CisgICAgICAgICAgICB4ID0gejsKKyAgICAg
ICAgICAgIHJldHVybiB4Lnk7CisgICAgICAgIH1gOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbXSksIDQpOworfQorcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5o
dG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFz
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtYnJlYWsuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC93aGlsZS1sb29wLWJyZWFrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkwNjMwM2EyOGI1ZjQ0YmEx
OGJkYmMzNDRkODRmZDg4MTk5YzA5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC93aGlsZS1sb29wLWJyZWFrLmh0bWwKQEAgLTAsMCArMSwxNDYgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1Zf
UG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBW
ZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAg
Ym9vbCBiID0gdHJ1ZTsKKyAgICB1aW50IGkgPSAwOworICAgIHdoaWxlIChpIDwgMTApIHsKKyAg
ICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNo
YWRlID0gc2hhZGUgKyAxLjA7CisgICAgICAgIGkgPSBpICsgMTsKKyAgICB9CisKKyAgICByZXN1
bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0
NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChk
ZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
cik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9Owor
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Cisg
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlv
bihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0
aW9uKCkgeworICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhl
MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3doaWxlLWxv
b3AtY29udGludWUtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWNvbnRpbnVlLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFlN2RiOWFiM2UyYTM5NzIyMTc5ZjIwMWI0ZjZhNzgzNjBmOWU5ZTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51
ZS5odG1sCkBAIC0wLDAgKzEsMTQ1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7
CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7CisgICAgdWludCBp
ID0gMDsKKyAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAwLjEsIGkgPCAxMCkpIHsKKyAgICAg
ICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGkgPSBpICsgMTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIHNoYWRlID0gMC4wOworICAgIH0KKworICAgIHJlc3VsdC5w
b3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNo
YWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNo
YWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmlj
ZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07
CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAi
dHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZh
Y2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zv
cm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1
fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRl
ID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFk
ZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBh
dHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9
IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlu
cHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdz
OiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07
CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91
dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ig
PSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJp
emF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQs
IHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIw
Lm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzRdID0gMC4xOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAu
MTsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMTsKKworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4xOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsK
KworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAg
Y29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmlu
ZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91
cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dh
cENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBj
b25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRU
ZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNy
ZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5j
cmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAw
LCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50
OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIi
LCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9
IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCBy
ZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQ
YXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVy
UGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3Jv
dXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1
ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvd2hsc2wuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC93aGxzbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3Y2EwZGQzYmJhZjhjZDEwMTMxMmIwOGVhNzljOGNl
ODFmODZjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hs
c2wuaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0
IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IGkgOiBh
dHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKwor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0
aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CitgOworCitjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0g
e3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1
dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OworICAgIGNvbnN0IGlu
cHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29u
c3QgaW5wdXQxID0ge3N0cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMV19OworICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDAsIGlucHV0MV07CisgICAgY29uc3QgdmVydGV4SW5wdXQg
PSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTog
InVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdy
b3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICog
NCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4
QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9
IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1
ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Nl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjAu
dW5tYXAoKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjEgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIxLm1hcFdy
aXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjFG
bG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOworICAgIHZlcnRleEJ1ZmZl
cjFGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsKKworICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAx
LCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRw
dXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9y
ZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xv
ckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVz
Y3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxp
bmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjAs
IHZlcnRleEJ1ZmZlcjFdLCBbMCwgMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30s
IGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd3JvbmctYXJndW1lbnQtbGVuZ3RoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5n
dGgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyY2UzNjk0NTgxOTg1N2FmZTFkMDQxNzM0ZGMw
ZDFlMTUxMmIyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
d3JvbmctYXJndW1lbnQtbGVuZ3RoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIxIEBACisKK1BB
U1MgYml0QW5kV3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgYml0Tm90V3JvbmdBcmd1bWVudExl
bmd0aCAKK1BBU1MgYml0T3JXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBiaXRYb3JXcm9uZ0Fy
Z3VtZW50TGVuZ3RoIAorUEFTUyBkZWNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBkaXZpZGVX
cm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBkb3RPcGVyYXRvclNldHRlcldyb25nQXJndW1lbnRM
ZW5ndGggCitQQVNTIGRvdE9wZXJhdG9yV3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgZ3JlYXRl
ckVxdWFsV3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgZ3JlYXRlcldyb25nQXJndW1lbnRMZW5n
dGggCitQQVNTIGluY1dyb25nQXJndW1lbnRMZW5ndGggCitQQVNTIGluZGV4T3BlcmF0b3JTZXR0
ZXJXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBpbmRleE9wZXJhdG9yV3JvbmdBcmd1bWVudExl
bmd0aCAKK1BBU1MgbFNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgbWludXNXcm9uZ0Fy
Z3VtZW50TGVuZ3RoIAorUEFTUyBtb2R1bG9Xcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBwbHVz
V3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgclNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCAKK1BB
U1MgdGltZXNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvd3JvbmctYXJndW1lbnQtbGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvd3JvbmctYXJndW1lbnQtbGVuZ3RoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVjNDE5MWIx
MGY1YzBhYWVjY2JmZjU2NDVkNDMzY2ZlNjI3NWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbApAQCAtMCwwICsx
LDM2NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8
bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IGludCBiaXQg
bWF0aC48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5iaXRBbmRXcm9uZ0Fy
Z3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0
b3ImKEZvbykgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0
IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAg
ICAgICAgIGludCBvcGVyYXRvciYoRm9vKSB7IHJldHVybiA1MzQ7IH0KKyAgICAgICAgYCk7Cisg
ICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3Ry
dWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvciYoRm9vLCBGb28sIEZvbykgeyBy
ZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5iaXROb3RX
cm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcn4oKSB7IHJldHVybiAzMjsgfQor
ICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yfihGb28s
IEZvbykgeyByZXR1cm4gNTM0OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVz
dHMuYml0T3JXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBj
aGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAg
ICAgICBpbnQgb3BlcmF0b3J8KCkgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAg
IAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZv
byB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcnwoRm9vKSB7IHJldHVybiA1MzQ7IH0KKyAg
ICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcnwoRm9vLCBG
b28sIEZvbykgeyByZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xU
ZXN0cy5iaXRYb3JXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcl4oKSB7IHJl
dHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAor
ICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9w
ZXJhdG9yXihGb28pIHsgcmV0dXJuIDUzNDsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yXihGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQor
ICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmRlY1dyb25nQXJndW1lbnRMZW5n
dGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yLS0oKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAg
ICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yLS0oRm9vLCBGb28pIHsgcmV0dXJu
IDc2OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMuZGl2aWRlV3JvbmdB
cmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3IvKCkgeyByZXR1cm4gMzI7IH0KKyAgICAg
ICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvci8oRm9vKSB7IHJl
dHVybiA1MzQ7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBv
cGVyYXRvci8oRm9vLCBGb28sIEZvbykgeyByZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAg
ICAgIAorfQord2hsc2xUZXN0cy5kb3RPcGVyYXRvclNldHRlcldyb25nQXJndW1lbnRMZW5ndGgg
PSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIEZvbyBvcGVyYXRvci5mb289KCkgeyBy
ZXR1cm4gNDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIEZvbyBv
cGVyYXRvci5mb289KEZvbykgeyByZXR1cm4gNDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7
IH0KKyAgICAgICAgICAgIEZvbyBvcGVyYXRvci5mb289KEZvbywgaW50LCBpbnQpIHsgcmV0dXJu
IDQyOyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMuZG90T3BlcmF0b3JX
cm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28oKSB7IHJldHVybiA0Mjsg
fQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZv
byhGb28sIGludCkgeyByZXR1cm4gNDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hs
c2xUZXN0cy5ncmVhdGVyRXF1YWxXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I+PSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0
IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I+PShGb28pIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7
CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I+PShGb28sIEZvbywgRm9v
KSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMu
Z3JlYXRlcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj4oKSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisg
ICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPihGb28pIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAg
IGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0K
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I+KEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIHRydWU7
IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5pbmNXcm9uZ0FyZ3VtZW50
TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIGludCBvcGVyYXRvcisrKCkgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7
CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcisrKEZvbywgRm9vKSB7IHJl
dHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmluZGV4T3Bl
cmF0b3JTZXR0ZXJXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdPSgpIHsg
cmV0dXJuIDQyOyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdPShpbnQpIHsgcmV0dXJuIDQy
OyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdPShpbnQsIGludCkgeyByZXR1cm4gNDI7IH0K
KyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4g
NDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5pbmRleE9wZXJhdG9y
V3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXSgpIHsgcmV0dXJuIDQyOyB9
CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIGludCBvcGVyYXRvcltdKGludCkgeyByZXR1cm4gNDI7IH0KKyAgICAgICAg
YCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAg
ICAgaW50IG9wZXJhdG9yW10oaW50LCBpbnQsIGludCkgeyByZXR1cm4gNDI7IH0KKyAgICAgICAg
YCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5sU2hpZnRXcm9uZ0FyZ3VtZW50TGVuZ3RoID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAg
ICAgIGludCBvcGVyYXRvcjw8KCkgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAg
IAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZv
byB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcjw8KEZvbykgeyByZXR1cm4gNTM0OyB9Cisg
ICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAg
ICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3I8PChGb28s
IEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxz
bFRlc3RzLm1pbnVzV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3ItKCkgeyBy
ZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBv
cGVyYXRvci0oRm9vLCBGb28sIEZvbykgeyByZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAg
ICAgIAorfQord2hsc2xUZXN0cy5tb2R1bG9Xcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkg
PT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBv
cGVyYXRvciUoKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yJShGb28pIHsgcmV0dXJuIDUzNDsgfQorICAgICAgICBgKTsK
KyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yJShGb28sIEZvbywgRm9vKSB7
IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLnBsdXNX
cm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcisoKSB7IHJldHVybiAzMjsgfQor
ICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yKyhGb28s
IEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxz
bFRlc3RzLnJTaGlmdFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yPj4oKSB7
IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50
IG9wZXJhdG9yPj4oRm9vKSB7IHJldHVybiA1MzQ7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7
IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcj4+KEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2
OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMudGltZXNXcm9uZ0FyZ3Vt
ZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvciooKSB7IHJldHVybiAzMjsgfQorICAgICAgICBg
KTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yKihGb28pIHsgcmV0dXJu
IDUzNDsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJh
dG9yKihGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAg
Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3dyb25nLXR5cGVzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNTUxOGYxYjU5ZDY0NjJmYTY2NTdiMTU1NzJhNDI4YjhkNTFjYWM3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3dyb25nLXR5cGVzLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDggQEAKKworUEFTUyBkZWNXcm9uZ1R5cGVzIAorUEFTUyBpbmNXcm9uZ1R5
cGVzIAorUEFTUyBncmVhdGVyVGhhbldyb25nUmV0dXJuVHlwZSAKK1BBU1MgZ3JlYXRlckVxdWFs
V3JvbmdSZXR1cm5UeXBlIAorUEFTUyBpbmRleFNldHRlcldpdGhNaXNtYXRjaGVkVHlwZSAKK1BB
U1Mgc2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93
cm9uZy10eXBlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlMWExNjE2OTI5YWIzYjFhYjFhOGQ4MzY1MWRk
ZWM1ZjhhNzc1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
d3JvbmctdHlwZXMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgorPHRpdGxlPlRlc3QgaW50IGJpdCBtYXRoLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owor
Cit3aGxzbFRlc3RzLmRlY1dyb25nVHlwZXMgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yLS0oZmxvYXQpIHsg
cmV0dXJuIDMyOyB9CisgICAgICAgIGApOworICAgICAgICAKK30KKword2hsc2xUZXN0cy5pbmNX
cm9uZ1R5cGVzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcisrKGZsb2F0KSB7IHJldHVybiAzMjsgfQorICAg
ICAgICBgKTsKKyAgICAgICAgCit9CisKK3dobHNsVGVzdHMuZ3JlYXRlclRoYW5Xcm9uZ1JldHVy
blR5cGUgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yPihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9
CisgICAgICAgIGApOworICAgICAgICAKK30KKword2hsc2xUZXN0cy5ncmVhdGVyRXF1YWxXcm9u
Z1JldHVyblR5cGUgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yPj0oaW50IGEsIGludCBiKSB7IHJldHVybiBh
ICsgYjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3dobHNsVGVzdHMuaW5kZXhTZXR0
ZXJXaXRoTWlzbWF0Y2hlZFR5cGUgPSBhc3luYyAoKSA9PgoreworICAgIGNoZWNrRmFpbCgKKyAg
ICAgICAgYAorICAgICAgICAgICAgZmxvYXQgb3BlcmF0b3JbXShpbnQsIHVpbnQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDUuNDM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCB1aW50LCBpbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9
CisKK3dobHNsVGVzdHMuc2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlID0gYXN5bmMgKCkgPT4KK3sK
KyAgICBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGZsb2F0IG9wZXJhdG9yLmZv
byhpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDUuNDM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vPShpbnQsIGludCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAgICAgfQorICAg
ICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFs
dWVzLTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRp
YWxpemUtdmFsdWVzLTItZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY4NjlhOTc5NmYzNTg2
NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwZTlkODNkYmNi
MzZiMmY1ODBjZjY5ZjdiYThkNzBlMjI4Y2QzMDcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwKQEAgLTAsMCAr
MSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0
IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7
Cit9CisKK3N0cnVjdCBCYXIgeworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgeTE7CisgICAgZmxv
YXQgeTI7CisgICAgZmxvYXQgeTM7CisgICAgZmxvYXQgeTQ7CisgICAgZmxvYXQgeTU7CisgICAg
ZmxvYXQgeTY7CisgICAgZmxvYXQgeTc7CisgICAgZmxvYXQgeTg7CisgICAgZmxvYXQgeTk7Cisg
ICAgZmxvYXQgeTEwOworICAgIGZsb2F0IHkxMTsKKyAgICBmbG9hdCB5MTI7CisgICAgZmxvYXQg
eTEzOworICAgIGZsb2F0IHkxNDsKKyAgICBmbG9hdCB5MTU7CisgICAgZmxvYXQgeTE2OworICAg
IGZsb2F0IHkxNzsKKyAgICBmbG9hdCB5MTg7CisgICAgZmxvYXQgeTE5OworICAgIGZsb2F0IHky
MDsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91
dCByZXN1bHQ7CisKKyAgICBCYXIgYmFyOworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247CisgICAgcmVzdWx0LnNoYWRlID0gYmFyLnkyMDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNo
YWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVu
dFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlw
IjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxs
TW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVu
b3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xv
cldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
LCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
KyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdC
bGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtZXhwZWN0ZWQuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1
ZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmExMjU2OGZhY2MxMmUzODA5MjY5OTNjNmU0MjQ1NjU1ODc2ZTdlOTIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVl
cy5odG1sCkBAIC0wLDAgKzEsMTQ1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCit0aHJlYWQgZmxvYXQqIHB0cigpIHsKKyAgICBmbG9hdCBs
b2NhbDsKKyAgICByZXR1cm4gJmxvY2FsOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIHRocmVhZCBmbG9hdCogcCA9
IHB0cigpOworICAgICpwID0gMS4wOworICAgIGZsb2F0IHZhbHVlID0gKnB0cigpOyAvLyBjYWxs
aW5nIHB0cigpIHplcm8gaW5pdGlhbGl6ZXMuCisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3Np
dGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSB2YWx1ZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNo
YWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVu
dFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlw
IjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxs
TW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVu
b3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xv
cldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
LCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
KyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdC
bGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374244</attachid>
            <date>2019-07-16 15:01:12 -0700</date>
            <delta_ts>2019-07-16 16:27:32 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-199838-20190716150111.patch</filename>
            <type>text/plain</type>
            <size>911002</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NDk1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmQ2NTFhODExZGM1OWE0NjA1OTU3
MGJiZjc1OTFkNDRjYTVmOTNiMC4uNzc2ZjIxYTQ0OTE4NjdmMjEzOWExOGU4ZDhjNzZkNDgwOTVi
NTc1NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMCBAQAorMjAxOS0wNy0xNiAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTW92ZSBXSExTTCB0
ZXN0cyB0byB0aGVpciBvd24gZm9sZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTk4MzgKKworICAgICAgICBSZXZpZXdlZCBieSBSb2JpbiBNb3Jp
c3NldC4KKworICAgICAgICB3ZWJncHUvd2hsc2wtZm9vLmh0bWwgPT4gd2ViZ3B1L3dobHNsL2Zv
by5odG1sCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy13azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJiaXRy
YXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJiaXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9j
YXRpb25zLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2FyYml0cmFyeS12
ZXJ0ZXgtYXR0cmlidXRlLWxvY2F0aW9ucy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWFyYml0cmFyeS12ZXJ0ZXgtYXR0cmlidXRlLWxvY2F0aW9ucy5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4cGVjdGVk
LnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmd1bWVudC1ldmFs
dWF0aW9uLW9yZGVyLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJndW1l
bnQtZXZhbHVhdGlvbi1vcmRlci5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWFyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVjLXRlc3RzLWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1sZW5ndGgtc3Bl
Yy10ZXN0cy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1z
cGVjLXRlc3RzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYXJyYXktc3Bl
Yy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5
LXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYmFkLWFkZC1leHBlY3Rl
ZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC1leHBl
Y3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JhZC1hZGQuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtYWRkLmh0bWwuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL2JhZC1hbmRlci1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtYmFkLWFuZGVyLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvYmFkLWFuZGVyLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtYmFkLWFuZGVyLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JhZC1saXRlcmFscy1l
eHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWxp
dGVyYWxzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYmFkLWxpdGVyYWxz
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWxpdGVyYWxz
Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQu
dHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJpdHdpc2UtYm9vbC1v
cHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9iaXR3aXNlLWJvb2wtb3Bz
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYml0d2lzZS1ib29s
LW9wcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9ib29scy1leHBlY3RlZC50eHQ6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMtZXhwZWN0ZWQudHh0Lgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9ib29scy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWJvb2xzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1ZmZl
ci1mcmFnbWVudC1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWJ1ZmZlci1mcmFnbWVudC1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9idWZmZXItZnJhZ21lbnQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1idWZmZXItZnJhZ21lbnQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYnVm
ZmVyLWxlbmd0aC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2J1ZmZlci1sZW5ndGguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1idWZmZXItbGVuZ3RoLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1ZmZlci12ZXJ0
ZXgtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1i
dWZmZXItdmVydGV4LWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1ZmZl
ci12ZXJ0ZXguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZm
ZXItdmVydGV4Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0y
LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWls
dGluLXZlY3RvcnMtMi1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2J1aWx0
aW4tdmVjdG9ycy0yLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
YnVpbHRpbi12ZWN0b3JzLTIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvYnVpbHRpbi12
ZWN0b3JzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1idWlsdGluLXZlY3RvcnMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9i
dWlsdGluLXZlY3RvcnMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1idWlsdGluLXZlY3RvcnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvY2FzdHMtZXhw
ZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLWV4
cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvY2FzdHMuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jYXN0cy5odG1sLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9jaGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJp
YWJsZXMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1l
eHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2NoZWNrZXItc2hvdWxkLXNldC10
eXBlLW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJlYWQtbW9k
aWZ5LXdyaXRlLXZhcmlhYmxlcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9jb21tZW50
LXBhcnNpbmctZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWNvbW1lbnQtcGFyc2luZy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2NvbW1lbnQtcGFyc2luZy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWNvbW1lbnQtcGFyc2luZy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9jb21wdXRl
LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21w
dXRlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvY29tcHV0ZS5odG1sOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtY29weS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL2NvcHkuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5
Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVyZW5j
ZS1vcmRlcmluZy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RlcmVmZXJl
bmNlLW9yZGVyaW5nLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZGVyZWZl
cmVuY2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVjay1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5
cGUtY2hlY2stZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZGVyZWZlcmVu
Y2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVjay5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5o
dG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3At
YnJlYWstZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9v
cC1icmVhay5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdo
aWxlLWxvb3AtYnJlYWsuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9v
cC1jb250aW51ZS1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1jb250aW51ZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUuaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvZG9udC1jcmFzaC1wYXJzaW5nLWVudW0tZXhwZWN0ZWQuaHRtbDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb250LWNyYXNoLXBhcnNpbmctZW51bS1l
eHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9kb250LWNyYXNoLXBhcnNpbmct
ZW51bS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvbnQtY3Jh
c2gtcGFyc2luZy1lbnVtLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RvdC1leHByZXNz
aW9ucy1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWRvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9k
b3QtZXhwcmVzc2lvbnMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kb3QtZXhwcmVzc2lvbnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZG91YmxlLW5v
dC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG91
YmxlLW5vdC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2RvdWJsZS1ub3Qu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3VibGUtbm90Lmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxp
Y2F0ZS1jdG9ycy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxpY2F0
ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3Qt
cHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZHVw
bGljYXRlcy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtZHVwbGljYXRlcy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2R1cGxp
Y2F0ZXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNh
dGVzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUt
bGlmZXRpbWUtMi1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi1leHBlY3RlZC5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTIu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZW5zdXJl
LXByb3Blci12YXJpYWJsZS1saWZldGltZS0zLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0z
LWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFy
aWFibGUtbGlmZXRpbWUtMy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1sLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLWV4cGVjdGVkLmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJp
YWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9lbnN1
cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9lbnVtLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0OiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy1leHBlY3RlZC50
eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2VudW0tc3BlYy10ZXN0cy5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9lcXVhbGl0eS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXF1YWxpdHktZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9lcXVhbGl0eS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWVxdWFsaXR5Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2V4cGVjdGVk
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZmxvYXQtbWF0aC1leHBlY3RlZC50eHQ6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZmxvYXQtbWF0aC1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGguaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1mbG9hdC1tYXRoLmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL2Zvci1sb29wLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1mb3ItbG9vcC1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2Zvci1sb29wLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZm9y
LWxvb3AuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvZ2V0dGVyLXNldHRlci10eXBlLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1nZXR0ZXIt
c2V0dGVyLXR5cGUtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9nZXR0ZXIt
c2V0dGVyLXR5cGUuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1n
ZXR0ZXItc2V0dGVyLXR5cGUuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaHVnZS1hcnJh
eS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVn
ZS1hcnJheS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2h1Z2UtYXJyYXku
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC1leHBlY3RlZC50eHQ6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaWYtc3RhdGVtZW50LWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaWYtc3RhdGVtZW50Lmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaWYtc3RhdGVtZW50Lmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0OiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmNyZW1lbnQtZGVjcmVtZW50Lmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5jcmVtZW50LWRlY3JlbWVu
dC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1hbmRlci1leHBlY3RlZC50eHQ6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXItZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1hbmRlci5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWFuZGVyLmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL2luZGV4LWdldHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0OiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWdldHRlci1zZXR0ZXItZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRl
ci5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbmRleC1zZXR0ZXItZ2V0dGVyLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0
ZXItZ2V0dGVyLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW5kZXgtc2V0
dGVyLWdldHRlci5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlu
ZGV4LXNldHRlci1nZXR0ZXIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW50LWJpdC1t
YXRoLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9pbnQtYml0
LW1hdGguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0
LW1hdGguaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvaW50LWxpdGVyYWwtY29tcGFyZS1l
eHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxp
dGVyYWwtY29tcGFyZS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2ludC1s
aXRlcmFsLWNvbXBhcmUuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1pbnQtbGl0ZXJhbC1jb21wYXJlLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvZ2lj
YWwtbmVnYXRpb24tZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWxvZ2ljYWwtbmVnYXRpb24tZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbG9naWNhbC1uZWdhdGlvbi5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9s
b29wcy1icmVhay1leHBlY3RlZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L2xvb3BzLWJyZWFrLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
bG9vcHMtYnJlYWsuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMtY29udGludWUt
ZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29w
cy1jb250aW51ZS1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9sb29wcy1j
b250aW51ZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3Bz
LWNvbnRpbnVlLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLWV4cGVjdGVkLmh0
bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQu
aHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG9vcHMtc3BlYy10ZXN0cy1leHBlY3RlZC50
eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0
cy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMu
aHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1zcGVjLXRl
c3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL2xvb3BzLmh0bWw6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvbG90cy1vZi1sb2NhbC12YXJpYWJsZXMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvdHMtb2YtbG9jYWwtdmFyaWFibGVzLWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbG90cy1vZi1sb2NhbC12YXJpYWJsZXMuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb3RzLW9mLWxvY2FsLXZh
cmlhYmxlcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9sdmFsdWVzLWV4cGVjdGVkLnR4
dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sdmFsdWVzLWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbHZhbHVlcy5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVz
dHMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5
LXJlZi1zcGVjLXRlc3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL21ha2UtYXJyYXkt
cmVmZXJlbmNlLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvbWF0cmljZXMtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cmljZXMtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMuaHRtbDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL21hdHJpeC0yLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtMi1leHBlY3RlZC50eHQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL21hdHJpeC0yLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvbWF0
cml4LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1t
YXRyaXgtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9tYXRyaXgtbWVtb3J5
LWxheW91dC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9tYXRyaXgtbWVtb3J5LWxheW91dC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5b3V0Lmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL21hdHJpeC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW1hdHJpeC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Np
b24tcnZhbHVlLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5odG1sLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLmh0bWw6IFJlbmFt
ZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2
YWx1ZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9uZXN0ZWQtbG9vcC1leHBlY3RlZC5o
dG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLWV4
cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL25lc3RlZC1sb29wLmh0bWw6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvbnVsbC1hcmctZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLWV4cGVjdGVkLnR4dC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvbnVsbC1hcmcuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1udWxsLWFyZy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9udWxsLWFy
cmF5LXJlZi5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwt
YXJyYXktcmVmLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL251bGwtZGVyZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwt
ZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9udWxsLWRl
cmVmZXJlbmNlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVs
bC1kZXJlZmVyZW5jZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vb2ItYWNjZXNzLWV4
cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNj
ZXNzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb29iLWFjY2Vzcy5odG1s
OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQtZXhwZWN0ZWQudHh0OiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9yLW92ZXJsb2FkLWV4
cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQuaHRt
bDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9h
ZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vdmVybG9hZC1leHBlY3RlZC50eHQ6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcmxvYWQtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9vdmVybG9hZC5odG1sOiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL292ZXJyaWRlLXN1YnNjcmlwdC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVzLWVxdWFscy1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
cG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVzdHMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgtcHJlZml4LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXguaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1wb3N0Zml4LXByZWZpeC5odG1sLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtZXhwZWN0ZWQudHh0LgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMtZXhwZWN0
ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5
LXdyaXRlLWhpZ2gtem9tYmllcy1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3JlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmllcy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmllcy5odG1sLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLmh0bWwuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLWV4cGVjdGVkLnR4dDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1cnNpdmUtc3RydWN0cy1leHBlY3Rl
ZC50eHQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWw6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVjdXJzaXZlLXN0cnVjdHMuaHRt
bC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvcmV0dXJuLWxvY2FsLXZhcmlhYmxlLWV4cGVjdGVk
Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2Fs
LXZhcmlhYmxlLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3JldHVybi1s
b2NhbC12YXJpYWJsZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXJldHVybi1sb2NhbC12YXJpYWJsZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9yZXR1
cm4tc3BlYy10ZXN0cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9yZXR1cm4tc3BlYy10ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3NldHRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3NldHRlci1zcGVjLXRlc3RzLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3NpbXBsZS1hcnJheXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLWdldHRlci1zZXR0ZXIuaHRtbC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLWV4cGVjdGVkLnR4dDogUmVuYW1l
ZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zaW1wbGUtdGVzdHMuaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLWV4cGVjdGVkLnR4dC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AuaHRtbDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtd2hpbGUtbG9vcC5odG1sLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9zdG9yZS1udWxsLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvc3RvcmUtbnVsbC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXN0b3JlLW51bGwuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
c3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXN0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMt
cHJvcGVybHktZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc3RvcmUtdG8t
cHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXN0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMtcHJvcGVybHkuaHRtbC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvc3RydWN0LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9zdHJ1Y3QuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1zdHJ1Y3QuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc3dpdGNoLWV4cGVjdGVk
LnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zd2l0Y2guaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvdGVybmFyeS1zcGVjLXRlc3QtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXRlcm5hcnktc3BlYy10ZXN0LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRlc3QuaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXJuYXJ5LXNwZWMtdGVzdC5odG1sLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJv
bSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3RleHR1cmVzLWdldGRpbWVuc2lvbnMtZXhwZWN0ZWQudHh0
OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVu
c2lvbnMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXh0dXJlcy1nZXRk
aW1lbnNpb25zLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtZ2V0ZGltZW5zaW9ucy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXh0dXJl
cy1sb2FkLWV4cGVjdGVkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdGV4dHVyZXMtbG9hZC1leHBlY3RlZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC90
ZXh0dXJlcy1sb2FkLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGV4dHVyZXMtbG9hZC5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC90ZXh0dXJlcy1zYW1w
bGUtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10
ZXh0dXJlcy1zYW1wbGUtZXhwZWN0ZWQuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvdGV4
dHVyZXMtc2FtcGxlLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGV4dHVyZXMtc2FtcGxlLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNp
b25hbC1hcnJheS1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvdHdvLWRpbWVuc2lvbmFsLWFycmF5Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5Lmh0bWwuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0LgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC90eXBlLW1pc21hdGNoLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdHlwZS1taXNtYXRjaC5odG1sLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC91aW50LWJpdHdpc2UtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXVpbnQtYml0d2lzZS1leHBlY3RlZC50eHQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3VpbnQtYml0d2lzZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXVpbnQtYml0d2lzZS5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC91c2UtdW5k
ZWZpbmVkLXZhcmlhYmxlLTItZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi5odG1sOiBSZW5hbWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUtMi5o
dG1sLgorICAgICAgICAqIHdlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVj
dGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZp
bmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvdXNlLXVu
ZGVmaW5lZC12YXJpYWJsZS5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
dmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC12YXJpYWJsZS1zaGFkb3dpbmctZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dpbmcuaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC12YXJpYWJsZS1zaGFkb3dpbmcuaHRtbC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvdmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3ZlY3Rvci1zeW50YXguaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC12ZWN0b3Itc3ludGF4Lmh0bWwuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3doaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtYnJlYWsuaHRtbDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9t
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUuaHRtbDogUmVu
YW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLmh0
bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3dobHNsLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wuaHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvd3Jvbmct
YXJndW1lbnQtbGVuZ3RoLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5ndGgtZXhwZWN0ZWQudHh0LgorICAgICAgICAq
IHdlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0OiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdyb25nLXR5cGVzLWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy5odG1sLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLTItZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTItZXhwZWN0ZWQu
aHRtbC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0
bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXpl
LXZhbHVlcy0yLmh0bWwuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12
YWx1ZXMtZXhwZWN0ZWQuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4cGVjdGVkLmh0bWwuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWwuCisKIDIwMTktMDct
MTYgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hM
U0xdIERlc3VnYXIgZm9yIGxvb3BzIGFuZCB3aGlsZSBsb29wcwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggZDQxNGQ4NjgwMzhhMDU3OTQzZDc2NGJlMWJjZWZkZDJiYTNkZGFlMS4uYjhiYTliN2VkZjJl
MGRhN2RlMTg2NWI2ZWZhYzI1YzZjZDRmNDVkOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNDM5
LDcgKzM0MzksNyBAQCBmYXN0L2RvbS9saW5raWZ5LXBob25lLW51bWJlcnMuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTk5MDM5IGVkaXRpbmcvZGVsZXRpbmcvc21h
cnQtZGVsZXRlLXBhcmFncmFwaC0wMDMuaHRtbCBbIFNraXAgXQogCi13ZWJraXQub3JnL2IvMTk5
MDI4IHdlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3MtdGVzdC5odG1sIFsgU2xvdyBdCit3ZWJraXQu
b3JnL2IvMTk5MDI4IHdlYmdwdS93aGxzbC90ZXN0LWhhcm5lc3MtdGVzdC5odG1sIFsgU2xvdyBd
CiAKIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzc29tLXZpZXcvb2Zmc2V0
VG9wTGVmdC1pbmxpbmUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTUyNTA5NzhkMzdlZmNh
MjZlYTI4MTdlOTY4ODJiZWU1NjJjODJkNC4uZDY1N2JjNzNmZmEyNWY0MzQwZjVlNzRmNzNhYzJl
YmMxNGM5ZjQ4MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtOTY3LDQgKzk2Nyw0IEBAIHdlYmtpdC5vcmcvYi8xOTU2MzUgc2Nyb2xsaW5n
Y29vcmRpbmF0b3IvbWFjL211bHRpcGxlLWZpeGVkLmh0bWwgWyBQYXNzIFRpbWVvdXQKICMgPHJk
YXI6Ly9wcm9ibGVtLzUxNTI0OTU4PiBSRUdSRVNTSU9OOiBbIENhdGFsaW5hIFdLMiBdIGh0dHAv
d3B0L3dlYmF1dGhuL3B1YmxpYy1rZXktY3JlZGVudGlhbC1jcmVhdGUtc3VjY2Vzcy11MmYuaHR0
cHMuaHRtbCBpcyBmYWlsaW5nCiBbIENhdGFsaW5hKyBdIGh0dHAvd3B0L3dlYmF1dGhuL3B1Ymxp
Yy1rZXktY3JlZGVudGlhbC1jcmVhdGUtc3VjY2Vzcy11MmYuaHR0cHMuaHRtbCBbIEZhaWx1cmUg
XQogCi13ZWJraXQub3JnL2IvMTk5NjUxIFsgTW9qYXZlIERlYnVnIF0gd2ViZ3B1L3dobHNsLWJ1
aWx0aW4tdmVjdG9ycy0yLmh0bWwgWyBTbG93IF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
Cit3ZWJraXQub3JnL2IvMTk5NjUxIFsgTW9qYXZlIERlYnVnIF0gd2ViZ3B1L3dobHNsL2J1aWx0
aW4tdmVjdG9ycy0yLmh0bWwgWyBTbG93IF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1s
b2NhdGlvbnMtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1
M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJi
aXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcmJpdHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2Nh
dGlvbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhMDQxNDdkNTAxMDY1
Yzg0MmJhYWNmMTNiMzM3ZWRhMTQ2MDkyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJiaXRyYXJ5LXZlcnRl
eC1hdHRyaWJ1dGUtbG9jYXRpb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25z
dCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQot
dmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDE3MyksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDQ5OCkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVz
dWx0OwotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9
IHNoYWRlOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAg
cmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRl
ckxvY2F0aW9uOiAxNzMsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEg
PSB7c2hhZGVyTG9jYXRpb246IDQ5OCwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAg
ICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMCwg
YXR0cmlidXRlMV19OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBj
b25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3Rh
Z2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBk
ZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBp
cGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVS
ZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzdd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0g
LTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZm
ZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVm
ZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3Vy
Y2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBy
ZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHti
aW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3Vw
RGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3Jv
dXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0
Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2Us
IGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNv
bmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0
VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBj
b25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7
fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBj
b2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2
ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNv
bG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAg
ICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBh
c3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFz
cygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
LSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2Jv
ZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJndW1l
bnQtZXZhbHVhdGlvbi1vcmRlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtYXJndW1lbnQtZXZhbHVhdGlvbi1vcmRlci1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDczNjJjMmE4MjNlNjYyNmE2NTg5NjIwMTRjOGE3N2UzMTc0OGMyZGYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWFyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXItZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgZXZhbHVhdGlvbk9yZGVyRm9yQXJn
dW1lbnRzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJndW1lbnQt
ZXZhbHVhdGlvbi1vcmRlci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFyZ3VtZW50
LWV2YWx1YXRpb24tb3JkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBl
YThkMTY1ZDBmMGQyZTAwODYxYjc1OGM0MjhiNjEyZTExN2I0My4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJn
dW1lbnQtZXZhbHVhdGlvbi1vcmRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBu
YW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5Db3B5aW5nLjwvdGl0bGU+Ci08
c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hs
c2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmV2YWx1YXRpb25PcmRlckZvckFyZ3VtZW50cyA9
IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkg
eyByZXR1cm4gKmJhcigxMCkgKyAqYmFyKDIwKTsgfQotCi0gICAgICAgIHRocmVhZCBpbnQqIGJh
cihpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gdmFsdWU7Ci0gICAg
ICAgICAgICByZXR1cm4gJng7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYmF6KCkgeyByZXR1
cm4gcGx1cyhiYXIoMTApLCBiYXIoMjApKTsgfQotCi0gICAgICAgIGludCBwbHVzKHRocmVhZCBp
bnQqIHgsIHRocmVhZCBpbnQqIHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqeCAr
ICp5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgNDApOwotfTsKLQotcnVuVGVz
dHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1sZW5ndGgtc3BlYy10ZXN0cy1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MzNlOGFhZjAyZTNhNDA0ZGQy
NDIwZjFjOWE5NGY3YjA3ZjRhN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0aC1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIG5v
bkFycmF5UmVmQXJyYXlMZW5ndGhGYWlsIAotUEFTUyBub25BcnJheVJlZkFycmF5TGVuZ3RoU3Vj
Y2VlZCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LWxlbmd0
aC1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktbGVuZ3Ro
LXNwZWMtdGVzdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3NzA0Y2Fl
ODM4YjllNWE4NTIwM2Y4M2JjNzg2YzMwZjM1YjA4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktbGVu
Z3RoLXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Ci08c2Ny
aXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xU
ZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLm5vbkFycmF5UmVmQXJyYXlMZW5ndGhGYWlsID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAg
IHRocmVhZCB1aW50KiBsZW5ndGhQdHIoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGludFs0Ml0gYXJyYXk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICYoYXJyYXkubGVuZ3RoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMubm9uQXJyYXlSZWZB
cnJheUxlbmd0aFN1Y2NlZWQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICB1aW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJy
YXk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAg
IHVpbnQgYmFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50Wzc1NF0gYXJyYXk7Ci0gICAg
ICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3RoOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzU0
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImJh
ciIsIFtdKSwgNzU0KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1zcGVjLXRl
c3RzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4NWIxZjZl
NmZmMDk0MWZjNjM4NGQ5MmM4MzgyYjI3ZDJiMDJiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYXJyYXktc3Bl
Yy10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotUEFT
UyBhcnJheVJlZlRvQXJyYXlSZWYgCi1QQVNTIGFzc2lnbkxlbmd0aCAKLVBBU1MgYXNzaWduTGVu
Z3RoSGVscGVyIAotUEFTUyBidWlsZEFycmF5VGhlblN1bUl0IAotUEFTUyBidWlsZEFycmF5VGhl
blN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSAKLVBBU1MgcGFzc2luZ0FycmF5VG9GdW5jdGlvbiAK
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LXNwZWMtdGVzdHMu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1hcnJheS1zcGVjLXRlc3RzLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MmNkNGQwNzZjY2M0MzZiZDBjMTg3NTQzYTBm
NDVhN2JmZGUxZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWFycmF5LXNwZWMtdGVzdHMuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEg
Y2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRp
dGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5hcnJheVJlZlRvQXJyYXlSZWYgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgeDsKLSAgICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gQHg7Ci0gICAgICAgICAgICB0aHJl
YWQgaW50W11bXSBwcCA9IEBwOwotICAgICAgICAgICAgaW50W110aHJlYWRbXXRocmVhZCBxcSA9
IHBwOwotICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICB4ID0gNDI7Ci0g
ICAgICAgICAgICBwWzBdID0gNzY7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAgICAgICAg
ICAgIHBwWzBdWzBdID0gMzk7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAgICAgICAgICAg
IHFxWzBdWzBdID0gODM7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDc2ICsgMzkgKyA4Myk7Ci19Ci0K
LXdobHNsVGVzdHMuYXNzaWduTGVuZ3RoID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdm9pZCBmb28oKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJyYXk7Ci0gICAgICAgICAgICAgICAgKEBhcnJh
eSkubGVuZ3RoID0gNDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0K
LQotd2hsc2xUZXN0cy5hc3NpZ25MZW5ndGhIZWxwZXIgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdh
aXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGJhcih0aHJlYWQgZmxv
YXRbXSBhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcnJheS5sZW5ndGgg
PSA0MjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZvaWQgZm9vKCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmbG9hdFs3NTRdIGFycmF5OwotICAgICAgICAgICAgICAgIGJh
cihAYXJyYXkpOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5i
dWlsZEFycmF5VGhlblN1bUl0ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50WzQyXSBhcnJheTsK
LSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQyOyBpID0gaSArIDEpCi0gICAgICAg
ICAgICAgICAgYXJyYXlbaV0gPSBpbnQoaSArIDUpOwotICAgICAgICAgICAgaW50IHJlc3VsdDsK
LSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQyOyBpID0gaSArIDEpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYXJyYXlbaV07Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0MiAqIDUgKyA0MiAqIDQxIC8gMik7Ci19
Ci0KLXdobHNsVGVzdHMuYnVpbGRBcnJheVRoZW5TdW1JdFVzaW5nQXJyYXlSZWZlcmVuY2UgPSBh
c3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBiYXIodGhyZWFk
IGludFtdIGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkg
PCA0MjsgaSA9IGkgKyAxKQotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaW50KGkgKyA1KTsK
LSAgICAgICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkg
PCA0MjsgaSA9IGkgKyAxKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGFycmF5
W2ldOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBpbnQg
Zm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50WzQyXSBhcnJheTsKLSAgICAgICAgICAg
IHJldHVybiBiYXIoQGFycmF5KTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIgKiA1ICsgNDIg
KiA0MSAvIDIpOwotfQotCi13aGxzbFRlc3RzLnBhc3NpbmdBcnJheVRvRnVuY3Rpb24gPSBhc3lu
YyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50WzEwXSBhcnI7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9
IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgYXJyW2ldID0gaW50KGkp
ICsgMTsKLSAgICAgICAgICAgIHJldHVybiBzdW0oYXJyKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGludCBzdW0oaW50WzEwXSB4cykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHQgPSAwOwot
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspCi0gICAgICAg
ICAgICAgICAgdCA9IHQgKyB4c1tpXTsKLSAgICAgICAgICAgIHJldHVybiB0OwotICAgICAgICB9
Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCA1NSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+
Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC1leHBlY3RlZC50
eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYjQ1MmU2OTIxOTZjNTFjNmQzNDE4
Y2EwYTM2ZDNiZmM1MGQxZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hZGQtZXhwZWN0ZWQudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1MgYmFkQWRkIAotCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWFkZC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWJhZC1hZGQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFl
MDQxNjljYTYzMWE5MDczMTJiYzc0YzdkMmM4ZGE1NzE5NjQ2Yy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFk
LWFkZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hs
c2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13
aGxzbFRlc3RzLmJhZEFkZCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAot
ICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCwgdWludCB5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHVpbnQgeiA9IHggKyB5OwotICAgICAgICAgICAgfQotICAg
ICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtYW5kZXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRlci1leHBlY3RlZC50eHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGE3NGM5ZGZlNzFiNWM5NDY1MDI0ZDY5ODll
YTk5OTdiNGNlMWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRlci1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotUEFTUyBpbmRleEFuZGVyRG9lc250UmV0dXJuUG9p
bnRlciAKLVBBU1MgaW5kZXhBbmRlckRvZXNudFRha2VSZWZlcmVuY2UgCi1QQVNTIGFuZGVyRG9l
c250UmV0dXJuUG9pbnRlciAKLVBBU1MgYW5kZXJEb2VzbnRUYWtlUmVmZXJlbmNlIAotUEFTUyBh
bmRlcldpdGhCYWRJbmRleCAKLVBBU1MgYW5kZXJXaXRoTm90aGluZ1dyb25nIAotUEFTUyBhbmRl
cldpdGhXcm9uZ051bWJlck9mQXJndW1lbnRzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYmFkLWFuZGVyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYmFk
LWFuZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOTdhYjhlNGVhMjY5
MDQwOWFhZmI2Nzg2Y2IyZDk2Y2Y4YzY3MzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJhZC1hbmRlci5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Ci08dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5pbmRleEFuZGVyRG9lc250UmV0dXJuUG9pbnRlciA9IGFzeW5jICgpID0+
Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGludCBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZvby0+eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7
Ci19Ci0KLXdobHNsVGVzdHMuaW5kZXhBbmRlckRvZXNudFRha2VSZWZlcmVuY2UgPSBhc3luYyAo
KSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3Ry
dWN0IEZvbyB7Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXShGb28gZm9vLCB1aW50KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLng7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IGApOwotfQotCi13aGxzbFRlc3RzLmFuZGVyRG9lc250UmV0dXJuUG9pbnRlciA9IGFzeW5jICgp
ID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVj
dCBGb28gewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmb28tPng7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwot
fQotCi13aGxzbFRlc3RzLmFuZGVyRG9lc250VGFrZVJlZmVyZW5jZSA9IGFzeW5jICgpID0+Ci17
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9v
IHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRo
cmVhZCBpbnQqIG9wZXJhdG9yJi5mb28oRm9vIGZvbykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJmZvby54OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQot
d2hsc2xUZXN0cy5hbmRlcldpdGhCYWRJbmRleCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQg
Y2hlY2tGYWlsKGBpbnQgZm9vKHRocmVhZCBpbnRbXSB4KSB7IHJldHVybiB4Wy0xXTsgfWApOwot
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKGBpbnQgZm9vKHRocmVhZCBpbnRbXSB4KSB7IHJldHVybiB4
WzEuZl07IH1gKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgaW50IGZvbyh0aHJlYWQgaW50W10g
eCwgaW50IHkpIHsgcmV0dXJuIHhbeV07IH1gKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgaW50
IGZvbyh0aHJlYWQgaW50W10geCwgZmxvYXQgeSkgeyByZXR1cm4geFt5XTsgfWApOwotfQotCi13
aGxzbFRlc3RzLmFuZGVyV2l0aE5vdGhpbmdXcm9uZyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImLmZvbyh0aHJlYWQgRm9vKiBm
b28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICB9Ci0g
ICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBGb28geDsKLSAgICAgICAg
ICAgIHgueCA9IDEzOwotICAgICAgICAgICAgcmV0dXJuIHguZm9vOwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCAxMyk7Ci19Ci0KLXdobHNsVGVzdHMuYW5kZXJXaXRoV3JvbmdOdW1iZXJPZkFyZ3Vt
ZW50cyA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28oKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImLmZvbyh0aHJlYWQgRm9vKiBm
b28sIGludCBibGFoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAmZm9v
LT54OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1iYWQtbGl0ZXJhbHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWJhZC1saXRlcmFscy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY2YTE2YTJmOTA0NWE4Njg2YTM0ZDlmN2IwYjA0YjRlZWJiNzI5MGMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWJhZC1saXRlcmFscy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAK
LQotUEFTUyBiYWRJbnRMaXRlcmFsRm9ySW50IAotUEFTUyBiYWRJbnRMaXRlcmFsRm9yRmxvYXQg
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtbGl0ZXJhbHMuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iYWQtbGl0ZXJhbHMuaHRtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODhlMDIwNWM1ODQ2MTUzNDQ3YzM4MmIxNzU2YmNhNDNlMWFj
ODczMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtYmFkLWxpdGVyYWxzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAt
MSwyNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYt
OD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgcHJl
Zml4L3Bvc3RmaXguPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuYmFkSW50
TGl0ZXJhbEZvckludCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKCAidm9p
ZCBmb28oKSB7IGludCB4ID0gMzAwMDAwMDAwMDsgfSIpOwotfQotCi13aGxzbFRlc3RzLmJhZElu
dExpdGVyYWxGb3JGbG9hdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKCJ2
b2lkIGZvbygpIHsgZmxvYXQgeCA9IDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDA7IH0iKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLWV4
cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxZGQ2Njc4MWZiMWQx
ODA1NDc4YmE0OTU4NGE2YzY0YTgzNzc3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYml0d2lzZS1ib29sLW9w
cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotUEFTUyBib29s
Qml0QW5kIAotUEFTUyBib29sQml0T3IgCi1QQVNTIGJvb2xCaXRYb3IgCi1QQVNTIGJvb2xCaXRO
b3QgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wt
b3BzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYml0d2lzZS1ib29sLW9wcy5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDZlODNjZDI0NjEwN2I2N2U3ZjMzOWVl
OGQ0ZTVmNTA3MWQ1MmViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1iaXR3aXNlLWJvb2wtb3BzLmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxt
ZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4K
LTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCBlcHNp
bG9uID0gMC4wMDAxOwotCi1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuYm9v
bEJpdEFuZCA9IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBzb3VyY2UgPSBgCi0gICAgICAgIGJv
b2wgZm9vKGJvb2wgYSwgYm9vbCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSAm
IGI7Ci0gICAgICAgIH0KLSAgICBgOwotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdh
aXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VC
b29sKHRydWUpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCBy
ZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCBy
ZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChm
YWxzZSksIG1ha2VCb29sKGZhbHNlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwg
ZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9v
IiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChmYWxzZSldKTsKLSAgICAgICAgYXNzZXJ0X2Vx
dWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7Ci0gICAg
ICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQg
dmFsdWUuIik7Ci0gICAgfQotfTsKLQotd2hsc2xUZXN0cy5ib29sQml0T3IgPSBhc3luYyAoKSA9
PiB7Ci0gICAgY29uc3Qgc291cmNlID0gYAotICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wg
YikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgfCBiOwotICAgICAgICB9Ci0gICAg
YDsKLQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
c291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOwotICAgICAg
ICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFs
dWUuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbChmYWxz
ZSldKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5l
ZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQg
PSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKSwg
bWFrZUJvb2woZmFsc2UpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAi
VGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtl
Qm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMocmVz
dWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAgICB9Ci19Owot
Ci13aGxzbFRlc3RzLmJvb2xCaXRYb3IgPSBhc3luYyAoKSA9PiB7Ci0gICAgY29uc3Qgc291cmNl
ID0gYAotICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wgYikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGEgXiBiOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIHsKLSAgICAgICAg
bGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VC
b29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3Vs
dCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgIH0KLQotICAg
IHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAi
Zm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2woZmFsc2UpXSk7Ci0gICAgICAgIGFzc2Vy
dF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7
Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKGZhbHNlKV0pOwot
ICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0
ZWQgdmFsdWUuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQg
Y2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9v
bCh0cnVlKV0pOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0
dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgfQotfTsKLQotd2hsc2xUZXN0cy5ib29sQml0
Tm90ID0gYXN5bmMgKCkgPT4gewotICAgIGNvbnN0IHNvdXJjZSA9IGAKLSAgICAgICAgYm9vbCBm
b28oYm9vbCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gfmE7Ci0gICAgICAgIH0K
LSAgICBgOwotCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1ZSldKTsKLSAgICAgICAgYXNzZXJ0X2Vx
dWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFs
cyhyZXN1bHQsIHRydWUsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgIH0K
LX07Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWJvb2xzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDQ1YWJiOGMxYzQwYmM2NzJjNzc5OGI5YjJjMmQ1NGYyMzVmNzhjNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtYm9vbHMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCww
IEBACi0KLVBBU1MgYm9vbGVhbk1hdGggCi1QQVNTIGlkZW50aXR5Qm9vbCAKLVBBU1MgbGl0ZXJh
bEJvb2wgCi1QQVNTIG9wZXJhdG9yQm9vbCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWJvb2xzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMuaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVmNzFhNDk5ZTM2MTYxMzMxZDhkNmEx
Yjk2ZmRhNTk2YmQ0NzI2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYm9vbHMuaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDEyNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNl
dD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkJv
b2xzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmJvb2xlYW5NYXRoID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgYm9vbCBmb28oKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZSAmJiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGJvb2wgZm9vMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlICYm
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vMygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZSAmJiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9v
NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZSAmJiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBib29sIGZvbzUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZSB8fCB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vNigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlIHx8IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJv
b2wgZm9vNygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZSB8fCB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vOCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZSB8fCBmYWxzZTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIHRydWUpOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtd
KSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9n
cmFtLCAiZm9vMyIsIFtdKSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFtdKSwgZmFsc2UpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgdHJ1ZSk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb282Iiwg
W10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzciLCBbXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIsIFtdKSwgZmFsc2UpOwotfQotCi0KLXdobHNsVGVz
dHMuaWRlbnRpdHlCb29sID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gImJvb2wg
Zm9vKGJvb2wgeCkgeyByZXR1cm4geDsgfSI7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
Qm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSldKSwgdHJ1ZSk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUJvb2woZmFsc2UpXSksIGZhbHNlKTsKLX0KLQotd2hsc2xUZXN0cy5saXRlcmFsQm9vbCA9
IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9ICJib29sIGZvbygpIHsgcmV0dXJuIHRy
dWU7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCB0cnVlKTsKLX0KLQotd2hsc2xUZXN0cy5vcGVyYXRvckJvb2wgPSBhc3lu
YyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBib29sIGJvb2xGcm9tVWNo
YXJGYWxzZSgpIHsgcmV0dXJuIGJvb2wodWNoYXIoMCkpOyB9Ci0gICAgICAgIGJvb2wgYm9vbEZy
b21VY2hhclRydWUoKSB7IHJldHVybiBib29sKHVjaGFyKDEpKTsgfQotCi0gICAgICAgIGJvb2wg
Ym9vbEZyb21VaW50RmFsc2UoKSB7IHJldHVybiBib29sKHVpbnQoMCkpOyB9Ci0gICAgICAgIGJv
b2wgYm9vbEZyb21VaW50VHJ1ZSgpIHsgcmV0dXJuIGJvb2wodWludCgxKSk7IH0KLQotICAgICAg
ICBib29sIGJvb2xGcm9tSW50RmFsc2UoKSB7IHJldHVybiBib29sKGludCgwKSk7IH0KLSAgICAg
ICAgYm9vbCBib29sRnJvbUludFRydWUoKSB7IHJldHVybiBib29sKGludCgxKSk7IH0KLQotICAg
ICAgICBib29sIGJvb2xGcm9tRmxvYXRGYWxzZSgpIHsgcmV0dXJuIGJvb2woZmxvYXQoMCkpOyB9
Ci0gICAgICAgIGJvb2wgYm9vbEZyb21GbG9hdFRydWUoKSB7IHJldHVybiBib29sKGZsb2F0KDEp
KTsgfQotICAgICAgICBib29sIGJvb2xGcm9tRmxvYXROYU4oZmxvYXQgYXJnKSB7IHJldHVybiBi
b29sKGFyZyk7IH0KLSAgICBgOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1
bmN0aW9uKHByb2dyYW0sICJib29sRnJvbVVjaGFyRmFsc2UiLCBbXSksIGZhbHNlKTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tVWNo
YXJUcnVlIiwgW10pLCB0cnVlKTsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21VaW50RmFsc2UiLCBbXSksIGZhbHNlKTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tVWlu
dFRydWUiLCBbXSksIHRydWUpOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1
bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUludEZhbHNlIiwgW10pLCBmYWxzZSk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUludFRy
dWUiLCBbXSksIHRydWUpOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJib29sRnJvbUZsb2F0RmFsc2UiLCBbXSksIGZhbHNlKTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tRmxvYXRU
cnVlIiwgW10pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24ocHJvZ3JhbSwgImJvb2xGcm9tRmxvYXROYU4iLCBbbWFrZUZsb2F0KHByb2dyYW0sIE5hTild
KSwgdHJ1ZSk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAg
IHZvaWQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdDMgeDsKLSAg
ICAgICAgICAgICAgICBib29sIHIgPSBib29sKHgpOwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIHZvaWQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdDN4MyB4
OwotICAgICAgICAgICAgICAgIGJvb2wgciA9IGJvb2woeCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGApOwotICAgICAgICAKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJh
Z21lbnQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJh
Z21lbnQtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2Ey
NjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVy
LWZyYWdtZW50LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJh
Z21lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItZnJhZ21lbnQuaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBiYWJhMDM3ZjFjZTJiMDc5YTVkNjky
YjIyY2Q5ZTMyMjNmOTg5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWZyYWdtZW50Lmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxo
ZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9o
ZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi12ZXJ0ZXggZmxv
YXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IGkg
OiBhdHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0K
LQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uLCBjb25zdGFudCBmbG9hdFtdIHRoZUJ1ZmZlciA6IHJlZ2lzdGVyKGIwKSkgOiBTVl9U
YXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NCh0aGVCdWZmZXJbMF0sIHRoZUJ1ZmZlclswXSwg
dGhlQnVmZmVyWzBdLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
LSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAg
IGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFu
Z2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAi
Y3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAg
Y29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6
ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAv
LyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51
bGw7Ci0gICAgCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjog
MSwgZm9ybWF0OiAiZmxvYXQifTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0
cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OwotICAgIGNvbnN0IGlucHV0MSA9IHtzdHJpZGU6IDQs
IGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTFdfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQw
LCBpbnB1dDFdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0
c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBb
e2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0g
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1h
cFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs0XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
OF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTVdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMUFycmF5
QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
dmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVy
MUFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzBdID0gMTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxv
YXQzMkFycmF5WzJdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzNdID0gMTsK
LSAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVy
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0
IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZl
ckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZl
cik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNl
QnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVz
b3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7Ymlu
ZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERl
c2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3Vw
QmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAo
YmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENv
bnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBm
b3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25m
aWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4
dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRl
eHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29u
c3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30K
LSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29s
b3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVU
YXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xv
cjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAg
Y29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5j
b2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2ZXJ0ZXhCdWZmZXIxXSwgWzAsIDBd
KTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBh
c3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVu
Y29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVm
ZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAg
c3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5j
dGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3
V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsK
LTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWJ1ZmZlci1sZW5ndGgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWJ1ZmZlci1sZW5ndGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1idWZmZXItbGVuZ3RoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUg
KzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBD
T01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWxl
bmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci1sZW5ndGguaHRtbApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMyMmM2ZGQ1NjlmY2Y2MWNhNzE0OTFjMzVm
NjE5ZWNhODM3NTg5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWxlbmd0aC5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsNzggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1bbnVtdGhyZWFkcygxLCAxLCAx
KV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSB1aW50W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Ci0gICAg
YnVmZmVyWzBdID0gYnVmZmVyLmxlbmd0aDsKLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0
KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IGNv
bXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVT
aGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGlu
Z3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1d
fTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5
b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCBj
b21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IFVpbnQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogMTMzNzsKLQotICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVS
X1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNj
cmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVyVWludDMyQXJyYXkgPSBuZXcgVWludDMyQXJy
YXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlclVpbnQzMkFycmF5WzBdID0gMDsKLSAg
ICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAw
LCByZXN1bHRzQnVmZmVyLCAwLCAxICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpOwot
ICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0
ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwotICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1
ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRVaW50MzJBcnJheSA9IG5ldyBV
aW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRVaW50MzJBcnJh
eVswXSA9PSAxMzM3KQotICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAg
IHRlc3RGYWlsZWQoIiIpOwotICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlz
aEpTVGVzdCgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsK
LSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0
ZXN0UGFzc2VkKCIiKTsKLSAgICBmaW5pc2hKU1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+
Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZl
cnRleC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci12ZXJ0
ZXgtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1
MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZl
cnRleC1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hpdGVTcXVhcmVPbkJs
dWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRleC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci12ZXJ0ZXguaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwZjI4MDgxYzYxOGUwYjAzMDg3MTk5NzZkOWJiNWM1
NWI3YzZjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLXZlcnRleC5odG1sCisrKyAvZGV2L251bGwK
QEAgLTEsMTA3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5
PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdmVydGV4IGZsb2F0NCB2ZXJ0ZXhT
aGFkZXIoY29uc3RhbnQgZmxvYXQ0W10gYnVmZmVyIDogcmVnaXN0ZXIoYjApLCB1aW50IGlkIDog
U1ZfVmVydGV4SUQpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBidWZmZXJbaWRdOwotfQot
Ci1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb24pIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoMS4wLCAxLjAsIDEuMCwg
MS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hh
ZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNl
LCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVu
dFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFk
ZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0g
ICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6
ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxl
bmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIs
IGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0
ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogW119OwotCi0gICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5
OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91
dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNp
emUgPSA0ICogNCAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDsKLQotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3Vy
Y2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7Ci0gICAgcmVzb3VyY2VC
dWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzVdID0gMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOwot
ICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZl
ckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs5
XSA9IC0wLjU7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwotICAg
IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMTJdID0gMC41OwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzEz
XSA9IDAuNTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0gICAg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51
bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVm
ZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJl
c291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0g
e2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsK
LSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERl
c2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUi
KTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdy
YTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENo
YWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2Fw
Q2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9
IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRF
bmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3Qg
cmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVu
dHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxs
LCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwot
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRl
clBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5S
ZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0Qmlu
ZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGluLXZlY3RvcnMtMi1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0b3JzLTItZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTdiMDE3MmVlY2M2MTUyM2YxMWNm
NWQyNmIxMTkwNGU4MTY0YWUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGluLXZlY3RvcnMtMi1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotUEFTUyBidWlsdGluVmVj
dG9yR2V0dGVycyAKLVBBU1MgYnVpbHRpblZlY3RvclNldHRlcnMgCi0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWlsdGluLXZlY3RvcnMtMi5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy0yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY1NTdhODM2NmY1ZjIzOTNlZWY0N2U1YWY1ZTZkNDIwZjhhMTY2YjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy0yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4
MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4K
LTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgbG9vcHMu
PC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+
Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLWNvbnN0IGNoZWNrRnVuY3MgPSB7Ci0gICAgInVp
bnQiOiBjYWxsVWludEZ1bmN0aW9uLAotICAgICJpbnQiOiBjYWxsSW50RnVuY3Rpb24sCi0gICAg
ImZsb2F0IjogY2FsbEZsb2F0RnVuY3Rpb24KLX07Ci1jb25zdCB0eXBlTmFtZXMgPSBbICJ1aW50
IiwgImludCIsICJmbG9hdCIgXTsKLWNvbnN0IHNpemVzID0gWyAyLCAzLCA0IF07Ci1jb25zdCBl
bGVtZW50cyA9IFsgIngiLCAieSIsICJ6IiwgInciIF07Ci1jb25zdCBpbml0aWFsaXplckxpc3Qg
PSBbIDEsIDIsIDMsIDQgXTsKLQotd2hsc2xUZXN0cy5idWlsdGluVmVjdG9yR2V0dGVycyA9IGFz
eW5jICgpID0+Ci17Ci0KLSAgICBsZXQgdGVzdHMgPSBbXTsKLSAgICBsZXQgc3JjID0gIiI7Ci0g
ICAgZm9yIChsZXQgdHlwZU5hbWUgb2YgdHlwZU5hbWVzKSB7Ci0gICAgICAgIGZvciAobGV0IHNp
emUgb2Ygc2l6ZXMpIHsKLSAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dHlwZU5hbWV9JHtz
aXplfSR7ZWxlbWVudHNbaV19YDsKLSAgICAgICAgICAgICAgICBzcmMgKz0gYCR7dHlwZU5hbWV9
ICR7ZnVuY3Rpb25OYW1lfSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3NpemV9IHggPSAke3R5cGVOYW1lfSR7c2l6
ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6ZSkuam9pbigiLCAiKX0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LiR7ZWxlbWVudHNbaV19OwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYDsKLSAgICAgICAgICAg
ICAgICB0ZXN0cy5wdXNoKHsgdHlwZTogdHlwZU5hbWUsIG5hbWU6IGZ1bmN0aW9uTmFtZSwgZXhw
ZWN0YXRpb246IGluaXRpYWxpemVyTGlzdFtpXSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGxldCBwcm9ncmFtID0gc3JjOwotICAgIGZvciAobGV0IHRlc3Qgb2Yg
dGVzdHMpIHsKLSAgICAgICAgY29uc3QgY2hlY2tGdW5jID0gY2hlY2tGdW5jc1t0ZXN0LnR5cGVd
OwotICAgICAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNoZWNrRnVuYyhwcm9ncmFtLCB0ZXN0Lm5h
bWUsIFtdKSwgdGVzdC5leHBlY3RhdGlvbik7Ci0gICAgfQotfTsKLQotd2hsc2xUZXN0cy5idWls
dGluVmVjdG9yU2V0dGVycyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHRlc3RzID0gW107Ci0g
ICAgbGV0IHNyYyA9ICIiOwotICAgIGZvciAobGV0IHR5cGVOYW1lIG9mIHR5cGVOYW1lcykgewot
ICAgICAgICBmb3IgKGxldCBzaXplIG9mIHNpemVzKSB7Ci0gICAgICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFt
ZSA9IGAke3R5cGVOYW1lfSR7c2l6ZX0ke2VsZW1lbnRzW2ldfWA7Ci0gICAgICAgICAgICAgICAg
c3JjICs9IGAke3R5cGVOYW1lfSAke2Z1bmN0aW9uTmFtZX0oKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dHlwZU5hbWV9JHtzaXplfSB4
ID0gJHt0eXBlTmFtZX0ke3NpemV9KCR7aW5pdGlhbGl6ZXJMaXN0LnNsaWNlKDAsIHNpemUpLmpv
aW4oIiwgIil9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LiR7ZWxlbWVudHNbaV19
ID0gMzQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguJHtlbGVtZW50c1tp
XX07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBg
OwotICAgICAgICAgICAgICAgIHRlc3RzLnB1c2goeyB0eXBlOiB0eXBlTmFtZSwgbmFtZTogZnVu
Y3Rpb25OYW1lLCBleHBlY3RhdGlvbjogMzQgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBsZXQgcHJvZ3JhbSA9IHNyYzsKLSAgICBmb3IgKGxldCB0ZXN0IG9mIHRl
c3RzKSB7Ci0gICAgICAgIGNvbnN0IGNoZWNrRnVuYyA9IGNoZWNrRnVuY3NbdGVzdC50eXBlXTsK
LSAgICAgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjaGVja0Z1bmMocHJvZ3JhbSwgdGVzdC5uYW1l
LCBbXSksIHRlc3QuZXhwZWN0YXRpb24pOwotICAgIH0KLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTAxYzdhMjgyZWY2YjVlMjc5NjU3MDJjMTlhY2Y0ZTE1NGU4Y2FhNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDQgKzAsMCBAQAotCi1QQVNTIGJ1aWx0aW5WZWN0b3JJbmRleFNldHRlcnMgCi1QQVNTIGJ1aWx0
aW5WZWN0b3JzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRp
bi12ZWN0b3JzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVpbHRpbi12ZWN0b3Jz
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNDk0ZjMxYjVkZjljZjliMTU1
OTQxMjM2MWI3YzY1ZDhkZjg4NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1aWx0aW4tdmVjdG9ycy5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Ci08dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRl
c3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotY29uc3Qg
Y2hlY2tGdW5jcyA9IHsKLSAgICAidWludCI6IGNhbGxVaW50RnVuY3Rpb24sCi0gICAgImludCI6
IGNhbGxJbnRGdW5jdGlvbiwKLSAgICAiZmxvYXQiOiBjYWxsRmxvYXRGdW5jdGlvbgotfTsKLWNv
bnN0IHR5cGVOYW1lcyA9IFsgInVpbnQiLCAiaW50IiwgImZsb2F0IiBdOwotY29uc3Qgc2l6ZXMg
PSBbIDIsIDMsIDQgXTsKLWNvbnN0IGVsZW1lbnRzID0gWyAieCIsICJ5IiwgInoiLCAidyIgXTsK
LWNvbnN0IGluaXRpYWxpemVyTGlzdCA9IFsgMSwgMiwgMywgNCBdOwotCi13aGxzbFRlc3RzLmJ1
aWx0aW5WZWN0b3JJbmRleFNldHRlcnMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCB0ZXN0cyA9
IFtdOwotICAgIGxldCBzcmMgPSAiIjsKLSAgICBmb3IgKGxldCB0eXBlTmFtZSBvZiB0eXBlTmFt
ZXMpIHsKLSAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBzaXplcykgewotICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBmdW5j
dGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0ke3NpemV9JHtlbGVtZW50c1tpXX1gOwotICAgICAgICAg
ICAgICAgIHNyYyArPSBgJHt0eXBlTmFtZX0gJHtmdW5jdGlvbk5hbWV9KCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3R5cGVOYW1lfSR7
c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtzaXplfSgke2luaXRpYWxpemVyTGlzdC5zbGljZSgwLCBz
aXplKS5qb2luKCIsICIpfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeFske2l9XSA9
IDM0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4WyR7aX1dOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYDsKLSAgICAgICAg
ICAgICAgICB0ZXN0cy5wdXNoKHsgdHlwZTogdHlwZU5hbWUsIG5hbWU6IGZ1bmN0aW9uTmFtZSwg
ZXhwZWN0YXRpb246IDM0IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbGV0IHByb2dyYW0gPSBzcmM7Ci0gICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgewotICAg
ICAgICBjb25zdCBjaGVja0Z1bmMgPSBjaGVja0Z1bmNzW3Rlc3QudHlwZV07Ci0gICAgICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2hlY2tGdW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0
LmV4cGVjdGF0aW9uKTsKLSAgICB9Ci19OwotCi13aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JzID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludDIgYSA9IGludDIoMywgNCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gYVswXTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vMigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludDIgYSA9IGludDIoMywgNCk7Ci0gICAgICAgICAgICBpbnQzIGIgPSBpbnQz
KGEsIDUpOwotICAgICAgICAgICAgcmV0dXJuIGJbMV07Ci0gICAgICAgIH0KLSAgICAgICAgaW50
IGZvbzMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQzIGEgPSBpbnQzKDMsIDQsIDUpOwot
ICAgICAgICAgICAgaW50NCBiID0gaW50NCg2LCBhKTsKLSAgICAgICAgICAgIHJldHVybiBiWzFd
OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb280KCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50MiBhID0gaW50MigzLCA0KTsKLSAgICAgICAgICAgIGludDIgYiA9IGludDIoNSwgNik7Ci0g
ICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0KGEsIGIpOwotICAgICAgICAgICAgcmV0dXJuIGNbMl07
Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb281KCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50NCBhID0gaW50NCgzLCA0LCA1LCA2KTsKLSAgICAgICAgICAgIGludDIgYiA9IGludDIoNCwg
NSk7Ci0gICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0KDMsIGIsIDYpOwotICAgICAgICAgICAgcmV0
dXJuIGEgPT0gYzsKLSAgICAgICAgfQotICAgICAgICBib29sIGZvbzYoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQyIGEgPSBpbnQyKDQsIDUpOwotICAgICAgICAgICAgaW50MyBiID0gaW50
MygzLCBhKTsKLSAgICAgICAgICAgIGludDMgYyA9IGludDMoMywgNCwgNik7Ci0gICAgICAgICAg
ICByZXR1cm4gYiA9PSBjOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vdSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVpbnQyIGEgPSB1aW50MigzLCA0KTsKLSAgICAgICAgICAgIHJldHVy
biBhWzBdOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vdTIoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB1aW50MiBhID0gdWludDIoMywgNCk7Ci0gICAgICAgICAgICB1aW50MyBiID0gdWlu
dDMoYSwgNSk7Ci0gICAgICAgICAgICByZXR1cm4gYlsxXTsKLSAgICAgICAgfQotICAgICAgICB1
aW50IGZvb3UzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdWludDMgYSA9IHVpbnQzKDMsIDQs
IDUpOwotICAgICAgICAgICAgdWludDQgYiA9IHVpbnQ0KDYsIGEpOwotICAgICAgICAgICAgcmV0
dXJuIGJbMV07Ci0gICAgICAgIH0KLSAgICAgICAgdWludCBmb291NCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVpbnQyIGEgPSB1aW50MigzLCA0KTsKLSAgICAgICAgICAgIHVpbnQyIGIgPSB1
aW50Mig1LCA2KTsKLSAgICAgICAgICAgIHVpbnQ0IGMgPSB1aW50NChhLCBiKTsKLSAgICAgICAg
ICAgIHJldHVybiBjWzJdOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vdTUoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1aW50NCBhID0gdWludDQoMywgNCwgNSwgNik7Ci0gICAgICAgICAg
ICB1aW50MiBiID0gdWludDIoNCwgNSk7Ci0gICAgICAgICAgICB1aW50NCBjID0gdWludDQoMywg
YiwgNik7Ci0gICAgICAgICAgICByZXR1cm4gYSA9PSBjOwotICAgICAgICB9Ci0gICAgICAgIGJv
b2wgZm9vdTYoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50MiBhID0gdWludDIoNCwgNSk7
Ci0gICAgICAgICAgICB1aW50MyBiID0gdWludDMoMywgYSk7Ci0gICAgICAgICAgICB1aW50MyBj
ID0gdWludDMoMywgNCwgNik7Ci0gICAgICAgICAgICByZXR1cm4gYiA9PSBjOwotICAgICAgICB9
Ci0gICAgICAgIGZsb2F0IGZvb2YoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDIgYSA9
IGZsb2F0MigzLiwgNC4pOwotICAgICAgICAgICAgcmV0dXJuIGFbMF07Ci0gICAgICAgIH0KLSAg
ICAgICAgZmxvYXQgZm9vZjIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDIgYSA9IGZs
b2F0MigzLiwgNC4pOwotICAgICAgICAgICAgZmxvYXQzIGIgPSBmbG9hdDMoYSwgNS4pOwotICAg
ICAgICAgICAgcmV0dXJuIGJbMV07Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vZjMoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDMgYSA9IGZsb2F0MygzLiwgNC4sIDUuKTsKLSAg
ICAgICAgICAgIGZsb2F0NCBiID0gZmxvYXQ0KDYuLCBhKTsKLSAgICAgICAgICAgIHJldHVybiBi
WzFdOwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvb2Y0KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZmxvYXQyIGEgPSBmbG9hdDIoMy4sIDQuKTsKLSAgICAgICAgICAgIGZsb2F0MiBiID0g
ZmxvYXQyKDUuLCA2Lik7Ci0gICAgICAgICAgICBmbG9hdDQgYyA9IGZsb2F0NChhLCBiKTsKLSAg
ICAgICAgICAgIHJldHVybiBjWzJdOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vZjUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDQgYSA9IGZsb2F0NCgzLiwgNC4sIDUuLCA2Lik7
Ci0gICAgICAgICAgICBmbG9hdDIgYiA9IGZsb2F0Mig0LiwgNS4pOwotICAgICAgICAgICAgZmxv
YXQ0IGMgPSBmbG9hdDQoMy4sIGIsIDYuKTsKLSAgICAgICAgICAgIHJldHVybiBhID09IGM7Ci0g
ICAgICAgIH0KLSAgICAgICAgYm9vbCBmb29mNigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0MiBhID0gZmxvYXQyKDQuLCA1Lik7Ci0gICAgICAgICAgICBmbG9hdDMgYiA9IGZsb2F0Mygz
LiwgYSk7Ci0gICAgICAgICAgICBmbG9hdDMgYyA9IGZsb2F0MygzLiwgNC4sIDYuKTsKLSAgICAg
ICAgICAgIHJldHVybiBiID09IGM7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDMpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
MyIsIFtdKSwgMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzQiLCBbXSksIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW10pLCBmYWxzZSk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb291IiwgW10p
LCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvb3UyIiwgW10pLCA0KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvb3UzIiwgW10pLCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U0IiwgW10pLCA1KTsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U1IiwgW10pLCB0cnVlKTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U2
IiwgW10pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vZiIsIFtdKSwgMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
RmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vZjIiLCBbXSksIDQpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvb2YzIiwgW10pLCAzKTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNCIs
IFtdKSwgNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJmb29mNSIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9v
bEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNiIsIFtdKSwgZmFsc2UpOwotfTsKLQotcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWNhc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1jYXN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVi
N2NlNGM3ZDhlNDFhN2VhNWZhOTNkYzM2NDkxMWEyZTQzMWJkYTIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNh
c3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIGNh
c3RzIAotUEFTUyBzZWxmQ2FzdHMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1jYXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZmVmNDJiYzg2NGM3NzBiMzMxMmMwYjU2OTQx
Y2UyZGRmNmI2MGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNhc3RzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAt
MSw1OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYt
OD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkJhZCBhZGQu
PC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+
Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuY2FzdHMgPSBhc3luYyAoKSA9
PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAg
ICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIHN0cnVjdCBCYXIgewotICAgICAgICAgICAg
aW50IHk7Ci0gICAgICAgIH0KLSAgICAgICAgb3BlcmF0b3IgQmFyKEZvbyBmb28pIHsKLSAgICAg
ICAgICAgIEJhciBiOwotICAgICAgICAgICAgYi55ID0gZm9vLnggKyA3OwotICAgICAgICAgICAg
cmV0dXJuIGI7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJheihpbnQgeikgewotICAgICAgICAg
ICAgRm9vIGZvbzsKLSAgICAgICAgICAgIGZvby54ID0gejsKLSAgICAgICAgICAgIEJhciBiID0g
QmFyKGZvbyk7Ci0gICAgICAgICAgICByZXR1cm4gYi55OwotICAgICAgICB9Ci0gICAgYDsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW21h
a2VJbnQoNildKSwgMTMpOwotfQotCi13aGxzbFRlc3RzLnNlbGZDYXN0cyA9IGFzeW5jICgpID0+
Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAg
ICAgaW50IHg7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICBmb28ueCA9IDIxOwotICAgICAgICAgICAgRm9v
IGJhciA9IEZvbyhmb28pOwotICAgICAgICAgICAgYmFyLnggPSA0MjsKLSAgICAgICAgICAgIHJl
dHVybiBmb28ueCArIGJhci54OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAyMSArIDQyKTsKLX0K
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJl
YWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFy
aWFibGVzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5
MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tl
ci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnkt
d3JpdGUtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY2hlY2tlci1z
aG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNzk5YmY1YTNjMDRjYjU1OWUwNzdmYjMyMGZlZWRk
MzM4YjA3NjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNoZWNrZXItc2hvdWxkLXNldC10eXBlLW9mLXJlYWQt
bW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1jb25zdCBz
aGFkZXJTb3VyY2UgPSBgCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21w
dXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRo
cmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIGZsb2F0NCB2ZWM7Ci0gICAgdmVj
WzBdICs9IDQyLjA7Ci0gICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gdmVjWzBdOwotfQot
YDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3
LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7
Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29u
c3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVD
b21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBz
aXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKLQotICAgIGNvbnN0IGJ1
ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8
IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZmZXJBcnJheUJ1
ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgYnVmZmVyRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5T
VE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0g
e2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3Jv
dXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRH
cm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5j
b3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKLSAg
ICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQ
YXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGlu
ZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwot
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBjb21wdXRlUGFz
c0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZm
ZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0Zsb2F0MzJB
cnJheVswXSA9PSA0MikKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7
Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAg
dGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbW1lbnQt
cGFyc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tbWVudC1w
YXJzaW5nLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiNDA5
MWJkODExYmY3NWZlZDM2MmVlZjQwNTIyNzViNmNmN2ZjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tbWVu
dC1wYXJzaW5nLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1Q
QVNTIGNvbW1lbnRQYXJzaW5nIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtY29tbWVudC1wYXJzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29tbWVu
dC1wYXJzaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMzg1ZmFmYzY1
YjU3NTY1YjEzM2EyMmQ3NDVjNTk1MzM2M2FmMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbW1lbnQtcGFy
c2luZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJq
cy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMuY29tbWVudFBhcnNpbmcgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIC8qIHRoaXMgY29tbWVudAotICAgICAgICBydW5zIG92ZXIgbXVs
dGlwbGUgbGluZXMgKi8KLSAgICAgICAgYm9vbCBmb28oKSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdKSwgdHJ1ZSk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgLyogdGhpcyBjb21tZW50Ci0gICAgICAgIHJ1bnMgb3ZlciBtdWx0aXBsZSBsaW5lcwotICAg
ICAgICBib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRl
c3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1jb21wdXRlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtY29tcHV0ZS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAK
LVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUK
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIzYjBlOWE0YmJiYmUxMWIzMmUyYmVmN2NlZTVkMThkOTI0ZDBkOTQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWNvbXB1dGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVy
U291cmNlID0gYAotW251bXRocmVhZHMoMiwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNo
YWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJ
RCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0g
PSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBj
b25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJj
b21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1
ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA4OwotCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZl
ckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAxOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFy
cmF5WzJdID0gMzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVs0XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7
Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRv
ciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdl
LlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1
bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7
Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6
ZX07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTog
YnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6
IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29u
c3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZl
ciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIu
ZGlzcGF0Y2goMiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAg
ICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2
aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1
bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAg
IGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJh
eUJ1ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAm
JiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJB
cnJheVsyXSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zs
b2F0MzJBcnJheVs1XSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0g
NwotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQ
YXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0
c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAg
ICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpT
VGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1jb3B5LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDZhNGJkY2Y0MzY2OGFjZDRhMGU3N2M0ZmYzNmU5MzkxMjBkZWE3Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Y29weS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBj
b3B5QXJyYXkgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb3B5Lmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtY29weS5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4MGMxOTdiMmQ5MWFjNjBmNjk1YTI2NmFkYzcwN2NmZTI5NGJlNTVlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1jb3B5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9
InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkNvcHlpbmcuPC90aXRsZT4KLTxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRl
c3RzID0ge307Ci0KLXdobHNsVGVzdHMuY29weUFycmF5ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludFsxMF0geHM7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7
IGkrKykKLSAgICAgICAgICAgICAgICB4c1tpXSA9IGludChpKSArIDE7Ci0gICAgICAgICAgICBp
bnRbMTBdIHlzID0geHM7Ci0gICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCB4cy5sZW5n
dGg7IGkrKykKLSAgICAgICAgICAgICAgICB4c1tpXSA9IDA7Ci0gICAgICAgICAgICBpbnQgc3Vt
ID0gMDsKLSAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHlzLmxlbmd0aDsgaSsrKQot
ICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIHlzW2ldOwotICAgICAgICAgICAgcmV0dXJuIHN1
bTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTUpOwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3Rz
KTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1kZXJlZmVyZW5jZS1vcmRlcmluZy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY1YzYxN2VlZjVmZTQ3MjQyMmVkMGE0ZmI1ZjgyNmQwMGEyMzhmY2Yu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGNhbGxBcmd1bWVudHNBcmVDb3BpZWRJbW1l
ZGlhdGVseUFmdGVyRXZhbHVhdGlvbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWRlcmVmZXJlbmNlLW9yZGVyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjM0YmFiZjY3MWE0MzcwNzcyYTMxMTJlYTBiMDRjNDVhMjNkYjY3MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtZGVyZWZlcmVuY2Utb3JkZXJpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+RGVyZWZlcmVuY2Ugb3JkZXJp
bmcuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuY2FsbEFyZ3VtZW50c0Fy
ZUNvcGllZEltbWVkaWF0ZWx5QWZ0ZXJFdmFsdWF0aW9uID0gYXN5bmMgKCkgPT4gewotICAgIGxl
dCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpiYXIoNSkgKyAqYmFyKDcpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGlu
dCogYmFyKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHggPSB2YWx1ZTsK
LSAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAgfQotICAgIGA7Ci0KLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMik7Ci19
OwotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5
cGUtY2hlY2stZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVy
ZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUy
NDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2st
ZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBo
dG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFj
a2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXIt
c2hvdWxkLXR5cGUtY2hlY2suaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kZXJlZmVy
ZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQyY2VjOTZjY2FkZmM4ZmRiOTc0OGRiNWE0YWVjOWUzYTliNzljNDkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWRlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhl
YWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hl
YWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAi
PjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0
ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNo
YWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihm
bG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEp
KSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIHRocmVhZCBmbG9hdCogcHRyMiA9ICZz
aGFkZTsKLSAgICAqcHRyMiA9IHNoYWRlOwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247Ci0gICAgcmVzdWx0LnNoYWRlID0gKnB0cjI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
MCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFk
ZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwg
b2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBm
b3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0
cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0
dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0g
ICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNv
bnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwg
dmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5k
R3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0g
PSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOwotCi0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxOV0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsK
LSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owot
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0g
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd1doaXRl
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3Nj
cmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+
Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLWRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzNjFjYTU1ZDJkOGIyZDMxNjcxMjVjY2Y1YTllYzYzMjAyN2Y2MzhjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3Jp
cHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9h
dDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgw
KTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91
dCByZXN1bHQ7Ci0KLSAgICBib29sIGIgPSB0cnVlOwotICAgIGRvIHsKLSAgICAgICAgaWYgKGIp
IHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKHNoYWRlID0g
MS4wLCBmYWxzZSkpOwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVz
dWx0LnNoYWRlID0gc2hhZGU7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBm
bG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFy
Z2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0K
LWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
LQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
LSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmli
dXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsK
LSAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9h
dCIsIG9mZnNldDogMTZ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0
cmlidXRlMV07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDog
YXR0cmlidXRlc307Ci0gICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVy
dGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTog
NywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ip
OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRz
OiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFn
ZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRl
cHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJl
bmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJh
eUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZl
cjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7Ci0KLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAt
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAw
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7
Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZl
ckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZm
ZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZm
ZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJj
ZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJl
c291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2Jp
bmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBE
ZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91
cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
KGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRD
b250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwg
Zm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29u
ZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRl
eHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNv
bnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9
Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNv
bG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZl
VGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29s
b3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAg
IGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVu
Y29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFz
c0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwot
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd0JsYWNrU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGls
ZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZG8td2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1jb250aW51ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5Nzg5NmU4MGVlOWE5N2E4ZGQwOTgyMTJjYmFmYjM4YWJhNDBhODhlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwKKysrIC9kZXYvbnVsbApA
QCAtMSwxNDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlw
dCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+
Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4K
LTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAg
ICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZl
cnRleE91dCByZXN1bHQ7Ci0KLSAgICBib29sIGIgPSB0cnVlOwotICAgIHVpbnQgaSA9IDA7Ci0g
ICAgZG8gewotICAgICAgICBpZiAoYikgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgc2hhZGUgPSAwLjA7Ci0gICAgfSB3aGlsZSAoKGkgPSBpICsgMSwgc2hhZGUg
PSBzaGFkZSArIDAuMSwgaSA8IDEwKSk7Ci0KLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlv
bjsKLSAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgw
KSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRl
LCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdt
ZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNo
YWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsK
LSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9k
ZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JC
bGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3Jt
IiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldy
aXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBj
b25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBv
ZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZv
cm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRy
aWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0
cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAg
ICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBm
cmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xv
clN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwg
bGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZp
Y2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4
QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXko
dmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9
IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE5XSA9IDAuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9X
UklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1
ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZm
ZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwot
ICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0g
e2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0g
Y2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3Ig
PSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0g
Y29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29u
c3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmlldygp
OwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29k
ZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0g
ICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZp
ZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3Jl
IiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9
IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50
cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIg
PSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIu
ZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7
Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQo
ZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVT
cXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0Pgot
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1do
aXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRv
LXdoaWxlLWxvb3AuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29w
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOWM1YzgxMGZjOTQ3Nzg0NzBi
ZjE4MWEyMmIyYzI3ZmM1ZjRjZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08
L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBW
ZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0
IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGRvIHsKLSAgICAgICAgc2hhZGUg
PSAxLjA7Ci0gICAgfSB3aGlsZShmYWxzZSk7Ci0KLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3Np
dGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNo
YWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVu
dFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlw
IjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxs
TW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29s
b3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVu
b3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xv
cldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
LCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
LSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7Ci0KLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDAuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0tZXhwZWN0ZWQuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAz
ZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0tZXhwZWN0
ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0uaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzZjI0NTAxMjZmZmMyNDkyYmQ1ZTFl
MTg4MTA2YjEyNDFmZDBjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0u
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLQot
ZW51bSBEb250Q3Jhc2ggewotICAgIFZhbHVlCi19Ci0KLXZlcnRleCBmbG9hdDQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgaSA6IGF0dHJpYnV0ZSgx
KSkgOiBTVl9Qb3NpdGlvbiB7Ci0gICAgcmV0dXJuIHBvc2l0aW9uOwotfQotCi1mcmFnbWVudCBm
bG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1Zf
VGFyZ2V0IDAgewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOwotICAgIAotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0In07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKLSAgICBjb25zdCBpbnB1dDEg
PSB7c3RyaWRlOiA0LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUxXX07Ci0gICAgY29uc3QgaW5w
dXRzID0gW2lucHV0MCwgaW5wdXQxXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1i
dWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9n
eSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZl
cnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDEuMDsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEyXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwot
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMURlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMSA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMURlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjFBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjEubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJh
eVswXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsxXSA9IDE7Ci0gICAgdmVy
dGV4QnVmZmVyMUZsb2F0MzJBcnJheVsyXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMUZsb2F0MzJB
cnJheVszXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMS51bm1hcCgpOwotCi0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsK
LSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owot
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMCwgdmVydGV4QnVm
ZmVyMV0sIFswLCAwXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRl
dmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24o
KSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFz
KTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMtZXhwZWN0ZWQuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAz
ZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLWV4cGVjdGVkLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08
L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kb3QtZXhwcmVzc2lvbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWY4ZDUwYmY4ZTQ1NDljMjkwNTJmNWVkMTBkMzI0YTI3ZDhhMDQxNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZG90LWV4cHJlc3Npb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9z
aXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0K
LQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1
bHQ7Ci0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0g
c2hhZGU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50
U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICBy
ZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
dmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
cik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9Owot
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0g
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlv
bigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiMjc0MzE4OWVkZjhkNWUyMzBjNThlYzI1ODA4YTA2MzMzOTZjODcw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kb3VibGUtbm90LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBA
IC0xLDMgKzAsMCBAQAotCi1QQVNTIGRvdWJsZU5vdCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1ub3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kb3VibGUtbm90Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOWY1YmQ3
YzNjNWNhZjVmMTM4YjA0MWEyZDY5ZDg4NGVmNDhhZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvdWJsZS1u
b3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Ci08dGl0bGU+Q29weWluZy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNs
LXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hs
c2xUZXN0cy5kb3VibGVOb3QgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICBib29sIGZvbyhib29sIHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAh
IXg7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRydWUpXSksIHRydWUpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VC
b29sKGZhbHNlKV0pLCBmYWxzZSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3Jp
cHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGlj
YXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3Rv
cnMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1QQVNTIAotUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1w
cm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1
cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNDIzOGQzN2ZlYzgzM2ZkYzliYmFjM2UyNmUz
MWJlNDcyYzEzOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1jb25zdCBz
aGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgWFlaIHsKLSAgICBpbnQgeDsKLSAgICBpbnQgeTsKLSAg
ICBpbnQgejsKLX0KLQotdHlwZWRlZiBYWVoxID0gWFlaOwotdHlwZWRlZiBYWVoyID0gWFlaOwot
dHlwZWRlZiBYWVozID0gWFlaOwotCi1bbnVtdGhyZWFkcygyLCAxLCAxKV0KLWNvbXB1dGUgdm9p
ZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxv
YXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIHRocmVhZCBpbnQqIHg7
Ci0gICAgdGhyZWFkIGludCogeTsKLSAgICB0aHJlYWQgZmxvYXQqIGYxOwotICAgIHRocmVhZCBm
bG9hdCogZjI7Ci0gICAgWFlaMSBhOwotICAgIFhZWjIgYjsKLSAgICBYWVozIGM7Ci0gICAgdGhy
ZWFkIGludFtdIGludEFycmF5UmVmMTsKLSAgICB0aHJlYWQgaW50W10gaW50QXJyYXlSZWYyOwot
ICAgIGlmICgqeCA9PSAqeSAmJiB4ID09IHkgJiYgeCA9PSBudWxsICYmIGYxID09IG51bGwgJiYg
KmYxID09IDApIHsKLSAgICAgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gYnVmZmVyW3Vp
bnQodGhyZWFkSUQueCldICogMi4wOwotICAgIH0KLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0
YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0
IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1
dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVy
In1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0g
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25z
dCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDg7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZF
Ul9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFw
V3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlb
Ml0gPSAzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7Ci0gICAgYnVmZmVyRmxvYXQz
MkFycmF5WzRdID0gNTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OwotICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVs2XSA9IDc7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKLSAg
ICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAw
LCByZXN1bHRzQnVmZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4KTsK
LSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1
dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBl
bGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXAp
OwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKLSAgICBjb21wdXRl
UGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5k
RW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRC
dWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNC
dWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0Zsb2F0
MzJBcnJheVswXSA9PSAyCi0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAot
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzJdID09IDYKLSAgICAgICAgJiYgcmVzdWx0
c0Zsb2F0MzJBcnJheVszXSA9PSA4Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0g
PT0gNQotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzVdID09IDYKLSAgICAgICAgJiYg
cmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PSA3Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJy
YXlbN10gPT0gOCkKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAgICB0
ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0g
ICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVz
dFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMtZXhwZWN0
ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjBhNGViNGI2ZmJjMGNkOGUy
ODc1NjIzMzUxMmY5MGQ4NGY3YzgwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGVzLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGR1cGxpY2F0ZUZ1bmN0
aW9ucyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGVzLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZWQ5NmM1MWYwM2YwM2ZlN2FjNTJlYTg2YzU0NmRhOWFk
M2IyNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04
PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBwcmVm
aXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5kdXBsaWNh
dGVGdW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAg
ICAgdm9pZCBmb28oKSB7IH0KLSAgICAgICAgdm9pZCBmb28oKSB7IH0KLSAgICBgKTsKLQotICAg
IGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIHZvaWQgZm9vKGludCB4KSB7IH0KLSAgICAgICAg
dHlwZWRlZiBBID0gaW50OwotICAgICAgICB2b2lkIGZvbyhBIHgpIHsgfQotICAgIGApOwotCi0g
ICAgY29uc3QgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGJhcigpIHsKLSAgICAgICAgICAgIHJl
dHVybiA0MjsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKGludCB4KSB7Ci0gICAgICAgICAg
ICByZXR1cm4geDsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGJhcigpOwotICAgICAgICB9Ci0gICAgICAgIGludCBiYXooKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYmFyKDMpOwotICAgICAgICB9Ci0gICAgYDsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10p
LCA0Mik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImJheiIsIFtdKSwgMyk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgb3Bl
cmF0b3ImW10odGhyZWFkIGludFtdIGEsIHVpbnQgYikgewotICAgICAgICAgICAgcmV0dXJuIDQ7
Ci0gICAgICAgIH0KLSAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIHVp
bnQgb3BlcmF0b3IubGVuZ3RoKHRocmVhZCBpbnRbXSBhKSB7Ci0gICAgICAgICAgICByZXR1cm4g
NDsKLSAgICAgICAgfQotICAgIGApOwotCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnRbXSBhLCB0aHJlYWQgaW50W10gYikgewotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNr
RmFpbChgCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PSh0aHJlYWQgaW50KiBhLCB0aHJlYWQgaW50
KiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIGApOwotfTsK
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1l
LTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0yLWV4cGVjdGVkLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08
L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTIu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxp
ZmV0aW1lLTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk4YzMxMDU4NmI2
ZTdmMjc2ZGViZGRlYWYwY2M5NWIxZThmMmVjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Bl
ci12YXJpYWJsZS1saWZldGltZS0yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25z
dCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQot
ZmxvYXQgYXNzaWduVG9QdHIodGhyZWFkIGZsb2F0KiBwdHIsIGZsb2F0IHZhbHVlKSB7Ci0gICAg
cmV0dXJuICpwdHIgPSB2YWx1ZTsKLX0KLQotdGhyZWFkIGZsb2F0KiByZWFsUHRyKGZsb2F0IHZh
bHVlKQotewotICAgIHJldHVybiAmdmFsdWU7Ci19Ci0KLXRocmVhZCBmbG9hdCogZmlyc3RQdHIo
ZmxvYXQgdmFsdWUpIHsKLSAgICByZXR1cm4gcmVhbFB0cih2YWx1ZSk7Ci19Ci0KLXRocmVhZCBm
bG9hdCogc2Vjb25kUHRyKGZsb2F0IHZhbHVlKSB7Ci0gICAgcmV0dXJuIGZpcnN0UHRyKHZhbHVl
KTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91
dCByZXN1bHQ7Ci0KLSAgICB0aHJlYWQgZmxvYXQqIHB0clRvU2hhZGUgPSBmaXJzdFB0cihzaGFk
ZSk7Ci0gICAgdGhyZWFkIGZsb2F0KiBwdHJUb1NoYWRlMiA9IHNlY29uZFB0cigxLjApOwotCi0g
ICAgZmxvYXQgZHVtbXk7Ci0gICAgdGhyZWFkIGZsb2F0KiBkdW1teVB0ciA9ICZkdW1teTsKLQot
ICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZTIsIDAuMCk7Ci0gICAgdGhyZWFkIGZs
b2F0KiBkdW1teTIgPSByZWFsUHRyKHNoYWRlKTsKLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBv
c2l0aW9uOwotCi0gICAgcmVzdWx0LnNoYWRlID0gKnB0clRvU2hhZGUyOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRl
LCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkg
ewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0g
ICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1h
dDogImZsb2F0NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
LSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUt
My1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUz
MjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJv
cGVyLXZhcmlhYmxlLWxpZmV0aW1lLTMtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2Ny
aXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwot
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYThhMjhmNThjYTIyYTE2ZmRiYzU0MDI5NDk0NjZh
YjBiOTNlNTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1l
LTMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAK
LXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwot
ICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi1mbG9hdCBhc3NpZ25Ub1B0cih0
aHJlYWQgZmxvYXQqIHB0ciwgZmxvYXQgdmFsdWUpIHsKLSAgICByZXR1cm4gKnB0ciA9IHZhbHVl
OwotfQotCi10aHJlYWQgZmxvYXQqIHJlYWxQdHIoZmxvYXQgdmFsdWUpCi17Ci0gICAgZmxvYXQg
diA9IHZhbHVlOwotICAgIHJldHVybiAmdjsKLX0KLQotdGhyZWFkIGZsb2F0KiBmaXJzdFB0cihm
bG9hdCB2YWx1ZSkgewotICAgIHJldHVybiByZWFsUHRyKHZhbHVlKTsKLX0KLQotdGhyZWFkIGZs
b2F0KiBzZWNvbmRQdHIoZmxvYXQgdmFsdWUpIHsKLSAgICByZXR1cm4gZmlyc3RQdHIodmFsdWUp
OwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0
IHJlc3VsdDsKLQotICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZSA9IGZpcnN0UHRyKHNoYWRl
KTsKLSAgICB0aHJlYWQgZmxvYXQqIHB0clRvU2hhZGUyID0gc2Vjb25kUHRyKDEuMCk7Ci0KLSAg
ICBmbG9hdCBkdW1teTsKLSAgICB0aHJlYWQgZmxvYXQqIGR1bW15UHRyID0gJmR1bW15OwotCi0g
ICAgZHVtbXkgPSBhc3NpZ25Ub1B0cihwdHJUb1NoYWRlMiwgMC4wKTsKLSAgICB0aHJlYWQgZmxv
YXQqIGR1bW15MiA9IHJlYWxQdHIoc2hhZGUpOwotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9z
aXRpb247Ci0KLSAgICByZXN1bHQuc2hhZGUgPSAqcHRyVG9TaGFkZTI7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUg
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUs
IHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAg
ICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwg
Zm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0
dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBh
dHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwot
ICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAs
IHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2Us
IGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNv
bG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAx
LCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMo
KTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41Owot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRd
ID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTldID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJl
c291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7
Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcg
PSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3Vw
QmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29u
c3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGlu
Z3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQg
PSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRv
ciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4g
PSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3
KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsK
LSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJl
VmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3Rv
cmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1l
bnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2Rl
ciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7
Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFy
dChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0
ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9z
Y3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtZXhw
ZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMz
M2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12
YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW5z
dXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWVuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWE2YTJlZThiNDA3MzYzNjNiNGI2NzM0MzA1NzVhMTI0MzM5ZmQ5Yi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS5odG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVh
ZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVh
ZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotc3RydWN0IFZlcnRl
eE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLWZsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBmbG9hdCog
cHRyLCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiAqcHRyID0gdmFsdWU7Ci19Ci0KLXRocmVh
ZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gJnZhbHVlOwotfQot
Ci10aHJlYWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7Ci0gICAgcmV0dXJuIHJlYWxQ
dHIodmFsdWUpOwotfQotCi10aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgewot
ICAgIHJldHVybiBmaXJzdFB0cih2YWx1ZSk7Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4
U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0OwotCi0gICAgdGhyZWFkIGZsb2F0KiBw
dHJUb1NoYWRlID0gZmlyc3RQdHIoc2hhZGUpOwotICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFk
ZTIgPSBzZWNvbmRQdHIoMS4wKTsKLQotICAgIGZsb2F0IGR1bW15OwotICAgIHRocmVhZCBmbG9h
dCogZHVtbXlQdHIgPSAmZHVtbXk7Ci0KLSAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hh
ZGUyLCAwLjApOwotICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZSwgc2hhZGUpOwot
Ci0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0KLSAgICByZXN1bHQuc2hhZGUgPSAq
cHRyVG9TaGFkZTI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAg
ewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0K
LWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5
bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25z
dCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVy
aXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAg
Y29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBj
b25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNv
bG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAg
Y29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9
IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgYXR0cmli
dXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsK
LSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3Jt
LWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9
IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsK
LQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOwotICAgIHZlcnRleEJ1ZmZl
cjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
OiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5V
TklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIu
bWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsK
LQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6
ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0g
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
LSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bS1zcGVjLXRlc3RzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtLXNwZWMtdGVzdHMtZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDI0NjRlOTk3N2RmNjUwOGMyODZk
NzA4OGNkOTg0ZTA5NjI4ZGVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtLXNwZWMtdGVzdHMtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0KLVBBU1MgZW51bUR1cGxpY2F0
ZXMgCi1QQVNTIGRlZmF1bHRFbnVtQ29uc3RydWN0b3IgCi1QQVNTIGVudW1BcnJheVJlZkJhc2Ug
Ci1QQVNTIGVudW1GbG9hdEJhc2UgCi1QQVNTIGVudW1QdHJCYXNlIAotUEFTUyBlbnVtU3RydWN0
QmFzZSAKLVBBU1MgZW51bU5vTWVtYmVycyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWVudW0tc3BlYy10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWVudW0tc3BlYy10ZXN0cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTZh
YjliZDA1MTMyMGJhMzBkM2VhM2FkMTQxMGVhMmE2YzNhZjUwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVt
LXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwhRE9DVFlQ
RSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwv
dGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0Pgot
Y29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmVudW1EdXBsaWNhdGVzID0gYXN5
bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgICAgICBlbnVtIEZvbyB7
Ci0gICAgICAgICAgICAgICAgV2FyID0gNDIsCi0gICAgICAgICAgICAgICAgRmFtaW5lID0gMCwK
LSAgICAgICAgICAgICAgICBQZXN0aWxlbmNlID0gMjMsCi0gICAgICAgICAgICAgICAgRGVhdGgg
PSA0MgotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX07Ci0KLXdobHNsVGVzdHMuZGVmYXVs
dEVudW1Db25zdHJ1Y3RvciA9IGFzeW5jICgpID0+IHsKLSAgICBjb25zdCBwcm9ncmFtID0gYAot
ICAgICAgICBlbnVtIFdlZWtkYXkgewotICAgICAgICAgICAgTW9uZGF5LAotICAgICAgICAgICAg
VHVlc2RheSwKLSAgICAgICAgICAgIFdlZG5lc2RheSwKLSAgICAgICAgICAgIFRodXJzZGF5LAot
ICAgICAgICAgICAgUGl6emFkYXkKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgV2Vla2RheSB4ID0gV2Vla2RheSgpOwotICAgICAgICAgICAgcmV0
dXJuIDQyOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKLX07Ci0KLXdobHNsVGVzdHMu
ZW51bUFycmF5UmVmQmFzZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIGVudW0gRm9vIDogdGhyZWFkIGludFtdIHsKLSAgICAgICAg
ICAgICAgICBCYXIKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMu
ZW51bUZsb2F0QmFzZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIGVudW0gRm9vIDogZmxvYXQgewotICAgICAgICAgICAgICAgIEJh
cgotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5lbnVtUHRyQmFz
ZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIGVudW0gRm9vIDogdGhyZWFkIGludCogewotICAgICAgICAgICAgICAgIEJhcgotICAg
ICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy5lbnVtU3RydWN0QmFzZSA9
IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIHN0cnVjdCBUaGluZ3kgeyB9Ci0gICAgICAgICAgICBlbnVtIEZvbyA6IFRoaW5neSB7Ci0g
ICAgICAgICAgICAgICAgQmFyCi0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfTsKLQotd2hs
c2xUZXN0cy5lbnVtTm9NZW1iZXJzID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgZW51bSBGb28geyB9Ci0gICAgICAgIGApOwotfTsK
LQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lcXVhbGl0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtZXF1YWxpdHktZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiMzM4NDc4M2Y0ODUxMGYzNTNjMTUzMjc0NTQ3ZTVhN2U5ZGUwNmNiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1lcXVhbGl0eS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
MSArMCwwIEBACi0KLVBBU1MgZXF1YWxpdHkgCi1QQVNTIG5vdEVxdWFsaXR5IAotUEFTUyBlcXVh
bGl0eVR5cGVGYWlsdXJlIAotUEFTUyBlcXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAotUEFTUyBl
cXVhbHNXcm9uZ1JldHVyblR5cGUgCi1QQVNTIGxlc3NFcXVhbFdyb25nQXJndW1lbnRMZW5ndGgg
Ci1QQVNTIGxlc3NFcXVhbFdyb25nUmV0dXJuVHlwZSAKLVBBU1MgbGVzc1RoYW5Xcm9uZ0FyZ3Vt
ZW50TGVuZ3RoIAotUEFTUyBsZXNzVGhhbldyb25nUmV0dXJuVHlwZSAKLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVxdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZXF1YWxpdHkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3
ZmE3Mzk5MzUyM2VlNjI0MWFhZTdhZjRlYWM1N2VkZDU2MDM4ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXF1
YWxpdHkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxl
PgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0
IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5lcXVhbGl0eSA9IGFzeW5jICgpID0+IHsK
LSAgICBsZXQgcHJvZ3JhbSA9ICJib29sIGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCA9
PSB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQoNSldKSwgZmFsc2UpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50
KDcpLCBtYWtlVWludCg3KV0pLCB0cnVlKTsKLSAgICBwcm9ncmFtID0gImJvb2wgZm9vKGludCB4
LCBpbnQgeSkgeyByZXR1cm4geCA9PSB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtlSW50KDUpXSks
IGZhbHNlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtlSW50KDcpXSksIHRydWUpOwotICAgIHByb2dyYW0g
PSAiYm9vbCBmb28oYm9vbCB4LCBib29sIHkpIHsgcmV0dXJuIHggPT0geTsgfSI7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJv
b2woZmFsc2UpLCBtYWtlQm9vbCh0cnVlKV0pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1h
a2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9v
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbChmYWxz
ZSldKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKHRydWUpXSksIHRydWUpOwot
fQotCi13aGxzbFRlc3RzLm5vdEVxdWFsaXR5ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9n
cmFtID0gImJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ICE9IHk7IH0iOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCB0cnVlKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQo
NyldKSwgZmFsc2UpOwotICAgIHByb2dyYW0gPSAiYm9vbCBmb28oaW50IHgsIGludCB5KSB7IHJl
dHVybiB4ICE9IHk7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgdHJ1ZSk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg3KSwgbWFrZUludCg3KV0pLCBmYWxzZSk7Ci0gICAgcHJvZ3JhbSA9ICJib29sIGZvbyhi
b29sIHgsIGJvb2wgeSkgeyByZXR1cm4geCAhPSB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1h
a2VCb29sKHRydWUpXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChmYWxzZSld
KSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbChmYWxzZSldKSwgZmFsc2UpOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pLCBmYWxzZSk7Ci19OwotCi13aGxzbFRl
c3RzLmVxdWFsaXR5VHlwZUZhaWx1cmUgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tG
YWlsKCJib29sIGZvbyhpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ID09IHk7IH0iKTsKLX07Ci0K
LXdobHNsVGVzdHMuZXF1YWxzV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+IHsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwo
Ci0gICAgICAgIGAKLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShpbnQpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCwgaW50KSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgICAgIGApOwotfTsKLQotd2hsc2xUZXN0cy5lcXVhbHNXcm9uZ1JldHVyblR5cGUgPSBh
c3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPT0oRm9vLCBGb28pIHsg
cmV0dXJuIDQyOyB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLmxlc3NFcXVhbFdyb25n
QXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPD0oKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcjw9KGludCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLQotICAg
IGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcjw9
KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNs
VGVzdHMubGVzc0VxdWFsV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4gewotICAgIGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAg
IGludCBvcGVyYXRvcjw9KEZvbywgRm9vKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLX0K
LQotd2hsc2xUZXN0cy5sZXNzVGhhbldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PiB7
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJh
dG9yPCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgYXdhaXQgY2hlY2tGYWls
KAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPChpbnQpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICAgICAgYCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBib29sIG9wZXJhdG9yPChpbnQsIGludCwgaW50KSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLmxlc3NUaGFuV3JvbmdSZXR1cm5UeXBlID0gYXN5
bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvcjwoRm9vLCBGb28pIHsgcmV0
dXJuIDQyOyB9Ci0gICAgICAgIGApOwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2Ny
aXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIz
M2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2Ny
aXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwot
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWZsb2F0LW1hdGgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZs
b2F0LW1hdGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGVk
YTMwZjY0YjZlODRkZDMwYzBlZDhjN2ZlOTE0YTUzYTRjZjI3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mbG9h
dC1tYXRoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNT
IGZsb2F0TWF0aCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0
LW1hdGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mbG9hdC1tYXRoLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjBhM2MzZWEzMzc2MWMzMGMyMDAyNDhiODgz
MzlmNGVlOGIwMTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZsb2F0LW1hdGguaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDk5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0
PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVz
dCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5m
bG9hdE1hdGggPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGJv
b2wgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDQyLjUgPT0gNDIuNTsKLSAg
ICAgICAgfQotICAgICAgICBmbG9hdCBiYXIoZmxvYXQgeCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBiYXIoNy41KTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBm
b285KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZsb2F0KDcuNSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZmxvYXQgZm9vMTIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmxvYXQoNyk7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMTMoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmbG9hdCB4ID0gNy41OwotICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHgpOwot
ICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAgImZvbyIsIFtdKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNiIsIFtdKSwgNy41KTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb285IiwgW10pLCA3
LjUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzEyIiwgW10pLCA3KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0
aW9uKHByb2dyYW0sICJmb28xMyIsIFtdKSwgNy41KTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IGJhcihpbnQgeCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBm
b28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhcig0LjApOwotICAgICAgICAg
ICAgfQotICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAg
ICAgICAgICAgaW50IGJhcihpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJhcig0LjBmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHVpbnQg
YmFyKHVpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4geDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJhcig0LjApOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLQotICAgIGF3
YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdWludCBiYXIodWludCB4KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaW50IGZvbygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFy
KDQuMGYpOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xU
ZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1mb3ItbG9vcC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Zm9yLWxvb3AtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTY3
ZTVmYjNmZThkNDFjZmRhODU5NjU0MTI0Y2E4ZTUzNzgyMzU1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mb3It
bG9vcC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBm
b3JMb29wIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZm9yLWxvb3Au
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mb3ItbG9vcC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyOTlhOWNmODdlYTM2ZmJkYzU4YTdjNWZhMjg4NzZiNzg2YzVl
MDcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1mb3ItbG9vcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUz
ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04Pgot
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+THZhbHVlcy48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5mb3JMb29wID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbzEoaW50IHgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBzdW0gPSAwOwotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAxKSB7Ci0gICAgICAgICAgICAgICAgc3Vt
ID0gc3VtICsgaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzdW07Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50IGZvbzIoaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBzdW0gPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEp
IHsKLSAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHN1bTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vMyhpbnQgeCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAgICAgICAgICBpbnQgaSA9IDEw
MDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAxKSB7Ci0gICAg
ICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBzdW07Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbzQoaW50IHgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBzdW0gPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB4OyBpID0gaSArIDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA9PSA0KQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN1bTsKLSAgICAgICAgfQotICAgICAgICBp
bnQgZm9vNShpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkgPSBpICsgMSkgewotICAgICAgICAgICAg
ICAgIGlmIChpID09IDUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIHN1bSA9IHN1bSArIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3Vt
OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb282KGludCB4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgc3VtID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyA7IGkgPSBpICsg
MSkgewotICAgICAgICAgICAgICAgIGlmIChpID49IHgpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIGk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gc3VtOwotICAgICAgICB9Ci0gICAgICAgIGludCBmb283KGludCB4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3VtID0gMDsKLSAgICAgICAgICAgIGludCBpID0g
MDsKLSAgICAgICAgICAgIGZvciAoIDsgOyBpID0gaSArIDEpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaSA+PSB4KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBz
dW0gPSBzdW0gKyBpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN1bTsKLSAg
ICAgICAgfQotICAgICAgICBpbnQgZm9vOChpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IHN1bSA9IDA7Ci0gICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgICAgICBmb3IgKCA7
IDsgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0geCkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKLSAgICAgICAgICAgICAgICBp
ID0gaSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3VtOwotICAgICAg
ICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vMSIsIFttYWtlSW50KDMpXSksIDMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28xIiwgW21ha2VJbnQoNCldKSwgNik7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFr
ZUludCg1KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzIiLCBbbWFrZUludCgzKV0pLCAzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFttYWtlSW50KDQpXSksIDYpOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwg
W21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoMyldKSwgMyk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbbWFrZUludCg0KV0pLCA2
KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
MyIsIFttYWtlSW50KDUpXSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtlSW50KDMpXSksIDMpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW21ha2VJbnQoNCld
KSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzQiLCBbbWFrZUludCg1KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtlSW50KDYpXSksIDExKTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFttYWtlSW50
KDMpXSksIDMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb281IiwgW21ha2VJbnQoNCldKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg1KV0pLCAxMCk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFr
ZUludCg2KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg3KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzYiLCBbbWFrZUludCgzKV0pLCAzKTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNiIs
IFttYWtlSW50KDQpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNildKSwg
MTUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b282IiwgW21ha2VJbnQoNyldKSwgMjEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW21ha2VJbnQoMyldKSwgMyk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzciLCBbbWFrZUludCg0
KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vNyIsIFttYWtlSW50KDUpXSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDYpXSksIDE1KTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtl
SW50KDcpXSksIDIxKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vOCIsIFttYWtlSW50KDMpXSksIDMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284IiwgW21ha2VJbnQoNCldKSwgNik7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBb
bWFrZUludCg1KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg2KV0pLCAxNSk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg3KV0pLCAy
MSk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZv
byhpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
OyBpID0gaSArIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIHggPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9v
KGludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIDsgeCA8IDEwOyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3Nj
cmlwdD4KLTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWdl
dHRlci1zZXR0ZXItdHlwZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
Z2V0dGVyLXNldHRlci10eXBlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDM1N2VjN2I3YTkwNGUxMGQyZTQxYmIzNmFmZjU2NmNhODMwMWE2NS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtZ2V0dGVyLXNldHRlci10eXBlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDQgKzAsMCBAQAotCi1QQVNTIGdldHRlclR5cGUgCi1QQVNTIHNldHRlclR5cGUgCi0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1nZXR0ZXItc2V0dGVyLXR5cGUuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1nZXR0ZXItc2V0dGVyLXR5cGUuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxZjA0MTYyNDI0NjljMTM4MTM5MGZhNDg3OThjZjkz
Zjg2Zjc2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZ2V0dGVyLXNldHRlci10eXBlLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IGxvb3BzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNz
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmdldHRl
clR5cGUgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgaW50
IG9wZXJhdG9yLngodGhyZWFkIGludFtdIGZvbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZvb1swXTsKLSAgICAgICAgfQotICAgIGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAot
ICAgICAgICBpbnQgb3BlcmF0b3IueChpbnRbM10gZm9vKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZm9vWzBdOwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFp
bChgCi0gICAgICAgIGludCBvcGVyYXRvcltdKHRocmVhZCBpbnRbXSBmb28sIGludCBpbmRleCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZvb1tpbmRleF07Ci0gICAgICAgIH0KLSAg
ICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgaW50IG9wZXJhdG9yLngoaW50
WzNdIGZvbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZvb1swXTsKLSAgICAgICAg
fQotICAgIGApOyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBzdHJ1Y3QgRm9vIHsK
LSAgICAgICAgICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIGludCBvcGVyYXRvcltdKEZv
byBmb28sIHVpbnQ0IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vW2lu
ZGV4LnhdOwotICAgICAgICB9Ci0gICAgYCk7IAotfTsKLQotd2hsc2xUZXN0cy5zZXR0ZXJUeXBl
ID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIHRocmVhZCBp
bnRbXSBvcGVyYXRvci54PSh0aHJlYWQgaW50W10gZm9vLCB1aW50IHgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmb287Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKGAKLSAgICAgICAgaW50WzNdIG9wZXJhdG9yLng9KGludFszXSBmb28sIHVpbnQgeCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZvbzsKLSAgICAgICAgfQotICAgIGApOyAK
LSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICB0aHJlYWQgaW50W10gb3BlcmF0b3JbXT0o
dGhyZWFkIGludFtdIGZvbywgdWludCB4LCB1aW50IHkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmb287Ci0gICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAK
LSAgICAgICAgaW50WzNdIG9wZXJhdG9yLng9KGludFszXSBmb28sIHVpbnQgeCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZvbzsKLSAgICAgICAgfQotICAgIGApOyAKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGludCB4Owot
ICAgICAgICB9Ci0gICAgICAgIEZvbyBvcGVyYXRvcltdPShGb28gZm9vLCBmbG9hdDQgeSwgdWlu
dCB6KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAgICAgIH0KLSAg
ICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAg
ICAgICAgICBpbnQgeDsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9v
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAgICAgIH0KLSAgICAg
ICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludDQgeCkKLSAgICAgICAgewotICAgICAgICAg
ICAgRm9vIHJlc3VsdDsKLSAgICAgICAgICAgIGZvby54ID0geC54OwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIGApOyAKLX07Ci0KLXJ1blRlc3RzKHdobHNsVGVz
dHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1odWdlLWFycmF5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1odWdlLWFycmF5LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
aHVnZS1hcnJheS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBB
U1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXkuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwOGEyZmYyMmViYTU1ZWY2NmU3NGIyOWY0ZTIzYTk5ZjAyYWI5MzIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCww
IEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0
IHNoYWRlclNvdXJjZSA9IGAKLXZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBhcnJheSwgZmxvYXQg
dmFsdWUpIHsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewot
ICAgICAgICBhcnJheVtpXSA9IHZhbHVlOwotICAgIH0KLX0KLQotW251bXRocmVhZHMoMSwgMSwg
MSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Ci0gICAg
ZmxvYXRbMTAwMF0gYXJyYXk7Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxMDAwKQotICAgICAg
ICByZXR1cm47Ci0gICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgaWYgKGFycmF5W2ldICE9IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXJyYXlbMF0gPSAwLjEzMzc7Ci0gICAgaWYgKGFycmF5WzBdICE9IDAuMTMzNykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgdGhyZWFkIGZsb2F0W10gYXJyYXlQdHIgPSBAYXJyYXk7Ci0g
ICAgaWYgKGFycmF5UHRyLmxlbmd0aCAhPSAxMDAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm
aWxsKGFycmF5UHRyLCAwLjEwMTApOwotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5UHRy
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhcnJheVB0cltpXSAhPSAwLjEwMTApCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhcnJheVtpXSAhPSAwLjEwMTApCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmlsbChAYXJyYXksIDAuMDEwMSk7Ci0gICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFycmF5
UHRyW2ldICE9IDAuMDEwMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGFycmF5
W2ldICE9IDAuMDEwMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBidWZmZXJb
MF0gPSAxOwotfQotYDsKLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0
IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNv
dXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0
IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlz
aWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3Jv
dXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBs
YXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZp
Y2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3Qgc2l6ZSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxOwotCi0gICAg
Y29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBi
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7Ci0g
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAg
IGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNh
Z2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcg
PSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5k
aW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBi
aW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczog
W2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29k
ZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5j
b2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXpl
KTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNv
bXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQ
aXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3Jv
dXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBjb21w
dXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3Vs
dHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgbGV0IHJlc3VsdHNJbnQzMkFycmF5ID0gbmV3
IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0ludDMyQXJy
YXlbMF0gPT09IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAg
dGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNo
SlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwot
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRl
c3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pZi1zdGF0ZW1l
bnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVudC1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzgzZTdmYWQ0NmZl
MzU3ZDE5ZTExMGFkNTZjZDg0NTIxYTZiYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVudC1l
eHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotUEFTUyBpZlN0YXRl
bWVudCAKLVBBU1MgaWZFbHNlU3RhdGVtZW50IAotUEFTUyBpZkVsc2VJZlN0YXRlbWVudCAKLVBB
U1MgaWZFbHNlSWZFbHNlU3RhdGVtZW50IAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtaWYtc3RhdGVtZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaWYt
c3RhdGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MjY0OGNkNWRj
MTNhMzAyMzVhYTJkZDk1ZGM1YmM5Zjg1NjFmNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWlmLXN0YXRlbWVu
dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMuaWZTdGF0ZW1lbnQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBw
cm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAgICAg
eSA9IDg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4geTsKLSAgICAgICAgfQot
ICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDMpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0pLCA2KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSld
KSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDYpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCld
KSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDkpXSksIDYpOwotfQotCi13aGxzbFRlc3RzLmlmRWxzZVN0YXRlbWVu
dCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28o
aW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgIGlm
ICh4ID09IDcpIHsKLSAgICAgICAgICAgICAgICB5ID0gODsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgeSA9IDk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4geTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDMpXSksIDkpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0p
LCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNSldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDYpXSksIDkpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0p
LCA4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoOCldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDkpOwotfQotCi13aGxzbFRl
c3RzLmlmRWxzZUlmU3RhdGVtZW50ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9
IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkg
PSA2OwotICAgICAgICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgIHkgPSA4Owot
ICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDgpIHsKLSAgICAgICAgICAgICAgICB5ID0gOTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICB9Ci0gICAgYDsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoMyldKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSksIDYpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg1KV0pLCA2KTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNildKSwgNik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoOSldKSwgNik7Ci19Ci0KLXdobHNsVGVzdHMuaWZFbHNlSWZFbHNlU3RhdGVtZW50
ID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhp
bnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkgPSA2OwotICAgICAgICAgICAgaWYg
KHggPT0gNykgewotICAgICAgICAgICAgICAgIHkgPSA4OwotICAgICAgICAgICAgfSBlbHNlIGlm
ICh4ID09IDgpIHsKLSAgICAgICAgICAgICAgICB5ID0gOTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgeSA9IDEwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzKV0pLCAxMCk7Ci0gICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQp
XSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2KV0pLCAxMCk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDcpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOSldKSwgMTApOwotfQotCi1y
dW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjhlNTBlNzE0NzUwYjZjZWFjNzYyMjJm
MDVjZWJhNjJkMWE1MGMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmNyZW1lbnQtZGVjcmVtZW50LWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIGluY3JlbWVudEFu
ZERlY3JlbWVudCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3Jl
bWVudC1kZWNyZW1lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmNyZW1lbnQt
ZGVjcmVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NjY1OWE3M2Zk
ZDc3OGY5ZDFjYTZkZjhhOWIyOTJhZDI4NDUxZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluY3JlbWVudC1k
ZWNyZW1lbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTwhRE9DVFlQRSBo
dG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Ci08dGl0bGU+Q29weWluZy48L3RpdGxlPgotPHNjcmlwdCBzcmM9Impz
L3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsK
LQotd2hsc2xUZXN0cy5pbmNyZW1lbnRBbmREZWNyZW1lbnQgPSBhc3luYyAoKSA9PiB7Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28xKCkgeyBpbnQgeCA9IDA7IHJldHVybiB4
Kys7IH0KLSAgICAgICAgaW50IGZvbzIoKSB7IGludCB4ID0gMDsgeCsrOyByZXR1cm4geDsgfQot
ICAgICAgICBpbnQgZm9vMygpIHsgaW50IHggPSAwOyByZXR1cm4gKyt4OyB9Ci0gICAgICAgIGlu
dCBmb280KCkgeyBpbnQgeCA9IDA7ICsreDsgcmV0dXJuIHg7IH0KLSAgICAgICAgaW50IGZvbzUo
KSB7IGludCB4ID0gMDsgcmV0dXJuIHgtLTsgfQotICAgICAgICBpbnQgZm9vNigpIHsgaW50IHgg
PSAwOyB4LS07IHJldHVybiB4OyB9Ci0gICAgICAgIGludCBmb283KCkgeyBpbnQgeCA9IDA7IHJl
dHVybiAtLXg7IH0KLSAgICAgICAgaW50IGZvbzgoKSB7IGludCB4ID0gMDsgLS14OyByZXR1cm4g
eDsgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzEiLCBbXSksIDApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCAxKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgMSk7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDEpOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb281IiwgW10p
LCAwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vNiIsIFtdKSwgLTEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb283IiwgW10pLCAtMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbXSksIC0xKTsKLX07Ci0KLXJ1blRlc3RzKHdo
bHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1pbmRleC1hbmRlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtaW5kZXgtYW5kZXItZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NmNiNDk0NGVjYjgzNTljYzU0N2QyOWIxNTJiYjIxMTAwNzFmMzZmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1pbmRleC1hbmRlci1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICsw
LDAgQEAKLQotUEFTUyBpbmRleEFuZGVyV2l0aE5vdGhpbmdXcm9uZyAKLVBBU1MgaW5kZXhBbmRl
cldpdGhXcm9uZ051bWJlck9mQXJndW1lbnRzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtaW5kZXgtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bmRleC1hbmRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTcyODc4YmFm
MWE0NWFkNDI3MjVmNjUyZjY0YTU2YmE5NGJhMDFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1hbmRl
ci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08
aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0K
LXdobHNsVGVzdHMuaW5kZXhBbmRlcldpdGhOb3RoaW5nV3JvbmcgPSBhc3luYyAoKSA9Pgotewot
ICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGlu
dCB4OwotICAgICAgICB9Ci0gICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBG
b28qIGZvbywgdWludCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZmb28tPng7Ci0g
ICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyB4
OwotICAgICAgICAgICAgeC54ID0gMTM7Ci0gICAgICAgICAgICByZXR1cm4geFs2NjZdOwotICAg
ICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10pLCAxMyk7Ci19Ci0KLXdobHNsVGVzdHMuaW5kZXhBbmRlcldpdGhX
cm9uZ051bWJlck9mQXJndW1lbnRzID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgICAgICByZXR1
cm4gJng7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAg
ICAgICAgIGludCB4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyZWFkIGludCogb3Bl
cmF0b3ImW10odGhyZWFkIEZvbyogZm9vKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiAmZm9vLT54OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsK
LSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocmVh
ZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywgdWludCwgdWludCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRl
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNl
dHRlci1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYmJmZjEx
MzQzOWMzMTBmYjc0NmFhNTJmNDk0OGYyMGY2ZjdjNTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWdl
dHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0K
LVBBU1MgcG9pbnRlckluZGV4R2V0dGVyIAotUEFTUyBwb2ludGVyR2V0dGVyIAotCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRlci5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LWdldHRlci1zZXR0ZXIuaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEwNzlmYTU3ZDE4NWM1YWRmMjY4Y2U1ZDJkY2ZmYjE0
NGJlMzJmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtZ2V0dGVyLXNldHRlci5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsODEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNo
YXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRs
ZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93
aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0K
LXdobHNsVGVzdHMucG9pbnRlckluZGV4R2V0dGVyID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0
IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oZGV2aWNl
IGludCosIHVpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcltdKHRocmVhZCBpbnQqLCB1aW50KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIGApOwotCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBpbnQgb3BlcmF0b3JbXSh0aHJlYWRncm91cCBpbnQqLCB1aW50KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwot
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0
b3JbXShjb25zdGFudCBpbnQqLCB1aW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3Rz
LnBvaW50ZXJHZXR0ZXIgPSBhc3luYyAoKSA9PiB7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vKGRldmljZSBpbnQqKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50
IG9wZXJhdG9yLmZvbyh0aHJlYWQgaW50KikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28odGhyZWFkZ3Jv
dXAgaW50KikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTQzOwotICAg
ICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAK
LSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28oY29uc3RhbnQgaW50KikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLX0KLQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LXNldHRlci1nZXR0ZXItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWluZGV4LXNldHRlci1nZXR0ZXIt
ZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzYzOWQwNWE2YjM0
MmY4ZmVjYTQ3ZjgxNTQzMjQ4NjdmMTBlZTRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0ZXIt
Z2V0dGVyLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi1QQVNT
IGluZGV4U2V0dGVyV2l0aE5vR2V0dGVyT3ZlcmxvYWQgCi1QQVNTIGluZGV4U2V0dGVyV2l0aE5v
R2V0dGVyT3ZlcmxvYWRGaXhlZCAKLVBBU1Mgbm90TG9uZUluZGV4U2V0dGVyIAotUEFTUyBsb25l
SW5kZXhTZXR0ZXIgCi1QQVNTIGxvbmVJbmRleFNldHRlclBvaW50ZXIgCi0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtaW5kZXgtc2V0dGVyLWdldHRlci5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjOGExNWFhNzQ2NGM3YTdlMjYyMThhZjYxZTI3OGE3YjVjZGFi
ZTA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5U
ZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuaW5kZXhT
ZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgc3RydWN0IEJhciB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvcltdKEZvbywgdWludCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gNTM0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgQmFyIG9wZXJhdG9yW109KEJhciwgdWludCwgaW50KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBCYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgYCk7Ci0gICAgICAgIAotfTsKLQotd2hsc2xUZXN0cy5pbmRleFNldHRlcldpdGhOb0dldHRl
ck92ZXJsb2FkRml4ZWQgPSBhc3luYyAoKSA9PgotewotICAgIGNvbnN0IHByb2dyYW0gPSBgCi0g
ICAgICAgIHN0cnVjdCBCYXIgeyB9Ci0gICAgICAgIGludCBvcGVyYXRvcltdKEJhciwgdWludCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDUzNDsKLSAgICAgICAgfQotICAgICAgICBC
YXIgb3BlcmF0b3JbXT0oQmFyLCB1aW50LCBpbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBCYXIoKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkgeyByZXR1cm4gQmFyKClb
MF07IH0KLSAgICAgICAgaW50IGJhcigpIHsKLSAgICAgICAgICAgIEJhciBiOwotICAgICAgICAg
ICAgYlswXSA9IDQwMDsKLSAgICAgICAgICAgIHJldHVybiBiWzBdOwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCA1MzQpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJiYXIiLCBbXSksIDUzNCk7Ci19OwotCi13aGxzbFRlc3RzLm5vdExvbmVJbmRleFNl
dHRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgY29uc3QgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50
IG9wZXJhdG9yW10oaW50LCB1aW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gNjU7
Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgdWludCwgaW50KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gNTQzOwotICAgICAgICB9Ci0gICAgICAgIGludCBm
b28oKSB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIHJldHVybiB4WzBdOwotICAg
ICAgICB9Ci0gICAgICAgIGludCBiYXIoKSB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAg
ICAgIHhbMF0gPSA0MjsKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICB9Ci0gICAgYDsK
LSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10pLCA2NSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImJhciIsIFtdKSwgNTQzKTsKLX07Ci0KLXdobHNsVGVzdHMubG9uZUluZGV4U2V0dGVyID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIGludCBvcGVyYXRvcltdPShpbnQsIHVpbnQsIGludCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gNTQzOwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAgICAg
ICAgCi19OwotCi13aGxzbFRlc3RzLmxvbmVJbmRleFNldHRlclBvaW50ZXIgPSBhc3luYyAoKSA9
PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgdGhyZWFk
IGludCogb3BlcmF0b3JbXT0odGhyZWFkIGludCogcHRyLCB1aW50LCBpbnQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci0gICAgICAgIAotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGgt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1iaXQtbWF0aC1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MWI2YzUzZTFkY2MwY2Ri
NTdmNjU2ZmMyNjVkYjlmMjAxMjVmZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1iaXQtbWF0aC1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotUEFTUyBpbnRCaXRBbmQg
Ci1QQVNTIGludEJpdE9yIAotUEFTUyBpbnRCaXRYb3IgCi1QQVNTIGludEJpdE5vdCAKLVBBU1Mg
aW50TFNoaWZ0IAotUEFTUyBpbnRSU2hpZnQgCi1QQVNTIGludFNpbXBsZU1hdGggCi0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGguaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtYml0LW1hdGguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjE3YWY0ZDg4ZTc4M2FiZGY2NDViMjgxZDE4MjRhM2Y4OTM0ZGRmZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtaW50LWJpdC1tYXRoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0
YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IGludCBiaXQgbWF0
aC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlw
dD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5pbnRCaXRBbmQgPSBhc3lu
YyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCBhLCBp
bnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgJiBiOwotICAgICAgICB9Ci0g
ICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoMSksIG1ha2VJbnQoNyldKSwgMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFr
ZUludCg0MildKSwgNDIpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCgtMSksIG1ha2VJbnQoLTcpXSksIC03KTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoMCksIG1ha2VJbnQoODU3MzIpXSksIDApOwotfQotCi13aGxzbFRlc3RzLmludEJpdE9yID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQg
YSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhIHwgYjsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlSW50KDcpXSksIDcpOwotICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NTUzNSks
IG1ha2VJbnQoNDIpXSksIDY1NTM1KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoLTEpLCBtYWtlSW50KC03KV0pLCAtMSk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDApLCBtYWtlSW50KDg1NzMyKV0pLCA4NTczMik7Ci19Ci0KLXdobHNsVGVzdHMu
aW50Qml0WG9yID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAg
aW50IGZvbyhpbnQgYSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhIF4g
YjsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlSW50KDcpXSksIDYpOwotICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg2NTUzNSksIG1ha2VJbnQoNDIpXSksIDY1NDkzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoLTEpLCBtYWtlSW50
KC03KV0pLCA2KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1ha2VJbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQot
d2hsc2xUZXN0cy5pbnRCaXROb3QgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0g
YAotICAgICAgICBpbnQgZm9vKGludCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
fmE7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKV0pLCAtMik7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1
KV0pLCAtNjU1MzYpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCgtMSldKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApXSksIC0xKTsKLX0K
LQotd2hsc2xUZXN0cy5pbnRMU2hpZnQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFt
ID0gYAotICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhIDw8IGI7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKSwgbWFrZVVp
bnQoNyldKSwgMTI4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAyNjIxNDApOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCgtMSksIG1ha2VVaW50KDUpXSksIC0zMik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApLCBtYWtlVWludCgz
KV0pLCAwKTsKLX0KLQotd2hsc2xUZXN0cy5pbnRSU2hpZnQgPSBhc3luYyAoKSA9PgotewotICAg
IGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhID4+IGI7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCgxKSwgbWFrZVVpbnQoNyldKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFrZVVpbnQoMildKSwg
MTYzODMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCgtMSksIG1ha2VVaW50KDUpXSksIC0xKTsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1h
a2VVaW50KDMpXSksIDApOwotfQotCi13aGxzbFRlc3RzLmludFNpbXBsZU1hdGggPSBhc3luYyAo
KSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSAiaW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJu
IHggKyB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgMTIpOwotICAgIHByb2dyYW0g
PSAiaW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggLSB5OyB9IjsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyks
IG1ha2VJbnQoNSldKSwgMik7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpLCBtYWtlSW50KDcpXSksIC0yKTsKLSAgICBw
cm9ncmFtID0gImludCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICogeTsgfSI7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDcpLCBtYWtlSW50KDUpXSksIDM1KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoLTUpXSksIC0z
NSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxpdGVyYWwtY29tcGFyZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxpdGVyYWwtY29tcGFyZS1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZGFkNjU5M2I2MTI3
YTYyZjJlNzRjMTgwNGI5MmYyZDMwOTFjYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWludC1saXRlcmFsLWNv
bXBhcmUtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mg
dHdvSW50TGl0ZXJhbHMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1p
bnQtbGl0ZXJhbC1jb21wYXJlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaW50LWxp
dGVyYWwtY29tcGFyZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGY0MmU4
MmViN2E5YTZiYmRkODYwMzI0OTBkNTdmYTdlZTFjOTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1pbnQtbGl0
ZXJhbC1jb21wYXJlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48
L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy50d29JbnRMaXRl
cmFscyA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgYm9vbCBm
b28oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gNDIgPT0gNDI7Ci0gICAgICAgIH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCB0cnVlKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3Njcmlw
dD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb2dpY2Fs
LW5lZ2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb2dpY2Fs
LW5lZ2F0aW9uLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM5
ODE0MDUzM2Q0NWNlNDU0MzYxZDU2NjViODc0N2EyNDA1MDAzYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9n
aWNhbC1uZWdhdGlvbi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LQotUEFTUyBsb2dpY2FsTmVnYXRpb24gCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1sb2dpY2FsLW5lZ2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
bG9naWNhbC1uZWdhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjIx
NDVmZTVkMGU4MGFlOWE0NDBkM2RlYmQ4NzdiNzAxODM2Njg1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb2dp
Y2FsLW5lZ2F0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPkx2YWx1ZXMuPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMubG9naWNhbE5lZ2F0aW9uID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9ICJib29sIGZvbyhib29sIHgpIHsgcmV0dXJuICF4OyB9IjsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9v
bCh0cnVlKV0pLCBmYWxzZSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpXSksIHRydWUpOwotfQotCi1ydW5U
ZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG9vcHMtYnJlYWstZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggM2JmODY5YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG9vcHMtYnJlYWstZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQg
c3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5Pgot
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08
c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OwotZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMt
YnJlYWsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyMzgyZGFjMGUxOTBh
MmEyNDhjNTczYjY0ZDFkNThmNjUwZmFkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtYnJlYWsuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVj
dCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZs
b2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRydWU7Ci0g
ICAgZm9yICh1aW50IGkgPSAwOyBpIDwgMTA7IChpID0gaSArIDEsIHNoYWRlID0gc2hhZGUgKyAx
LjApKSB7Ci0gICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBzaGFkZSA9IHNoYWRlICsgMS4wOwotICAgIH0KLQotICAgIHJlc3VsdC5wb3NpdGlv
biA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBz
aGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewot
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAg
Y29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5n
bGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJj
dyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBj
b25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDog
InJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8v
IEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVs
bDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDog
ImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2Nh
dGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1
dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtp
bnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2Jp
bmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5k
R3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdy
aXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0g
PSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0w
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKLQot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTldID0gMC4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwot
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAx
LCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRw
dXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9y
ZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xv
ckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQ
YXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVz
Y3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxp
bmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBd
LCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVu
ZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsK
LSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAg
IGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
LX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJv
ZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7Ci1kcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1sb29wcy1jb250aW51ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2I0
ZTkwMThlM2FkM2U0NDFiZjMzMjJiNWI5NDNlNmY2MWE4YWFmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29w
cy1jb250aW51ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLTwhRE9DVFlQ
RSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291
cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLXZlcnRleCBWZXJ0
ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQg
c2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQgcmVzdWx0OwotCi0gICAgYm9v
bCBiID0gdHJ1ZTsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9IGkgKyAxKSB7Ci0g
ICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBzaGFkZSA9IHNoYWRlICsgMS4wOwotICAgIH0KLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBv
c2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwg
c2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3Qg
ZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdt
ZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3Ry
aXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1
bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBj
b2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4
dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNv
bG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQot
ICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjog
MSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0g
W2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIw
LCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBd
OwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVgg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5
bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKLQotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTldID0gMC4wOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJj
ZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRp
bmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdy
b3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAg
Y29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmlu
ZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0g
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0p
OwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFz
c0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0
aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdC
bGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwot
PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1s
b29wcy1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2
NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1l
eHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0
bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDI4MDVjYjYwODI2M2Rj
OTE5ZWExMzY0NzAxYzQ3YmE0MzFhMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLXNwZWMtdGVzdHMt
ZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLVBBU1MgZG9XaGls
ZSAKLVBBU1Mgc2ltcGxlV2hpbGUgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1sb29wcy1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9v
cHMtc3BlYy10ZXN0cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE5ODRk
NTEyMDM0YWE4MTY2MzcwMjJhNTUzNzE0YzFiYTVkNDQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1z
cGVjLXRlc3RzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQi
IGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgbG9vcHMuPC90aXRsZT4KLTxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0g
e307Ci0KLXdobHNsVGVzdHMuZG9XaGlsZSA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dy
YW0gPSBgCi0gICAgICAgIGludCBmb28xKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgeSA9IDc7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgeSA9IDg7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IHdoaWxlICh4IDwgMTApOwotICAgICAg
ICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbzIoaW50IHgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNzsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAg
ICAgICAgICB5ID0gODsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gd2hp
bGUgKHkgPT0gNyk7Ci0gICAgICAgICAgICByZXR1cm4geTsKLSAgICAgICAgfQotICAgICAgICBp
bnQgZm9vMyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gMTEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgeCA9IDE1OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3VtID0gc3VtICsgeDsKLSAgICAgICAgICAgICAg
ICB4ID0geCArIDE7Ci0gICAgICAgICAgICB9IHdoaWxlICh4IDwgMTMpOwotICAgICAgICAgICAg
cmV0dXJuIHN1bTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFrZUludCgxKV0pLCA4KTsKLSAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtl
SW50KDExKV0pLCA4KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vMiIsIFttYWtlSW50KDEpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoOSldKSwgMTkpOwot
fQotCi13aGxzbFRlc3RzLnNpbXBsZVdoaWxlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJv
Z3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAg
d2hpbGUgKHggPCAxMykKLSAgICAgICAgICAgICAgICB4ID0geCAqIDI7Ci0gICAgICAgICAgICBy
ZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIDE2KTsKLX0KLQotcnVu
VGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWxvb3BzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZmI3Njc1YzA2Yzdk
OGI5NDlkNzA1OWEyOWU1MzY0MjkyYjkyOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxo
ZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9o
ZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVy
dGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgx
KSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAx
MDsgaSA9IGkgKyAxKSB7Ci0gICAgICAgIHNoYWRlID0gc2hhZGUgKyAwLjE7Ci0gICAgfQotCi0g
ICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFk
ZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVy
biBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1
dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9Owot
ICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29u
c3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4
QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ig
PSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0t
YnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2
ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
ciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAg
Y29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZl
cnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsy
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjE7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0g
MC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzldID0gMC4xOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4xOwot
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjE7Ci0gICAgdmVydGV4QnVmZmVy
MC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVO
SUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5t
YXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwot
Ci0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXpl
OiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNl
OiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91
dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBj
b25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAg
ICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9y
bSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3
YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4u
Z2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1
dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNv
bnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NE
ZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9Owot
ICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQ
YXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAx
LCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1
bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAg
ICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwg
ZnVuY3Rpb24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJp
YWJsZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDQwNzgx
YTRhZWM3YmIyYzNlYzcwZTdiNTJmZjE4ZmRjZTZhMjhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb3RzLW9m
LWxvY2FsLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAg
QEAKLQotUEFTUyBsb3RzT2ZMb2NhbFZhcmlhYmxlcyAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWxvdHMtb2YtbG9jYWwtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJpYWJsZXMuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTYxMDRiNDE2OTRmNTVhYzQ1YjlhODEwMmQxODE0NDI4ZjA4Njk0
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtbG90cy1vZi1sb2NhbC12YXJpYWJsZXMuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDM3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFy
c2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+
TG90cyBvZiBsb2NhbCB2YXJpYWJsZXMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNs
VGVzdHMubG90c09mTG9jYWxWYXJpYWJsZXMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBzcmMg
PSAiaW50IHN1bSgpIHtcbiI7Ci0gICAgc3JjICs9ICIgICAgaW50IGkgPSAwO1xuIjsKLSAgICBs
ZXQgdGFyZ2V0ID0gMDsKLSAgICBjb25zdCBudW1WYXJzID0gNTA7Ci0gICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBudW1WYXJzOyBpKyspIHsKLSAgICAgICAgc3JjICs9IGAgICBpID0gJHtpfTtcbmA7
Ci0gICAgICAgIHNyYyArPSBgICAgaW50IFYke2l9ID0gKGkgKyAzKSAqIChpICsgMyk7XG5gOwot
ICAgICAgICB0YXJnZXQgKz0gKGkgKyAzKSAqIChpICsgMyk7Ci0gICAgfQotICAgIHNyYyArPSAi
ICAgIGludCByZXN1bHQgPSAwO1xuIjsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZhcnM7
IGkrKykgewotICAgICAgICBzcmMgKz0gYCAgICByZXN1bHQgKz0gViR7aX07XG5gOwotICAgIH0K
LSAgICBzcmMgKz0gIiAgICByZXR1cm4gcmVzdWx0O1xuIjsKLSAgICBzcmMgKz0gIn0iOwotICAg
IGxldCBwcm9ncmFtID0gc3JjOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJzdW0iLCBbXSksIHRhcmdldCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVz
dHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1sdmFsdWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1s
dmFsdWVzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQwMjIz
MWM0ZTU0N2ViMmQ1M2NlZDFmODViNDFjMDFlMjI3NWU0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbHZhbHVl
cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBsVmFs
dWVzIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbHZhbHVlcy5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWx2YWx1ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmE1OTczNzMyODVjMzY1NzZiYzY0NzNlODJmMDAwMDZiNTI4MTY5My4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbHZhbHVlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+THZhbHVlcy48L3RpdGxlPgot
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5sVmFsdWVzID0gYXN5bmMgKCkgPT4gewotICAg
IGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJih4KyspOwotICAg
ICAgICAgICAgcmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNr
RmFpbChgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCA9
IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJigrK3gpOwotICAgICAgICAgICAgcmV0
dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAg
ICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAg
ICAgICB0aHJlYWQgaW50KiB5ID0gJih4ID0gMyk7Ci0gICAgICAgICAgICByZXR1cm4gKnk7Ci0g
ICAgICAgIH0KLSAgICBgKTsgCi0gICAgYXdhaXQgY2hlY2tGYWlsKGAKLSAgICAgICAgaW50IGZv
bygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgIHRocmVh
ZCBpbnQqIHkgPSAmMzsKLSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAgIGAp
OyAKLSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgYmFyKGludCB4KSB7Ci0gICAg
ICAgICAgICByZXR1cm4geCArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIHkg
PSAmYmFyKDMpOwotICAgICAgICAgICAgcmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAot
ICAgIGF3YWl0IGNoZWNrRmFpbChgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJig3LCB4KTsK
LSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAgIGApOwotICAgIGF3YWl0IGNo
ZWNrRmFpbChgCi0gICAgICAgIGVudW0gRGF5cyB7Ci0gICAgICAgICAgICBNb25kYXksCi0gICAg
ICAgICAgICBUdWVzZGF5Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQqIHkgPSAmKERh
eXMuTW9uZGF5KTsKLSAgICAgICAgICAgIHJldHVybiAqeTsKLSAgICAgICAgfQotICAgIGApOyAK
LSAgICBhd2FpdCBjaGVja0ZhaWwoYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhyZWFkIGJvb2wqIHkgPSAmKHRydWUgJiYgZmFsc2UpOwotICAgICAgICAgICAg
cmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAotICAgIGF3YWl0IGNoZWNrRmFpbChgCi0g
ICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJlYWQgYm9vbCogeSA9
ICYoIXRydWUpOwotICAgICAgICAgICAgcmV0dXJuICp5OwotICAgICAgICB9Ci0gICAgYCk7IAot
ICAgIGNvbnN0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpbnQgeCA9IDM7Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiB5ID0gJng7Ci0gICAg
ICAgICAgICByZXR1cm4gKnk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDMpOwotfTsKLQotcnVu
VGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KLQotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0
cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNGNhNDkyMzY3
OTgzN2JmMWI2Y2UzNGI4ZTI0MzFjNThkNWM1ZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXkt
cmVmLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBA
Ci0KLVBBU1MgbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmIAotUEFTUyBtYWtlQXJyYXlSZWZGcm9t
TG9jYWwgCi1QQVNTIG1ha2VBcnJheVJlZkZyb21Qb2ludGVyIAotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRkYmY0NWEwZDhjNWQyZWJlYzg5OTJmYTEwNzM3
ZGUzNWNmODFiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQg
c3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3Rz
ID0ge307Ci0KLXdobHNsVGVzdHMubWFrZUFycmF5UmVmRnJvbUFycmF5UmVmID0gYXN5bmMgKCkg
PT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IGJh
cih0aHJlYWQgaW50W10gcmVmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biByZWZbMF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgYmF6KHRocmVhZCBpbnRb
XSBwdHIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhcihAcHRyKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGludCB4ID0gNDg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJheihAeCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLm1ha2VBcnJheVJl
ZkZyb21Mb2NhbCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAg
IGludCBiYXIodGhyZWFkIGludFtdIHJlZikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHJlZlswXTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50IHggPSA0ODsKLSAgICAgICAgICAgIHJldHVybiBiYXIoQHgpOwotICAgICAgICB9
Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCA0OCk7Ci19Ci0KLXdobHNsVGVzdHMubWFrZUFycmF5UmVmRnJvbVBvaW50
ZXIgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgYmFy
KHRocmVhZCBpbnRbXSByZWYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWZbMF07
Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJheih0aHJlYWQgaW50KiBwdHIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBiYXIoQHB0cik7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZv
bygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4ID0gNDg7Ci0gICAgICAgICAgICByZXR1
cm4gYmF6KCZ4KTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDgpOwotfQotCi1ydW5UZXN0cyh3
aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZh
ZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MGIzYjNlYzcxOTRmNWNlMGRlYWExYTBlN2IwOTE5ZTQ1OGRhYjU0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
MTg0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0
PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotYm9vbCB0ZXN0MSgpIHsKLSAgICBpbnQgdmFsdWUg
PSA0MjsKLSAgICB0aHJlYWQgaW50W10gYXJyYXkgPSBAdmFsdWU7Ci0gICAgaWYgKGFycmF5Lmxl
bmd0aCAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzBdICE9IDQy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzEyMDIxM10gIT0gMCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXJyYXlbMF0gPSAxMzM3OwotICAgIGlmICh2YWx1
ZSAhPSAxMzM3KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCB0ZXN0MigpIHsKLSAgICBpbnQgdmFsdWUgPSA0MjsKLSAgICB0aHJlYWQgaW50KiBw
dHIgPSAmdmFsdWU7Ci0gICAgaWYgKCpwdHIgIT0gNDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHRocmVhZCBpbnRbXSBhcnJheSA9IEBwdHI7Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCAh
PSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzBdICE9IDQyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzEyMzc0MjE3XSAhPSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgKnB0ciA9IDY2NjsKLSAgICBpZiAoKnB0ciAhPSA2
NjYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgIT0gNjY2KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGFycmF5WzBdICE9IDY2NikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXJyYXlbMF0gPSA0MjQyOwotICAgIGlmICgqcHRyICE9IDQyNDIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgIT0gNDI0MikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChhcnJheVswXSAhPSA0MjQyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB0ZXN0MygpIHsKLSAgICBpbnRbNDJdIHg7Ci0gICAgdGhy
ZWFkIGludFs0Ml0qIGFycmF5UHRyID0gJng7Ci0gICAgaWYgKGFycmF5UHRyLT5sZW5ndGggIT0g
NDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHhbNDFdID0gNjY2OwotICAgIGlmICgo
KmFycmF5UHRyKVs0MV0gIT0gNjY2KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCgq
YXJyYXlQdHIpWzBdICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRocmVhZCBp
bnRbXSBhcnJheSA9IEB4OwotICAgIGlmIChhcnJheS5sZW5ndGggIT0gNDIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGFycmF5WzBdID0gMTMzNzsKLSAgICBpZiAoeFswXSAhPSAxMzM3
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCgqYXJyYXlQdHIpWzBdICE9IDEzMzcp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHRl
c3Q0KCkgewotICAgIHRocmVhZCBpbnQqIHB0ciA9IG51bGw7Ci0KLSAgICB0aHJlYWQgaW50W10g
YXJyYXkgPSBAcHRyOwotICAgIGlmIChhcnJheS5sZW5ndGggIT0gMCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGFycmF5WzBdICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChhcnJheVsxMDAwMDBdICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9p
ZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0
MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBpZiAoIXRlc3QxKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghdGVzdDIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCF0ZXN0MygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXRlc3Q0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3Np
emUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVy
RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIu
bWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQz
MkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAw
OwotICAgIGJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDEsIDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0g
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAg
ICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZm
ZXIpOwotICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBh
c3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRz
QnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNp
Y0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVu
KGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigp
IHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAg
IH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNU
ZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTg1NTk2MjM1YzJhNDE4YzE0ZTI3NjBjYWY5
ZjcwMjExY2Y5M2Q4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIGJ1aWx0aW5NYXRyaWNl
cyAKLVBBU1MgbWF0cml4TXVsdGlwbGljYXRpb24gCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbWF0cmljZXMtc3BlYy10ZXN0cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNmYyYmQ5OTY5YmFjODAxMzBjMGVkYWEzNmJmOWM4ODk0MzA5MGFhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQg
KzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08
bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExT
TCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5l
c3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuYnVp
bHRpbk1hdHJpY2VzID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBmbG9hdCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDJ4MiBhOwotICAgICAg
ICAgICAgYVswXVswXSA9IDE7Ci0gICAgICAgICAgICBhWzBdWzFdID0gMjsKLSAgICAgICAgICAg
IGFbMV1bMF0gPSAzOwotICAgICAgICAgICAgYVsxXVsxXSA9IDQ7Ci0gICAgICAgICAgICByZXR1
cm4gYVswXVswXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28yKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZmxvYXQyeDMgYTsKLSAgICAgICAgICAgIGFbMF1bMF0gPSAxOwotICAgICAg
ICAgICAgYVswXVsxXSA9IDI7Ci0gICAgICAgICAgICBhWzBdWzJdID0gMzsKLSAgICAgICAgICAg
IGFbMV1bMF0gPSA0OwotICAgICAgICAgICAgYVsxXVsxXSA9IDU7Ci0gICAgICAgICAgICBhWzFd
WzJdID0gNjsKLSAgICAgICAgICAgIHJldHVybiBhWzFdWzJdOwotICAgICAgICB9Ci0gICAgICAg
IGZsb2F0IGZvbzMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDJ4MiBhOwotICAgICAg
ICAgICAgcmV0dXJuIGFbMF1bMF07Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb280KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZmxvYXQyeDIgYTsKLSAgICAgICAgICAgIGFbMF1bMF0gPSAx
OwotICAgICAgICAgICAgYVswXVsxXSA9IDI7Ci0gICAgICAgICAgICBhWzFdWzBdID0gMzsKLSAg
ICAgICAgICAgIGFbMV1bMV0gPSA0OwotICAgICAgICAgICAgZmxvYXQyeDIgYjsKLSAgICAgICAg
ICAgIGJbMF1bMF0gPSA1OwotICAgICAgICAgICAgYlswXVsxXSA9IDY7Ci0gICAgICAgICAgICBi
WzFdWzBdID0gNzsKLSAgICAgICAgICAgIGJbMV1bMV0gPSA4OwotICAgICAgICAgICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1aW50IGogPSAw
OyBqIDwgMjsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFbaV1bal0gKz0gNDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYSA9PSBiOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vNSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0MngyIGE7Ci0gICAgICAgICAgICBhWzBdID0gZmxvYXQyKDEsIDIpOwotICAgICAgICAgICAg
YVsxXSA9IGZsb2F0MigzLCA0KTsKLSAgICAgICAgICAgIGZsb2F0MngyIGI7Ci0gICAgICAgICAg
ICBiWzBdWzBdID0gMTsKLSAgICAgICAgICAgIGJbMF1bMV0gPSAyOwotICAgICAgICAgICAgYlsx
XVswXSA9IDM7Ci0gICAgICAgICAgICBiWzFdWzFdID0gNDsKLSAgICAgICAgICAgIHJldHVybiBh
ID09IGI7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBmb282KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZmxvYXQyeDIgYTsKLSAgICAgICAgICAgIGFbMF1bMF0gPSAxOwotICAgICAgICAgICAg
YVswXVsxXSA9IDI7Ci0gICAgICAgICAgICBhWzFdWzBdID0gMzsKLSAgICAgICAgICAgIGFbMV1b
MV0gPSA0OwotICAgICAgICAgICAgZmxvYXQyeDIgYjsKLSAgICAgICAgICAgIGJbMF1bMF0gPSA1
OwotICAgICAgICAgICAgYlswXVsxXSA9IDEwOwotICAgICAgICAgICAgYlsxXVswXSA9IDE4Owot
ICAgICAgICAgICAgYlsxXVsxXSA9IDI0OwotICAgICAgICAgICAgYVswXSAqPSA1OwotICAgICAg
ICAgICAgYVsxXSAqPSA2OwotICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgfQot
ICAgICAgICBmbG9hdCBmb283KCkKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQyeDMgYSA9
IGZsb2F0MngzKGZsb2F0MygzLCA0LCA1KSwgZmxvYXQzKDYsIDcsIDgpKTsKLSAgICAgICAgICAg
IHJldHVybiBhWzBdWzJdOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDEpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbXSksIDYp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzMiLCBbXSksIDApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihw
cm9ncmFtLCAgImZvbzQiLCBbXSksIHRydWUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbzUiLCBbXSksIHRydWUpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbzYiLCBbXSksIHRydWUp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzciLCBbXSksIDUpOwotfTsKLQotd2hsc2xUZXN0cy5tYXRyaXhNdWx0aXBsaWNhdGlvbiA9IGFz
eW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgZmxvYXQyeDQgbXVsdGlw
bHkoZmxvYXQyeDMgeCwgZmxvYXQzeDQgeSkgewotICAgICAgICAgICAgLy8gQ29waWVkIGFuZCBw
YXN0ZWQgZnJvbSB0aGUgc3RhbmRhcmQgbGlicmFyeQotICAgICAgICAgICAgZmxvYXQyeDQgcmVz
dWx0OwotICAgICAgICAgICAgcmVzdWx0WzBdWzBdID0gMDsKLSAgICAgICAgICAgIHJlc3VsdFsw
XVswXSArPSB4WzBdWzBdICogeVswXVswXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVswXSArPSB4
WzBdWzFdICogeVsxXVswXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVswXSArPSB4WzBdWzJdICog
eVsyXVswXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVsxXSA9IDA7Ci0gICAgICAgICAgICByZXN1
bHRbMF1bMV0gKz0geFswXVswXSAqIHlbMF1bMV07Ci0gICAgICAgICAgICByZXN1bHRbMF1bMV0g
Kz0geFswXVsxXSAqIHlbMV1bMV07Ci0gICAgICAgICAgICByZXN1bHRbMF1bMV0gKz0geFswXVsy
XSAqIHlbMl1bMV07Ci0gICAgICAgICAgICByZXN1bHRbMF1bMl0gPSAwOwotICAgICAgICAgICAg
cmVzdWx0WzBdWzJdICs9IHhbMF1bMF0gKiB5WzBdWzJdOwotICAgICAgICAgICAgcmVzdWx0WzBd
WzJdICs9IHhbMF1bMV0gKiB5WzFdWzJdOwotICAgICAgICAgICAgcmVzdWx0WzBdWzJdICs9IHhb
MF1bMl0gKiB5WzJdWzJdOwotICAgICAgICAgICAgcmVzdWx0WzBdWzNdID0gMDsKLSAgICAgICAg
ICAgIHJlc3VsdFswXVszXSArPSB4WzBdWzBdICogeVswXVszXTsKLSAgICAgICAgICAgIHJlc3Vs
dFswXVszXSArPSB4WzBdWzFdICogeVsxXVszXTsKLSAgICAgICAgICAgIHJlc3VsdFswXVszXSAr
PSB4WzBdWzJdICogeVsyXVszXTsKLSAgICAgICAgICAgIHJlc3VsdFsxXVswXSA9IDA7Ci0gICAg
ICAgICAgICByZXN1bHRbMV1bMF0gKz0geFsxXVswXSAqIHlbMF1bMF07Ci0gICAgICAgICAgICBy
ZXN1bHRbMV1bMF0gKz0geFsxXVsxXSAqIHlbMV1bMF07Ci0gICAgICAgICAgICByZXN1bHRbMV1b
MF0gKz0geFsxXVsyXSAqIHlbMl1bMF07Ci0gICAgICAgICAgICByZXN1bHRbMV1bMV0gPSAwOwot
ICAgICAgICAgICAgcmVzdWx0WzFdWzFdICs9IHhbMV1bMF0gKiB5WzBdWzFdOwotICAgICAgICAg
ICAgcmVzdWx0WzFdWzFdICs9IHhbMV1bMV0gKiB5WzFdWzFdOwotICAgICAgICAgICAgcmVzdWx0
WzFdWzFdICs9IHhbMV1bMl0gKiB5WzJdWzFdOwotICAgICAgICAgICAgcmVzdWx0WzFdWzJdID0g
MDsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsyXSArPSB4WzFdWzBdICogeVswXVsyXTsKLSAgICAg
ICAgICAgIHJlc3VsdFsxXVsyXSArPSB4WzFdWzFdICogeVsxXVsyXTsKLSAgICAgICAgICAgIHJl
c3VsdFsxXVsyXSArPSB4WzFdWzJdICogeVsyXVsyXTsKLSAgICAgICAgICAgIHJlc3VsdFsxXVsz
XSA9IDA7Ci0gICAgICAgICAgICByZXN1bHRbMV1bM10gKz0geFsxXVswXSAqIHlbMF1bM107Ci0g
ICAgICAgICAgICByZXN1bHRbMV1bM10gKz0geFsxXVsxXSAqIHlbMV1bM107Ci0gICAgICAgICAg
ICByZXN1bHRbMV1bM10gKz0geFsxXVsyXSAqIHlbMl1bM107Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0MngzIG1hdHJpeDEoKSB7Ci0gICAgICAg
ICAgICBmbG9hdDJ4MyB4OwotICAgICAgICAgICAgeFswXVswXSA9IDI7Ci0gICAgICAgICAgICB4
WzBdWzFdID0gMzsKLSAgICAgICAgICAgIHhbMF1bMl0gPSA1OwotICAgICAgICAgICAgeFsxXVsw
XSA9IDc7Ci0gICAgICAgICAgICB4WzFdWzFdID0gMTE7Ci0gICAgICAgICAgICB4WzFdWzJdID0g
MTM7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgICAgICBmbG9hdDN4NCBt
YXRyaXgyKCkgewotICAgICAgICAgICAgZmxvYXQzeDQgeTsKLSAgICAgICAgICAgIHlbMF1bMF0g
PSAxNzsKLSAgICAgICAgICAgIHlbMF1bMV0gPSAxOTsKLSAgICAgICAgICAgIHlbMF1bMl0gPSAy
MzsKLSAgICAgICAgICAgIHlbMF1bM10gPSAyOTsKLSAgICAgICAgICAgIHlbMV1bMF0gPSAzMTsK
LSAgICAgICAgICAgIHlbMV1bMV0gPSAzNzsKLSAgICAgICAgICAgIHlbMV1bMl0gPSA0MTsKLSAg
ICAgICAgICAgIHlbMV1bM10gPSA0MzsKLSAgICAgICAgICAgIHlbMl1bMF0gPSA0NzsKLSAgICAg
ICAgICAgIHlbMl1bMV0gPSA1MzsKLSAgICAgICAgICAgIHlbMl1bMl0gPSA1OTsKLSAgICAgICAg
ICAgIHlbMl1bM10gPSA2MTsKLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0IGZvbzAwKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEo
KSwgbWF0cml4MigpKVswXVswXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28wMSgpIHsK
LSAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMF1bMV07
Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMDIoKSB7Ci0gICAgICAgICAgICByZXR1cm4g
bXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzBdWzJdOwotICAgICAgICB9Ci0gICAgICAg
IGZsb2F0IGZvbzAzKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwg
bWF0cml4MigpKVswXVszXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMCgpIHsKLSAg
ICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bMF07Ci0g
ICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMTEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbXVs
dGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzFdOwotICAgICAgICB9Ci0gICAgICAgIGZs
b2F0IGZvbzEyKCkgewotICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0
cml4MigpKVsxXVsyXTsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMygpIHsKLSAgICAg
ICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bM107Ci0gICAg
ICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzAwIiwgW10pLCAxNyAqIDIgKyAzMSAqIDMgKyA0NyAqIDUpOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzAxIiwgW10p
LCAxOSAqIDIgKyAzNyAqIDMgKyA1MyAqIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzAyIiwgW10pLCAyMyAqIDIgKyA0MSAqIDMgKyA1
OSAqIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbzAzIiwgW10pLCAyOSAqIDIgKyA0MyAqIDMgKyA2MSAqIDUpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEwIiwgW10pLCAxNyAq
IDcgKyAzMSAqIDExICsgNDcgKiAxMyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxv
YXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTEiLCBbXSksIDE5ICogNyArIDM3ICogMTEgKyA1MyAq
IDEzKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28xMiIsIFtdKSwgMjMgKiA3ICsgNDEgKiAxMSArIDU5ICogMTMpOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEzIiwgW10pLCAyOSAq
IDcgKyA0MyAqIDExICsgNjEgKiAxMyk7Ci19OwotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwv
c2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1h
dHJpeC0yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtMi1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZm
NTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC0yLWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYXRyaXgtMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDU2Zjk1
MzNkZDVjN2ZlOTI3NjNkOGMxZGUxODJlYjM0ZWQ1N2M0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgt
Mi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotYm9v
bCBhbGxFcXVhbChmbG9hdDR4NCBtYXQsIGZsb2F0IHZhbHVlKQotewotICAgIGZvciAodWludCBp
ID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkgewotICAgICAgICBmb3IgKHVpbnQgaiA9IDA7IGogPCA0
OyBqID0gaiArIDEpIHsKLSAgICAgICAgICAgIGlmIChtYXRbaV1bal0gIT0gdmFsdWUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIGZpbGwodGhyZWFkIGZsb2F0NHg0KiBtYXQsIGZsb2F0IHZhbHVlKQot
ewotICAgIGZsb2F0NHg0IHJlc3VsdDsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0g
aSArIDEpIHsKLSAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZsb2F0NCh2YWx1ZSwgdmFsdWUsIHZh
bHVlLCB2YWx1ZSk7Ci0gICAgfQotICAgICptYXQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgZmlsbCh0aHJlYWQgZmxvYXQ0KiB2ZWMsIGZsb2F0IHZhbHVlKQotewotICAg
IGZsb2F0NCByZXN1bHQ7Ci0gICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7
Ci0gICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlOwotICAgIH0KLSAgICAqdmVjID0gcmVzdWx0Owot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGFsbEVxdWFsKGZsb2F0NCB2ZWMsIGZsb2F0IHZh
bHVlKQotewotICAgIGZvciAodWludCBpID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkgewotICAgICAg
ICBpZiAodmVjW2ldICE9IHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZv
aWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZs
b2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDR4NCBtYXQ7
Ci0gICAgZmlsbCgmbWF0LCAxKTsKLSAgICBpZiAoIWFsbEVxdWFsKG1hdCwgMSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0NCB2ZWM7Ci0gICAgZmlsbCgmdmVjLCAxKTsKLSAgICBpZiAo
IWFsbEVxdWFsKHZlYywgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0NCB2ZWMyID0g
bXVsKG1hdCwgdmVjKTsKLSAgICBpZiAoIWFsbEVxdWFsKHZlYzIsIDQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmbG9hdDR4NCBtYXQyID0gbXVsKG1hdCwgbWF0KTsKLSAgICBpZiAoIWFsbEVx
dWFsKG1hdDIsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXQyID0gbXVsKG1hdDIsIG1h
dDIpOwotICAgIGlmICghYWxsRXF1YWwobWF0MiwgNjQpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAy
LjA7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4OwotCi0gICAg
Y29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBi
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsK
LSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsx
XSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKLSAgICBidWZmZXJGbG9hdDMy
QXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7Ci0gICAgYnVmZmVy
RmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OwotICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBj
b25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0g
e2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29k
ZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7
Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21w
dXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlw
ZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3Vw
KTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goNCwgMSwgMSk7Ci0gICAgY29tcHV0
ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFu
ZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5k
QnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRz
QnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9h
dDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQK
LSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PSA2Ci0gICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRd
ID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9PSA2Ci0gICAgICAgICYm
IHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNwotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFy
cmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAg
dGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNo
SlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwot
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRl
c3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1leHBlY3RlZC50eHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5b3V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgy
ZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1tZW1vcnktbGF5b3V0LWV4cGVjdGVkLnR4dAorKysg
L2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlYjA4MTQ4NWM3YmQ1YjAyYzViNzM0ZTQwYjIyMTcyY2NkMjk2MTdmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29u
c3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQg
Y29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXQ0eDRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZs
b2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDR4NCByZXN1
bHQ7Ci0gICAgcmVzdWx0WzBdID0gZmxvYXQ0KDEsIDIsIDMsIDQpOwotICAgIHJlc3VsdFsxXSA9
IGZsb2F0NCg1LCA2LCA3LCA4KTsKLSAgICByZXN1bHRbMl0gPSBmbG9hdDQoOSwgMTAsIDExLCAx
Mik7Ci0gICAgcmVzdWx0WzNdID0gZmxvYXQ0KDEzLCAxNCwgMTUsIDE2KTsKLQotICAgIGZsb2F0
NHg0IG1hdCA9IGJ1ZmZlclswXTsKLQotICAgIGlmIChtYXRbMF1bMF0gPT0gMAotICAgICAgICAm
JiBtYXRbMF1bMV0gPT0gMQotICAgICAgICAmJiBtYXRbMF1bMl0gPT0gMgotICAgICAgICAmJiBt
YXRbMF1bM10gPT0gMwotCi0gICAgICAgICYmIG1hdFsxXVswXSA9PSA0Ci0gICAgICAgICYmIG1h
dFsxXVsxXSA9PSA1Ci0gICAgICAgICYmIG1hdFsxXVsyXSA9PSA2Ci0gICAgICAgICYmIG1hdFsx
XVszXSA9PSA3Ci0KLSAgICAgICAgJiYgbWF0WzJdWzBdID09IDgKLSAgICAgICAgJiYgbWF0WzJd
WzFdID09IDkKLSAgICAgICAgJiYgbWF0WzJdWzJdID09IDEwCi0gICAgICAgICYmIG1hdFsyXVsz
XSA9PSAxMQotCi0gICAgICAgICYmIG1hdFszXVswXSA9PSAxMgotICAgICAgICAmJiBtYXRbM11b
MV0gPT0gMTMKLSAgICAgICAgJiYgbWF0WzNdWzJdID09IDE0Ci0gICAgICAgICYmIG1hdFszXVsz
XSA9PSAxNSkgewotICAgICAgICBidWZmZXJbMF0gPSByZXN1bHQ7Ci0gICAgfQotfQotYDsKLQot
YXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0g
ZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBl
OiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5k
R3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQ
aXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVM
YXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRl
UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0g
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTY7Ci0KLSAgICBjb25zdCBidWZmZXJE
ZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVC
dWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIg
PSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVswXSA9IDA7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gNDsKLSAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbMl0gPSA4OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDEy
OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDE7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5
WzVdID0gNTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA5OwotICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVs3XSA9IDEzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDI7Ci0gICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzldID0gNjsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMTA7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVsxMl0gPSAzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSA3OwotICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVsxNF0gPSAxMTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTU7Ci0g
ICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRz
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07
Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVm
ZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJp
bmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3Qg
YmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVy
KCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwg
MCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlz
cGF0Y2goMiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRz
QXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNv
bnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1
ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT09IDEKLSAgICAgICAgJiYg
cmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PT0gNQotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFy
cmF5WzJdID09PSA5Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT09IDEzCi0K
LSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PT0gMgotICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzVdID09PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlb
Nl0gPT09IDEwCi0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT09IDE0Ci0KLSAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs4XSA9PT0gMwotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzldID09PSA3Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTBd
ID09PSAxMQotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzExXSA9PT0gMTUKLQotICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzEyXSA9PT0gNAotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzEzXSA9PT0gOAotICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzE0
XSA9PT0gMTIKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxNV0gPT09IDE2KQotICAg
ICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAgICBlbHNlCi0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwot
ICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKLX0KLXdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChk
ZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICAgICAgZmluaXNoSlNU
ZXN0KCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICB0ZXN0UGFzc2VkKCIiKTsKLSAg
ICBmaW5pc2hKU1Rlc3QoKTsKLX0pOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4Lmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbWF0cml4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRj
M2I2NWMyODZiM2Q1MTE5MDdjOGY5NzdjNmI3NzI4ZGUyMTUxZDcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1h
dHJpeC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1s
PgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAot
Ym9vbCBhbGxFcXVhbChmbG9hdDJ4MyBtYXQsIGZsb2F0IHZhbHVlKQotewotICAgIGZvciAodWlu
dCBpID0gMDsgaSA8IDI7IGkgPSBpICsgMSkgewotICAgICAgICBmb3IgKHVpbnQgaiA9IDA7IGog
PCAzOyBqID0gaiArIDEpIHsKLSAgICAgICAgICAgIGlmIChtYXRbaV1bal0gIT0gdmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21wdXRl
U2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVh
ZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewotICAgIGZsb2F0MngzIGZvbzsKLSAgICBpZiAo
IWFsbEVxdWFsKGZvbywgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvbyA9IGZvbyArIGZs
b2F0MngzKGZsb2F0MygxLjAsIDEuMCwgMS4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsKLSAg
ICBpZiAoIWFsbEVxdWFsKGZvbywgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvbyA9IGZv
byAqIGZsb2F0MngzKGZsb2F0Myg4LjUsIDguNSwgOC41KSwgZmxvYXQzKDguNSwgOC41LCA4LjUp
KTsKLSAgICBpZiAoIWFsbEVxdWFsKGZvbywgOC41KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9vID0gZm9vIC0gZmxvYXQyeDMoZmxvYXQzKDcuNSwgNy41LCA3LjUpLCBmbG9hdDMoNy41LCA3
LjUsIDcuNSkpOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCAxKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZm9vID0gZm9vICsgZmxvYXQyeDMoZmxvYXQzKDEuMCwgMS4wLCAxLjApLCBmbG9hdDMo
MS4wLCAxLjAsIDEuMCkpOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCAyKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9vID0gZm9vICsgZm9vOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCA0KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9vID0gZm9vICsgZm9vOwotICAgIGlmICghYWxsRXF1
YWwoZm9vLCA4KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQzIGZvdXJ0eVR3bzsKLSAg
ICBmb3VydHlUd28ueCA9IDQyOwotICAgIGZvdXJ0eVR3by55ID0gNDI7Ci0gICAgZm91cnR5VHdv
LnogPSA0MjsKLQotICAgIGZvb1swXSA9IGZvdXJ0eVR3bzsKLSAgICBmb29bMV0gPSBmb3VydHlU
d287Ci0gICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9vWzEzMzddID0gZm91cnR5VHdvOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZvb1sxMDAwMDAwXSA9IGZvdXJ0eVR3bzsKLSAgICBpZiAoIWFs
bEVxdWFsKGZvbywgNDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3VydHlUd29bMTMzN10g
PSA1MDsKLSAgICBmb29bMV0gPSBmb3VydHlUd287Ci0gICAgaWYgKCFhbGxFcXVhbChmb28sIDQy
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm91cnR5VHdvWzEwMDAwMDBdID0gNTA7Ci0gICAg
Zm9vWzFdID0gZm91cnR5VHdvOwotICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0MyBzaG91bGRCZVplcm8gPSBmb29bMTAwMDAwXTsKLSAgICBp
ZiAoc2hvdWxkQmVaZXJvLnggIT0gMCB8fCBzaG91bGRCZVplcm8ueSAhPSAwIHx8IHNob3VsZEJl
WmVyby56ICE9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmb3VydHlUd29bMTAwMDAw
MDBdICE9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngp
XSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsKLX0KLWA7Ci0KLWFzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAg
IGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3Ig
PSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2Ut
YnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAg
ICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5U
UkFOU0ZFUl9TUkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVm
ZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZm
ZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsw
XSA9IDE7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKLSAgICBidWZmZXJGbG9hdDMy
QXJyYXlbMl0gPSAzOwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7Ci0gICAgYnVmZmVy
RmxvYXQzMkFycmF5WzRdID0gNTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OwotICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0g
ODsKLSAgICBidWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlw
dG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJl
c3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBz
aXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNl
OiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91
dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBj
b25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0
b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVm
ZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0Vu
Y29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBh
c3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NF
bmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5kaXNwYXRjaCg0LCAxLCAxKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwot
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJl
c3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0g
ICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0Fy
cmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PSAyCi0gICAgICAg
ICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAotICAgICAgICAmJiByZXN1bHRzRmxvYXQz
MkFycmF5WzJdID09IDYKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSA9PSA4Ci0g
ICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gPT0gNQotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzVdID09IDYKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9
PSA3Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT0gOCkKLSAgICAgICAgdGVz
dFBhc3NlZCgiIik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1
bHRzQnVmZmVyLnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRC
YXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50
aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwot
ICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNo
SlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUtZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtZG90LWV4cHJlc3Npb24t
cnZhbHVlLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNh
MjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3Rl
ZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2Ny
aXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwot
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLW5lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZkNWYxOGMzNGQyMWZhYTUxY2ZhYTI3N2NhMWYwYzE2OGM3OGI0YTUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDE0NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+
Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLQotc3RydWN0IEJhciB7
Ci0gICAgZmxvYXQgc2hhZGU7Ci19Ci1zdHJ1Y3QgRm9vIHsKLSAgICBCYXIgYmFyOwotfQotCi1z
dHJ1Y3QgV3JhcHBlciB7Ci0gICAgRm9vIGZvbzsKLX0KLQotc3RydWN0IFZlcnRleE91dCB7Ci0g
ICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCk7Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBX
cmFwcGVyIHdyYXBwZXI7Ci0gICAgd3JhcHBlci5mb28uYmFyLnNoYWRlID0gc2hhZGU7Ci0gICAg
VmVydGV4T3V0IHJlc3VsdDsKLSAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBy
ZXN1bHQuc2hhZGUgPSB3cmFwcGVyLmZvby5iYXIuc2hhZGU7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwg
c2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNv
bnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3Qg
ZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdt
ZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3Ry
aXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1
bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBj
b2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4
dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNv
bG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQot
ICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCJ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDog
ImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUw
LCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRl
U2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmls
aXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3Jp
cHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExh
eW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVy
MEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAg
Y29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4
QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0g
LTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsK
LQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEx
XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1
XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07
Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9
IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJl
c291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZl
cjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcg
PSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRH
cm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmlu
ZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFz
LmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2
aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4
dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0
cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91
dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0g
ICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsg
Ly8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29u
c3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJl
c29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xl
YXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7
Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVw
dGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21t
YW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5k
ZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVu
ZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNo
KCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1p
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1n
ZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNl
KS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVP
bkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5l
c3RlZC1sb29wLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVk
LWxvb3AtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmODY5
YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVk
LWxvb3AtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd0JsYWNrU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzRiMTE4MTgyMzRmMTc3MTc4YzAzMDJjNzE1ZTg1YjBhOWUy
MzA2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDE3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNj
cmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZs
b2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24g
OiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4
T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRydWU7Ci0gICAgZm9yICh1aW50IGkgPSAwOyBp
IDwgMTA7IGkgPSBpICsgMSkgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
aWYgKGIpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHNoYWRlID0gMS4wOwotICAgICAgICB9Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAg
aWYgKGIpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSB3aGlsZSAoKHNoYWRlID0gMS4wLCBmYWxzZSkpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAg
ICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlICsgMS4wLCBmYWxzZSkpOwotCi0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlIC0gMS4wLCBmYWxz
ZSkpOwotCi0gICAgICAgIHdoaWxlICgoc2hhZGUgPSBzaGFkZSArIDEuMCwgdHJ1ZSkpIHsKLSAg
ICAgICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgLSAxLjAsIHRydWUp
KSB7Ci0gICAgICAgICAgICBpZiAoYikgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
MCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFk
ZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKLSAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwotCi0gICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwg
b2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBm
b3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0
cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0
dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07Ci0g
ICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNv
bnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwg
dmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5k
R3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0g
PSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOwotCi0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4w
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxOV0gPSAwLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOwotCi0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsK
LSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owot
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
LSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0g
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd0JsYWNr
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3Nj
cmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1udWxsLWFyZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVs
bC1hcmctZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmEwY2Yz
OWU4YTBmZWNjOGYzMzRhYzE4NjNhMWUzZGY4Y2E5ZmRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWFy
Zy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBwYXNz
TnVsbFRvUHRyTW9ub21vcnBoaWMgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1udWxsLWFyZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjJlZWFiMTIwZmVkYjQyYzA3MWY4
NzlhNGU3YTQwNzYwNTVmYTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtYXJnLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwzMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hh
cnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxl
PlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVz
cy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5wYXNz
TnVsbFRvUHRyTW9ub21vcnBoaWMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0g
YAotICAgICAgICBpbnQgZm9vKHRocmVhZCBpbnQqIHB0cikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICpwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJhcigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDAp
OwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgotCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1hcnJheS1yZWYuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWFycmF5LXJlZi5odG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwZDljOTQ2OTRjOGFmMTBkOWUwZmY5YjZjNGU4ZWFiNWE5ZmYzNTEy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1udWxsLWFycmF5LXJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
NjQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+
Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IGxvb3Bz
LjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmRlcmVmZXJlbmNlRGVmYXVs
dE51bGxBcnJheVJlZiA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAg
ICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJlYWQgaW50W10gcDsKLSAg
ICAgICAgICAgIHJldHVybiBwWzBdOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKLX0KLQot
d2hsc2xUZXN0cy5kZWZhdWx0SW5pdGlhbGl6ZWROdWxsQXJyYXlSZWZJbnRMaXRlcmFsID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gbnVsbDsKLSAgICAgICAgICAgIHJl
dHVybiBwWzBdOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKLX0KLQotd2hsc2xUZXN0cy5w
YXNzTnVsbFRvUHRyTW9ub21vcnBoaWNBcnJheVJlZiA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28odGhyZWFkIGludFtdIHB0cikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIHB0clswdV07Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJh
cigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7Ci0gICAgICAgIH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJiYXIiLCBbXSksIDApOwotfQotCi13aGxzbFRlc3RzLmxvYWROdWxsID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgc2lu
ayh0aHJlYWQgaW50KiB4KSB7IH0KLSAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBzaW5rKCpudWxs
KTsgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVy
ZWZlcmVuY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVy
ZWZlcmVuY2UtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgy
ZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxs
LWRlcmVmZXJlbmNlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAot
UEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMwYTdlYzU4Mzg2ZDNiMzViYjYyN2EyMGZlMTNk
OGFkNjM4MmQyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJv
ZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdHlwZWRlZiBGb28gPSB0aHJl
YWQgaW50KjsKLUZvbyBnZXROdWxsUHRyKCkKLXsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotc3Ry
dWN0IFhZWiB7Ci0gICAgZmxvYXQgeDsKLSAgICBmbG9hdCB5OwotICAgIGZsb2F0IHo7Ci19Ci0K
LVtudW10aHJlYWRzKDIsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNl
IGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7Ci0gICAgRm9vIHB0ciA9IG51bGw7Ci0gICAgKnB0ciA9IDQyOwotICAg
ICpnZXROdWxsUHRyKCkgPSA0MjsKLSAgICBpZiAoKnB0ciA9PSAwKSB7Ci0gICAgICAgIGlmIChw
dHIgPT0gZ2V0TnVsbFB0cigpKSB7Ci0gICAgICAgICAgICBpZiAoKmdldE51bGxQdHIoKSA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgdGhyZWFkIFhZWiogeHl6UHRyID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICBYWVogeHl6OwotICAgICAgICAgICAgICAgIHh5ei54ID0gMTsKLSAgICAgICAgICAg
ICAgICB4eXoueSA9IDE7Ci0gICAgICAgICAgICAgICAgeHl6LnogPSAxOwotICAgICAgICAgICAg
ICAgIGlmICh4eXoueiA9PSAxLjAgJiYgeHl6LnkgPT0gMS4wICYmIHh5ei56ID09IDEuMCkgewot
ICAgICAgICAgICAgICAgICAgICAqeHl6UHRyID0geHl6OwotICAgICAgICAgICAgICAgICAgICB4
eXogPSAqeHl6UHRyOwotICAgICAgICAgICAgICAgICAgICBpZiAoeHl6LnogPT0gMC4wICYmIHh5
ei55ID09IDAuMCAmJiB4eXoueiA9PSAwLjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgmKmdldE51bGxQdHIoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCYqKCYqZ2V0TnVsbFB0cigpKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElE
LngpXSAqIDIuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25z
dCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21w
dXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZl
ciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19Owot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29u
c3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA4OwotCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNG
RVJfU1JDfTsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRl
c2NyaXB0b3IpOwotICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1h
cFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQz
MkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5
WzJdID0gMzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVs0XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbNl0gPSA3OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0g
ICAgYnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRz
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07
Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVm
ZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJp
bmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3Qg
YmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsK
LQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVy
KCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwg
MCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlz
cGF0Y2goMiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRz
QXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNv
bnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1
ZmZlcik7Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAmJiBy
ZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVsyXSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAgICAg
ICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0
MzJBcnJheVs1XSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNwot
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQYXNz
ZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1
ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNE
ZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihm
dW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9
KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVz
dCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtb29iLWFjY2Vzcy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICsw
LDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09N
UExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3Mu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjI2Mjk0NmFjODNkZTA1MDk5ZDBlNDJkZmE4Y2U1MDgz
MDM1YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDk1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0
PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMiwgMSwgMSldCi1jb21wdXRl
IHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCks
IGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBidWZmZXJbMTMz
N10gPSAwLjA7Ci0gICAgYnVmZmVyWzQyNDI0MjQyXSA9IDAuMDsKLSAgICBpZiAoYnVmZmVyWzEw
MDAwMF0gPT0gMC4wKQotICAgICAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJb
dWludCh0aHJlYWRJRC54KV0gKiAyLjA7Ci19Ci1gOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChk
ZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCBjb21w
dXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hh
ZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdz
OiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07
Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91
dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OwotICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgY29t
cHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA4OwotCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JD
fTsKLSAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0
b3IpOwotICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKLSAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MzsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVs0XSA9IDU7Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKLSAgICBidWZmZXJGbG9h
dDMyQXJyYXlbNl0gPSA3OwotICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Ci0gICAgYnVm
ZmVyLnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVS
X0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKLSAgICBjb25zdCByZXN1bHRzQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7Ci0KLSAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmlu
ZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91
cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8v
IHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVz
dWx0c0J1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29t
bWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRC
aW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2go
MiwgMSwgMSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBj
b21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1
ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci0KLSAgICBjb25zdCByZXN1bHRzQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJl
c3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7
Ci0gICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gPT0gMgotICAgICAgICAmJiByZXN1bHRz
RmxvYXQzMkFycmF5WzFdID09IDQKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9
PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gPT0gOAotICAgICAgICAmJiBy
ZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUKLSAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVs1XSA9PSA2Ci0gICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gPT0gNwotICAgICAg
ICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzddID09IDgpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIp
OwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0c0J1ZmZlci51
bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgpOwot
fSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtb3BlcmF0b3Itb3ZlcmxvYWQtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwNDBmM2QxN2U2YmIxYjk4MDAwMTFhODNmYTQ5MDFjMjBlY2FlMzUw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQKKysrIC9kZXYv
bnVsbApAQCAtMSwzICswLDAgQEAKLQotUEFTUyBvcGVyYXRvcldpdGhvdXRVbmluZmVycmFibGVU
eXBlVmFyaWFibGUgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vcGVy
YXRvci1vdmVybG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9yLW92
ZXJsb2FkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZmNlYzY4MzNkZjJi
ZWEwMzNmMGNkZjU3YWRlZjFjM2Y3ZmE2YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9wZXJhdG9yLW92ZXJs
b2FkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9ImxvbmciPgotPHRpdGxlPk9wZXJhdG9yKyBvdmVybG9hZC48L3RpdGxlPgotPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMg
PSB7fTsKLQotd2hsc2xUZXN0cy5vcGVyYXRvcldpdGhvdXRVbmluZmVycmFibGVUeXBlVmFyaWFi
bGUgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBG
b28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgIH0KLSAgICAgICAgRm9vIG9wZXJhdG9y
KyhGb28gYSwgRm9vIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyByZXN1bHQ7Ci0gICAg
ICAgICAgICByZXN1bHQueCA9IGEueCArIGIueDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZv
byBhOwotICAgICAgICAgICAgYS54ID0gNjQ1OwotICAgICAgICAgICAgRm9vIGI7Ci0gICAgICAg
ICAgICBiLnggPSAtMzU7Ci0gICAgICAgICAgICByZXR1cm4gKGEgKyBiKS54OwotICAgICAgICB9
Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10pLCA2NDUgLSAzNSk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9z
Y3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3Zl
cmxvYWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJsb2FkLWV4
cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRiNjEwNmIwODY0ZTU2
ZDYzYTNhNTcwNDFmNDZmZmRiNjEwZjQ5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb3ZlcmxvYWQtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0KLVBBU1MgaW50T3ZlcmxvYWRS
ZXNvbHV0aW9uIAotUEFTUyBpbnRPdmVybG9hZFJlc29sdXRpb25SZXZlcnNlT3JkZXIgCi1QQVNT
IG5vdEVxdWFsc092ZXJsb2FkIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtb3ZlcmxvYWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVybG9hZC5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU0NzJiYjJhNGRlMTY3ZTkxN2VhOGU2
OWRiMWUxMzkzZDZlY2IyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVybG9hZC5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5P
dmVybG9hZC48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5pbnRPdmVybG9h
ZFJlc29sdXRpb24gPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBpbnQgZm9vKGludCkgeyByZXR1cm4gMTsgfQotICAgICAgICBpbnQgZm9vKHVpbnQpIHsgcmV0
dXJuIDI7IH0KLSAgICAgICAgaW50IGZvbyhmbG9hdCkgeyByZXR1cm4gMzsgfQotICAgICAgICBp
bnQgYmFyKCkgeyByZXR1cm4gZm9vKDQyKTsgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdKSwgMSk7Ci19Ci0KLXdobHNs
VGVzdHMuaW50T3ZlcmxvYWRSZXNvbHV0aW9uUmV2ZXJzZU9yZGVyID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhmbG9hdCkgeyByZXR1cm4gMzsg
fQotICAgICAgICBpbnQgZm9vKHVpbnQpIHsgcmV0dXJuIDI7IH0KLSAgICAgICAgaW50IGZvbyhp
bnQpIHsgcmV0dXJuIDE7IH0KLSAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7IH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJiYXIiLCBbXSksIDEpOwotfQotCi13aGxzbFRlc3RzLm5vdEVxdWFsc092ZXJsb2FkID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAg
IHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oRm9vLCBGb28pIHsg
cmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwot
PC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
b3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1vdmVycmlkZS1zdWJzY3JpcHQtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzODY0MDA5NWY3MzFlZjczYWFjZTllMzY4YWExMDYyYTYxZDBiYjc2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1vdmVycmlkZS1zdWJzY3JpcHQtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAg
LTEsNiArMCwwIEBACi0KLVBBU1Mgb3ZlcnJpZGVTdWJzY3JpcHRTdHJ1Y3QgCi1QQVNTIG92ZXJy
aWRlU3Vic2NyaXB0U3RydWN0QW5kRG9TdG9yZXMgCi1QQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3Ry
dWN0QW5kVXNlUG9pbnRlcnMgCi1QQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kVXNlUG9p
bnRlcnNJbmNvcnJlY3RseSAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW92ZXJyaWRlLXN1YnNjcmlwdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW92ZXJy
aWRlLXN1YnNjcmlwdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWY3YWFj
NzVkYjQ4NDI4ZWUyYmIyMDI2N2Y1OGMyNGM5ZGI1NjNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vdmVycmlk
ZS1zdWJzY3JpcHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qgb3ZlcnJpZGUgc3Vic2NyaXB0cy48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVj
dCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBG
b28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAgICAgfQot
ICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQgaW5k
ZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQotICAgICAgICAgICAg
ICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICZmb28tPnk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
ICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIGZvbzsK
LSAgICAgICAgICAgIGZvby54ID0gNDk4OwotICAgICAgICAgICAgZm9vLnkgPSAxOTsKLSAgICAg
ICAgICAgIHJldHVybiBmb29bMF0gKyBmb29bMV0gKiAzOwotICAgICAgICB9Ci0gICAgYDsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10p
LCA0OTggKyAxOSAqIDMpOwotfQotCi13aGxzbFRlc3RzLm92ZXJyaWRlU3Vic2NyaXB0U3RydWN0
QW5kRG9TdG9yZXMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAg
ICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgaW50IHk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZm9v
LCB1aW50IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAx
KQotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT55OwotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEZvbyBmb287Ci0gICAgICAgICAgICBmb29bMF0gPSA0OTg7Ci0gICAgICAgICAgICBmb29bMV0g
PSAxOTsKLSAgICAgICAgICAgIHJldHVybiBmb28ueCArIGZvby55OwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCA0OTggKyAxOSk7Ci19Ci0KLXdobHNsVGVzdHMub3ZlcnJpZGVTdWJzY3JpcHRTdHJ1
Y3RBbmRVc2VQb2ludGVycyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0g
ICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICBpbnQg
eTsKLSAgICAgICAgfQotICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9v
KiBmb28sIHVpbnQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAw
KQotICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT54OwotICAgICAgICAgICAgaWYgKGluZGV4
ID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPnk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKHRocmVhZCBGb28qIGZvbykKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICgqZm9vKVswXSArICgqZm9vKVsxXTsKLSAgICAg
ICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIGZvbzsK
LSAgICAgICAgICAgIGZvby54ID0gNDk4OwotICAgICAgICAgICAgZm9vLnkgPSAxOTsKLSAgICAg
ICAgICAgIHJldHVybiBiYXIoJmZvbyk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQ5OCArIDE5
KTsKLX0KLQotd2hsc2xUZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJz
SW5jb3JyZWN0bHkgPSBhc3luYyAoKSA9PgotewotICAgIGNoZWNrRmFpbCgKLSAgICAgICAgYAot
ICAgICAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0gICAgICAg
ICAgICAgICAgaW50IHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJlYWQgaW50KiBv
cGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmb28sIHVpbnQgaW5kZXgpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAmZm9vLT54OwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAxKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJmZvby0+eTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBiYXIodGhyZWFkIEZvbyogZm9vKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmb29bMF0gKyBmb29bMV07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBGb28gZm9vOwotICAgICAgICAgICAgICAgIGZvby54ID0gNDk4OwotICAgICAgICAgICAg
ICAgIGZvby55ID0gMTk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhcigmZm9vKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3Jp
cHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVz
LWVxdWFscy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVh
bHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmYwOWNjNjVm
NjIxNzE5OTVkNmRlNThmNjA4NTMyMjkyNjUzMWNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVzLWVxdWFs
cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotUEFTUyBwbHVz
RXF1YWxzIAotUEFTUyBwbHVzRXF1YWxzUmVzdWx0IAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtcGx1cy1lcXVhbHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1wbHVzLWVxdWFscy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmY1ZWNi
NDE0NjI5NThiZDg3NTk5Y2NiODUyMThjODk1ZTFmMzk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wbHVzLWVx
dWFscy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IG92ZXJyaWRlIHN1YnNjcmlwdHMuPC90aXRsZT4KLTxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxz
bFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMucGx1c0VxdWFscyA9IGFzeW5jICgpID0+Ci17Ci0g
ICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHggKz0gNDI7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAg
IGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOwotfQotCi13aGxzbFRlc3RzLnBsdXNFcXVh
bHNSZXN1bHQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBp
bnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geCArPSA0MjsKLSAg
ICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOwotfQotCi1ydW5UZXN0
cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtcG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmM1ZDhhYzU0ODI4YjBiYWQ4MDEwOTAzZTM1MWEz
ZGE3MjVlMDM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0
CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLVBBU1MgcG9pbnRlclRvUG9pbnRlciAK
LVBBU1MgcG9pbnRlclRvTWVtYmVyIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcG9pbnRlci1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
cG9pbnRlci1zcGVjLXRlc3RzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYy
YmIyOTdjODM4OTlkYzdmMjY2OTU1ZjFiMmRiY2Q2NjI5ZDhhNTkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBv
aW50ZXItc3BlYy10ZXN0cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCFE
T0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5l
c3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMucG9pbnRlclRvUG9pbnRl
ciA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28o
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQq
IHAgPSAmeDsKLSAgICAgICAgICAgIHRocmVhZCBpbnQqKiBwcCA9ICZwOwotICAgICAgICAgICAg
aW50KnRocmVhZCp0aHJlYWQgcXEgPSBwcDsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSAwOwot
ICAgICAgICAgICAgeCA9IDQyOwotICAgICAgICAgICAgKnAgPSA3NjsKLSAgICAgICAgICAgIHJl
c3VsdCArPSB4OwotICAgICAgICAgICAgKipwcCA9IDM5OwotICAgICAgICAgICAgcmVzdWx0ICs9
IHg7Ci0gICAgICAgICAgICAqKnFxID0gODM7Ci0gICAgICAgICAgICByZXN1bHQgKz0geDsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICBgOzsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3NiArIDM5
ICsgODMpOwotfQotCi13aGxzbFRlc3RzLnBvaW50ZXJUb01lbWJlciA9IGFzeW5jICgpID0+Ci17
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbygp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQzIHg7Ci0gICAgICAgICAgICAg
ICAgdGhyZWFkIGZsb2F0KiB5ID0gJnhbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwot
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbygp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQzeDMgeDsKLSAgICAgICAgICAg
ICAgICB0aHJlYWQgZmxvYXQzKiB5ID0gJnhbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGAp
OwotfQotCi1ydW5UZXN0cyh3aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgtcHJlZml4LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1wb3N0Zml4LXByZWZpeC1leHBlY3RlZC50eHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWJkZjEwZjYxYjRlODNlMWEyNjRjYjdj
OGE2ZjZhNTk0MWM0OWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXBvc3RmaXgtcHJlZml4LWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLQotUEFTUyBwcmVmaXhQbHVzUGx1cyAK
LVBBU1MgcHJlZml4UGx1c1BsdXNSZXN1bHQgCi1QQVNTIHBvc3RmaXhQbHVzUGx1cyAKLVBBU1Mg
cG9zdGZpeFBsdXNQbHVzUmVzdWx0IAotUEFTUyBwcmVmaXhNaW51c01pbnVzIAotUEFTUyBwcmVm
aXhNaW51c01pbnVzUmVzdWx0IAotUEFTUyBwb3N0Zml4TWludXNNaW51cyAKLVBBU1MgcG9zdGZp
eE1pbnVzTWludXNSZXN1bHQgCi1QQVNTIHBsdXNFcXVhbHMgCi1QQVNTIHBsdXNFcXVhbHNSZXN1
bHQgCi1QQVNTIG1pbnVzRXF1YWxzIAotUEFTUyBtaW51c0VxdWFsc1Jlc3VsdCAKLVBBU1MgdGlt
ZXNFcXVhbHMgCi1QQVNTIHRpbWVzRXF1YWxzUmVzdWx0IAotCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtcG9zdGZpeC1wcmVmaXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1wb3N0Zml4LXByZWZpeC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyODhkY2Y2NDhhZTI1MDg1Yjc0ZDg2OGVmYWYyZTMxNTMwMDUyNzdlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1wb3N0Zml4LXByZWZpeC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3Rp
dGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNv
bnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5wcmVmaXhQbHVzUGx1cyA9IGFzeW5j
ICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICsreDsKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAg
ICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDY1KTsKLX0KLQotd2hsc2xUZXN0cy5wcmVmaXhQ
bHVzUGx1c1Jlc3VsdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAg
ICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiArK3g7Ci0g
ICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjUpOwotfQotCi13aGxzbFRlc3RzLnBv
c3RmaXhQbHVzUGx1cyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAg
ICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAg
ICAgIHJldHVybiB4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDY1KTsKLX0K
LQotd2hsc2xUZXN0cy5wb3N0Zml4UGx1c1BsdXNSZXN1bHQgPSBhc3luYyAoKSA9PgotewotICAg
IGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4geCsrOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDY0
KTsKLX0KLQotd2hsc2xUZXN0cy5wcmVmaXhNaW51c01pbnVzID0gYXN5bmMgKCkgPT4KLXsKLSAg
ICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLS14OwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICBgOwot
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZUludCg2NCldKSwgNjMpOwotfQotCi13aGxzbFRlc3RzLnByZWZpeE1pbnVzTWludXNSZXN1
bHQgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9v
KGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLS14OwotICAgICAgICB9Ci0g
ICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNjQpXSksIDYzKTsKLX0KLQotd2hsc2xUZXN0cy5wb3N0Zml4TWludXNN
aW51cyA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBm
b28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHgtLTsKLSAgICAgICAgICAgIHJldHVy
biB4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjQpXSksIDYzKTsKLX0KLQotd2hsc2xU
ZXN0cy5wb3N0Zml4TWludXNNaW51c1Jlc3VsdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiB4LS07Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjQpOwotfQot
Ci13aGxzbFRlc3RzLnBsdXNFcXVhbHMgPSBhc3luYyAoKSA9PgotewotICAgIGxldCBwcm9ncmFt
ID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICB4ICs9
IDQyOwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgz
ODUpXSksIDM4NSArIDQyKTsKLX0KLQotd2hsc2xUZXN0cy5wbHVzRXF1YWxzUmVzdWx0ID0gYXN5
bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHggKz0gNDI7Ci0gICAgICAgIH0KLSAgICBg
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgzODUpXSksIDM4NSArIDQyKTsKLX0KLQotd2hsc2xUZXN0cy5taW51c0VxdWFs
cyA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhp
bnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgeCAtPSA0MjsKLSAgICAgICAgICAgIHJldHVy
biB4OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUgLSA0Mik7Ci19Ci0K
LXdobHNsVGVzdHMubWludXNFcXVhbHNSZXN1bHQgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiB4IC09IDQyOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0pLCAzODUg
LSA0Mik7Ci19Ci0KLXdobHNsVGVzdHMudGltZXNFcXVhbHMgPSBhc3luYyAoKSA9PiB7Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHggKj0gNDI7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDM4NSldKSwgMzg1ICogNDIpOwotfQotCi13aGxzbFRlc3RzLnRpbWVzRXF1YWxz
UmVzdWx0ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQg
Zm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4geCAqPSA0MjsKLSAgICAg
ICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICogNDIpOwotfQotCi1ydW5UZXN0cyh3
aGxzbFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgy
ZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXJlYWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFTUyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMtZXhwZWN0
ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgyZjkwNDU4YTU2ZjU0NWVi
MTljNzRkMjdmOGY2YWYyMzE4MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1o
aWdoLXpvbWJpZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1Q
QVNTIAotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13cml0ZS1o
aWdoLXpvbWJpZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWFkLW1vZGlmeS13
cml0ZS1oaWdoLXpvbWJpZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdh
NzU2MTNkYzg1ZjYyMjAxYTUyZWQ0MGMzMzMxOWUyOTRlNDA0Ni4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVh
ZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OSAr
MCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNv
bnN0IHNoYWRlclNvdXJjZSA9IGAKLWJvb2wgZmlsbCh0aHJlYWQgZmxvYXQ0eDQqIG1hdCwgZmxv
YXQgdmFsdWUpCi17Ci0gICAgZmxvYXQ0eDQgcmVzdWx0OwotICAgIGZvciAodWludCBpID0gMDsg
aSA8IDQ7IGkgPSBpICsgMSkgewotICAgICAgICAgICAgcmVzdWx0W2ldID0gZmxvYXQ0KHZhbHVl
LCB2YWx1ZSwgdmFsdWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgKm1hdCA9IHJlc3VsdDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29t
cHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0
aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDR4NCBtYXQ7Ci0gICAg
ZmlsbCgmbWF0LCA0KTsKLQotICAgIGZsb2F0NCB2ZWM7Ci0gICAgdmVjWzBdICs9IG1hdFswXVsw
XSArIG1hdFswXVsxXSArIG1hdFszXVsyXTsKLQotICAgIGZsb2F0IHZhbHVlID0gNDI7Ci0gICAg
dmFsdWUgKz0gdmVjWzBdOwotCi0gICAgbWF0WzBdWzBdICs9IChtYXRbMF1bMF0gKz0gKHZhbHVl
ICs9IG1hdFswXVswXSkpOwotCi0gICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gbWF0WzBd
WzBdOwotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OwotCi0gICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKLQotICAg
IGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Ci0gICAgY29uc3QgYnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCBidWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3Qg
YnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7
Ci0gICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKLSAgICBidWZmZXIudW5tYXAoKTsKLQot
ICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRp
bmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKLSAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKLSAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tbWFuZEVu
Y29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb21tYW5k
RW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBz
aXplKTsKLSAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
bkNvbXB1dGVQYXNzKCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1
dGVQaXBlbGluZSk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKLSAgICBj
b21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKLQotICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJl
c3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7Ci0gICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0
c0Zsb2F0MzJBcnJheVswXSA9PSA2NikKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZWxz
ZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Ci19
Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZh
aWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24o
KSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXJlYWQtbW9kaWZ5LXdyaXRlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1t
b2RpZnktd3JpdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmMWIxMWZi
MzFhMTFmYmYxOGRiNzlkOWEzYTcwNTM5NTcwZDhhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVhZC1tb2Rp
Znktd3JpdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9
IGAKLVtudW10aHJlYWRzKDEsIDEsIDEpXQotY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2
aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSkgewotICAgIGJ1ZmZlclswXSA9IDE7Ci0g
ICAgYnVmZmVyWzFdID0gYnVmZmVyWzBdKys7Ci0KLSAgICBidWZmZXJbMl0gPSAxOwotICAgIGJ1
ZmZlclszXSA9ICsrYnVmZmVyWzJdOwotCi0gICAgYnVmZmVyWzRdID0gMTsKLSAgICBidWZmZXJb
NF0gKz0gNTsKLQotICAgIGJ1ZmZlcls1XSA9IDE7Ci0gICAgYnVmZmVyWzVdICo9IDc7Ci0KLSAg
ICBpbnQgdG90YWwgPSAxNDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpICs9IDIpIHsK
LSAgICAgICAgdG90YWwgKz0gaTsKLSAgICB9Ci0gICAgYnVmZmVyWzZdID0gdG90YWw7Ci0KLSAg
ICB0b3RhbCA9IDE0OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAg
ICB0b3RhbCArPSBpOwotICAgIH0KLSAgICBidWZmZXJbN10gPSB0b3RhbDsKLX0KLWA7Ci0KLWFz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewotICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0
b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7Ci0gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRl
ci5yZXF1ZXN0RGV2aWNlKCk7Ci0KLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdl
LWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0g
ICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShj
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHNpemUgPSBJbnQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogODsKLQotICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5NQVBf
UkVBRH07Ci0gICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNj
cmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBidWZmZXIsIHNp
emV9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNv
ZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEp
OwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0g
YXdhaXQgYnVmZmVyLm1hcFJlYWRBc3luYygpOwotICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgSW50
MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChyZXN1bHRzWzBdID09IDIKLSAg
ICAgICAgJiYgcmVzdWx0c1sxXSA9PSAxCi0gICAgICAgICYmIHJlc3VsdHNbMl0gPT0gMgotICAg
ICAgICAmJiByZXN1bHRzWzNdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c1s0XSA9PSA2Ci0gICAg
ICAgICYmIHJlc3VsdHNbNV0gPT0gNwotICAgICAgICAmJiByZXN1bHRzWzZdID09IDM0Ci0gICAg
ICAgICYmIHJlc3VsdHNbN10gPT0gNTkpCi0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGVs
c2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgYnVmZmVyLnVubWFwKCk7Ci19Ci13aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgi
Iik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0g
ICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9i
b2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlY3Vy
c2l2ZS1zdHJ1Y3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZWN1
cnNpdmUtc3RydWN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRlYjUzNDhkMDMzYzAzNDg4OGUxYmIxMDM3ZmNkNGUxMDNkM2ExOTkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXJlY3Vyc2l2ZS1zdHJ1Y3RzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAs
MCBAQAotCi1QQVNTIG11dHVhbGx5UmVjdXJzaXZlU3RydWN0IAotUEFTUyBtdXR1YWxseVJlY3Vy
c2l2ZVN0cnVjdFdpdGhQb2ludGVyc0Jyb2tlbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXJlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcmVjdXJzaXZlLXN0cnVjdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODJmMDhkNGFlOTk4YzVhYThiMTZlNmIyNTAxMDQ3Y2ZiYzgzNGYwYS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtcmVjdXJzaXZlLXN0cnVjdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAK
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgot
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5tdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdCA9IGFz
eW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsKLSAgICAgICAgICAgICAgICBCYXIgYmFyOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc3RydWN0IEJhciB7Ci0gICAgICAgICAgICAgICAgRm9vIGZvbzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13aGxzbFRlc3RzLm11dHVhbGx5
UmVjdXJzaXZlU3RydWN0V2l0aFBvaW50ZXJzQnJva2VuID0gYXN5bmMgKCkgPT4KLXsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICB0aHJlYWQg
QmFyKiBiYXI7Ci0gICAgICAgICAgICBpbnQgZm9vOwotICAgICAgICB9Ci0gICAgICAgIHN0cnVj
dCBCYXIgewotICAgICAgICAgICAgdGhyZWFkIEZvbyogZm9vOwotICAgICAgICAgICAgaW50IGJh
cjsKLSAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Rm9vIGZvbzsKLSAgICAgICAgICAgIEJhciBiYXI7Ci0gICAgICAgICAgICBmb28uZm9vID0gNTY0
OwotICAgICAgICAgICAgYmFyLmJhciA9IDUzOwotICAgICAgICAgICAgcmV0dXJuIGZvby5iYXIt
PmJhciAtIGJhci5mb28tPmZvbzsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMCk7Ci19Ci0KLXJ1
blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFyaWFibGUtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFyaWFibGUtZXhwZWN0
ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1M2EyNjU1MzIxZjMzM2E1
M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2FsLXZhcmlh
YmxlLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFy
aWFibGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tbG9jYWwtdmFyaWFi
bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzZTM1NjdiNjhjNmQ2Y2Vk
NDYzZjc3NjdjYTZhMzhmMTg1NTBlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLWxvY2FsLXZhcmlh
YmxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBg
Ci1zdHJ1Y3QgVmVydGV4T3V0IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsK
LSAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKLX0KLQotZmxvYXQgY29weShmbG9hdCB2
KSB7Ci0gICAgZmxvYXQgbG9jYWwgPSB2OwotICAgIHJldHVybiBsb2NhbDsKLX0KLQotdmVydGV4
IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBm
bG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAg
ICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSBjb3B5KHNo
YWRlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAg
cmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRl
ckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKLSAgICBjb25zdCBhdHRyaWJ1dGUxID0g
e3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAgIGNv
bnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3QgaW5w
dXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVy
In1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0g
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJh
c3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJ
bnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41Owot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gMS4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwotCi0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10g
PSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51bm1h
cCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsK
LSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwot
Ci0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owot
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAw
KTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0pOwotfSwgZnVuY3Rp
b24oKSB7Ci0gICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2Fu
dmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tc3BlYy10ZXN0cy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2RlN2JhZTMxYjc2YzA0ODYyMDQzMGRl
Njc0ZWU2YmFjNzRjNDc5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tc3BlYy10ZXN0cy1leHBlY3Rl
ZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0KLVBBU1MgcmV0dXJuSWYgCi1Q
QVNTIHJldHVyblJlZmVyZW5jZVRvU2FtZVBhcmFtZXRlciAKLVBBU1MgcmV0dXJuUmVmZXJlbmNl
VG9QYXJhbWV0ZXJXaXRoRGlmZmVyZW50RnVuY3Rpb25zIAotUEFTUyByZXR1cm5SZWZlcmVuY2VU
b1BhcmFtZXRlciAKLVBBU1MgcmV0dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlV2l0aE5lc3Rp
bmcgCi1QQVNTIHJldHVyblJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZSAKLVBBU1MgcmV0dXJuSW50
TGl0ZXJhbFVpbnQgCi1QQVNTIHJldHVybkludExpdGVyYWxGbG9hdCAKLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTEyYzMwOWZjN2E2MWRjMTQzZjAwZjk4ZmUxZTkyMDE2YTZmNDJjYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDIzNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYt
OD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgdGhl
IFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3Qt
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0
cy5yZXR1cm5JZiA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAg
IGAKLSAgICAgICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaW50IHkgPSA2OwotICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICBgKTsKLQotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAg
ICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeSA9
IDY7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB5
ID0gODsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9vKGludCB4
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAg
ICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHkgPSA4OwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci0KLSAgICBsZXQgcHJvZ3JhbSA9
IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkg
PSA2OwotICAgICAgICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgIHJldHVybiA4
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzKV0pLCAxMCk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDQpXSksIDEwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNSldKSwgMTApOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2KV0pLCAxMCk7Ci0gICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KDcpXSksIDgpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCAxMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDEwKTsKLQot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IGZvbyhpbnQg
eCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAg
ICAgICAgaWYgKHggPT0gNykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gODsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gOSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMTA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLSAg
ICBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHkgPSA5
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIH0KLSAgICBg
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgzKV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNCldKSwgOSk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDkp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCg2KV0pLCA5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyldKSwgOCk7Ci0gICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDgpXSksIDkp
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCg5KV0pLCA5KTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIGludCBmb28oaW50IHgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aW50IHkgPSA2OwotICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDEwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gMTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpbnQgeSA9IDY7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gNykKLSAg
ICAgICAgICAgICAgICAgICAgaW50IHkgPSA4OwotICAgICAgICAgICAgICAgIHJldHVybiB5Owot
ICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX07Ci0KLXdobHNsVGVzdHMucmV0dXJuUmVmZXJl
bmNlVG9TYW1lUGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAot
ICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBsdXMoYmFy
KDUpLCBiYXIoNykpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHBsdXModGhyZWFkIGludCog
eCwgdGhyZWFkIGludCogeSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICp4ICsgKnk7
Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50KiBiYXIoaW50IHgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAmeDsKLSAgICAgICAgfQotICAgIGA7Ci0KLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxNCk7Ci19
OwotCi13aGxzbFRlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyV2l0aERpZmZlcmVudEZ1
bmN0aW9ucyA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgaW50
IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqYmFyKDEwKSArICpiYXooMjAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gJng7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50
KiBiYXooaW50IHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmeTsKLSAgICAgICAg
fQotICAgIGA7Ci0KLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCAzMCk7Ci19OwotCi13aGxzbFRlc3RzLnJldHVyblJlZmVyZW5jZVRv
UGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBp
bnQgZm9vKGJvb2wgY29uZGl0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKmJh
cihjb25kaXRpb24sIDEsIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkIGludCogYmFy
KGJvb2wgY29uZGl0aW9uLCBpbnQgYSwgaW50IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBjb25kaXRpb24gPyAmYSA6ICZiOwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wo
dHJ1ZSldKSwgMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKSwgMik7Ci19OwotCi13aGxzbFRlc3RzLnJl
dHVyblJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZVdpdGhOZXN0aW5nID0gYXN5bmMgKCkgPT4gewot
ICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICpiYXIoKSArICpiYXooKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVh
ZCBpbnQqIGJhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBhID0gMjA7Ci0gICAgICAg
ICAgICByZXR1cm4gJmE7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJlYWQgaW50KiBiYXooKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYSA9IDIyOwotICAgICAgICAgICAgcmV0dXJuICZh
OwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKLX07Ci0KLXdobHNsVGVzdHMucmV0dXJu
UmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFt
ID0gYAotICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpi
YXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZCBpbnQqIGJhcigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBhID0gNDI7Ci0gICAgICAgICAgICByZXR1cm4gJmE7Ci0gICAgICAg
IH0KLSAgICBgOwotCi0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRlcmFs
VWludCA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9ICJ1aW50IGZvbygpIHsgcmV0
dXJuIDQyOyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5yZXR1cm5JbnRMaXRlcmFs
RmxvYXQgPSBhc3luYyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSAiZmxvYXQgZm9vKCkgeyBy
ZXR1cm4gNDI7IH0iOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08
L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1z
ZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c2V0dGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMWYyZDZjMzQxYWI1MGI2NmYyYjlhZTc4NDI3YTcyNzFiMDY4OThhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1zZXR0ZXItc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4
ICswLDAgQEAKLQotUEFTUyBzZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgCi1QQVNTIHNldHRlcldpdGhO
b0dldHRlck92ZXJsb2FkIAotUEFTUyBzZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkIAot
UEFTUyByZWN1cnNpdmVTZXR0ZXJzIAotUEFTUyBsb25lU2V0dGVyIAotUEFTUyBsb25lU2V0dGVy
UG9pbnRlciAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNldHRlci1z
cGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVz
dHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYwMGQ2YTdjODFjZDQ0ZDgy
NDk0NzExMmY2MDc1NDc5ZWFkNjQ5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2V0dGVyLXNwZWMtdGVzdHMu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9
ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQot
d2hsc2xUZXN0cy5zZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgPSBhc3luYyAoKSA9PgotewotICAgIGNv
bnN0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBvcGVyYXRvci5mb28oaW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gNTsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0b3Iu
Zm9vPShpbnQsIGludCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAgICAg
ICAgfQotICAgICAgICBpbnQgZm9vKCkgewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAg
ICB4LmZvbyA9IDQyOwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICAgICAg
aW50IGJhcigpIHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgcmV0dXJuIHguZm9v
OwotICAgICAgICB9Ci0gICAgYDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDU0Myk7Ci0gICAgLy9hc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCA1KTsKLX0KLQotd2hsc2xU
ZXN0cy5zZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdh
aXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAg
ICAgICAgICAgc3RydWN0IEJhciB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28oRm9v
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1MzQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBCYXIgb3BlcmF0b3IuZm9vPShCYXIsIGludCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IGApOwotICAgICAgICAKLX0KLQotd2hsc2xUZXN0cy5zZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9h
ZEZpeGVkID0gYXN5bmMgKCkgPT4KLXsKLSAgICBjb25zdCBwcm9ncmFtID1gCi0gICAgICAgIHN0
cnVjdCBCYXIgeyB9Ci0gICAgICAgIGludCBvcGVyYXRvci5mb28oQmFyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gNTM0OwotICAgICAgICB9Ci0gICAgICAgIEJhciBvcGVyYXRvci5m
b289KEJhciwgaW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQmFyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50IGZvbygpIHsKLSAgICAgICAgICAgIEJhciBiYXI7Ci0gICAgICAg
ICAgICByZXR1cm4gYmFyLmZvbzsKLSAgICAgICAgfQotICAgICAgICBpbnQgYmFyKCkgewotICAg
ICAgICAgICAgQmFyIGJhcjsKLSAgICAgICAgICAgIGJhci5mb28gPSA1MjsKLSAgICAgICAgICAg
IHJldHVybiBiYXIuZm9vOwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA1MzQpOwotICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDUzNCk7
Ci19Ci0KLXdobHNsVGVzdHMucmVjdXJzaXZlU2V0dGVycyA9IGFzeW5jICgpID0+Ci17Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50IHg7
Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAgICAgfQotICAgICAgICBzdHJ1Y3QgQmFyIHsKLSAg
ICAgICAgICAgIGludCBhOwotICAgICAgICAgICAgaW50IGI7Ci0gICAgICAgIH0KLSAgICAgICAg
aW50IG9wZXJhdG9yLmMoQmFyIGJhcikgeyByZXR1cm4gYmFyLmE7IH0KLSAgICAgICAgQmFyIG9w
ZXJhdG9yLmJhcihGb28gZm9vKSB7IEJhciBiOyBiLmEgPSBmb28ueDsgYi5iID0gZm9vLnk7IHJl
dHVybiBiOyB9Ci0gICAgICAgIEJhciBvcGVyYXRvci5jPShCYXIgYmFyLCBpbnQgbmV3dmFsKSB7
IGJhci5hID0gbmV3dmFsOyByZXR1cm4gYmFyOyB9Ci0gICAgICAgIEZvbyBvcGVyYXRvci5iYXI9
KEZvbyBmb28sIEJhciBuZXd2YWwpIHsgZm9vLnggPSBuZXd2YWwuYTsgZm9vLnkgPSBuZXd2YWwu
YjsgcmV0dXJuIGZvbzsgfQotICAgICAgICBpbnQgZigpIHsKLSAgICAgICAgICAgIEZvbyBmb287
Ci0gICAgICAgICAgICBmb28ueCA9IGZvby55ID0gMzsKLSAgICAgICAgICAgIGZvby5iYXIuYyA9
IDg7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLngqMTAgKyBmb28ueTsKLSAgICAgICAgfQotICAg
IGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImYi
LCBbXSksIDgzKTsKLX0KLQotd2hsc2xUZXN0cy5sb25lU2V0dGVyID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRv
ci5mb289KGludCwgaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1
NDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLQotd2hsc2xUZXN0
cy5sb25lU2V0dGVyUG9pbnRlciA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWls
KAotICAgICAgICBgCi0gICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvci5mb289KHRocmVh
ZCBpbnQqIHB0ciwgaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBw
dHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLQotcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRF
U1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBs
ZS1hcnJheXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmY5MTgyOTYzOTI5ZjExMGVmZGJi
YWUwNDk5NTdkOWU4YTNkN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJheXMuaHRtbAorKysg
L2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhl
YWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4K
LTxib2R5PgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXZvaWQgZmlsbCh0aHJl
YWQgaW50W10gYXJyYXksIGludCB2YWx1ZSkgewotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGFycmF5W2ldID0gdmFsdWU7Ci0gICAgfQotfQot
Ci1bbnVtdGhyZWFkcygxLCAxLCAxKV0KLWNvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3Bh
dGNoVGhyZWFkSUQpIHsKLSAgICBpbnRbNDJdIGFycmF5OwotICAgIGlmIChhcnJheS5sZW5ndGgg
IT0gNDIpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhcnJheVswXSA9IDUxNzsKLSAgICBpZiAoYXJyYXlbMF0gIT0g
NTE3KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0aHJlYWQgaW50W10gYXJyYXlQdHIgPSBAYXJy
YXk7Ci0gICAgaWYgKGFycmF5UHRyLmxlbmd0aCAhPSA0MikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50WzQyXSBhcnJheTI7Ci0gICAgYXJyYXkyID0gYXJyYXk7Ci0gICAgaWYgKGFycmF5Mi5s
ZW5ndGggIT0gNDIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoYXJyYXkyWzBdICE9IDUxNykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbChhcnJheVB0ciwgMTMzNyk7Ci0gICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgYXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFycmF5
UHRyW2ldICE9IDEzMzcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhcnJheVtp
XSAhPSAxMzM3KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChhcnJheTJb
MF0gIT0gNTE3KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVpbnQgaSA9IDE7IGkgPCBhcnJheTIubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKGFycmF5MltpXSAhPSAwKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3Qg
Y29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0
ZVNoYWRlciJ9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIi
fV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9T
UkN9OwotICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3Jp
cHRvcik7Ci0gICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3Jp
dGVBc3luYygpOwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5
KGJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOwotICAg
IGJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0g
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9Owot
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQotICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAs
IHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIu
c2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3Bh
dGNoKDEsIDEsIDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0Fy
cmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBsZXQg
cmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwot
ICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBhc3NlZCgi
Iik7Ci0gICAgZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVy
LnVubWFwKCk7Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0Rldmlj
ZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0
aW9uKCkgewotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwot
fSwgZnVuY3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7
Ci19KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXNpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMjc5Yzk4ZTRjNzRjMGI4Y2MwNjY2ZDMzZGE4N2Jk
ODE3NzUwZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi1QQVNTIHNpbXBsZUdldHRlciAKLVBB
U1Mgc2ltcGxlU2V0dGVyIAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c2ltcGxlLWdldHRlci1zZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1w
bGUtZ2V0dGVyLXNldHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2My
NjIyYmJhNzAwZmFmM2Y0OWQ2YjFkNDY3MmMzMDYwYzk3NzYzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1w
bGUtZ2V0dGVyLXNldHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCFE
T0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5l
c3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuc2ltcGxlR2V0dGVyID0g
YXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBzdHJ1Y3QgRm9vIHsK
LSAgICAgICAgICAgIGludCB4OwotICAgICAgICB9Ci0gICAgICAgIGludCBvcGVyYXRvci55KEZv
byBmb28pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmb28ueDsKLSAgICAgICAgfQot
ICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIGZvbzsKLSAgICAg
ICAgICAgIGZvby54ID0gNzgwNDsKLSAgICAgICAgICAgIHJldHVybiBmb28ueTsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdKSwgNzgwNCk7Ci19OwotCi13aGxzbFRlc3RzLnNpbXBsZVNldHRlciA9IGFz
eW5jICgpID0+IHsKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgc3RydWN0IEZvbyB7Ci0g
ICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3BlcmF0b3IueShGb28g
Zm9vKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAgICAgIH0KLSAg
ICAgICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludCB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9vLnggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBmb287Ci0gICAgICAg
IH0KLSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyBmb287Ci0g
ICAgICAgICAgICBmb28ueSA9IDc4MDQ7Ci0gICAgICAgICAgICByZXR1cm4gZm9vLng7Ci0gICAg
ICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDc4MDQpOwotfTsKLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08
L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1z
aW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBs
ZS10ZXN0cy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNzY2
M2QwNjlkNGQ1N2RkOWI5MzA1YjA2Yzg4YjQzM2NkOGY2NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBs
ZS10ZXN0cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotUEFT
UyBzaW1wbGVVbnJlYWNoYWJsZUNvZGUgCi1QQVNTIHNpbXBsZU5vUmV0dXJuIAotUEFTUyBzaW1w
bGVSZWN1cnNpdmVTdHJ1Y3QgCi1QQVNTIHNpbXBsZVJlY3Vyc2lvbiAKLVBBU1Mgc2ltcGxlUmVj
dXJzaW9uMiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS10
ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS10ZXN0cy5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTM3MTNjNTE3ZThlNjFiYjQ4YTQwNmQ4NGRl
ZGUzZTVhYjFiMjkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtdGVzdHMuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFy
c2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+
VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hs
c2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13
aGxzbFRlc3RzLnNpbXBsZVVucmVhY2hhYmxlQ29kZSA9IGFzeW5jICgpID0+IHsKLSAgICBhd2Fp
dCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaW50IHg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnNpbXBsZU5vUmV0dXJu
ID0gYXN5bmMgKCkgPT4gewotICAgIGF3YWl0IGNoZWNrRmFpbCgiaW50IGZvbygpIHsgfSIpOwot
fQotCi13aGxzbFRlc3RzLnNpbXBsZVJlY3Vyc2l2ZVN0cnVjdCA9IGFzeW5jICgpID0+IHsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28gewot
ICAgICAgICAgICAgICAgIEZvbyBmb287Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGApOwotfQot
Ci13aGxzbFRlc3RzLnNpbXBsZVJlY3Vyc2lvbiA9IGFzeW5jICgpID0+IHsKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHZvaWQgZm9vKGludCB4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvbyh4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
YCk7Ci19Ci0KLXdobHNsVGVzdHMuc2ltcGxlUmVjdXJzaW9uMiA9IGFzeW5jICgpID0+IHsKLSAg
ICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBiYXIoaW50IHgp
IHsKLSAgICAgICAgICAgICAgICBmb28oeCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmb28oYmFyKHgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7
Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLWV4cGVjdGVk
LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjZTAyOGI0MDQyZTc5ZGE5MmE1
YWQ3ZjI1NGU3YjljMWMyOGQ4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLXdoaWxlLWxvb3AtZXhw
ZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mgc2ltcGxlV2hp
bGUgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtd2hpbGUt
bG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyY2VhY2U4NTNmYjJiMGZiMmY4NmEw
ZmNlZWVkZDljOGM2ZjU4N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS13aGlsZS1sb29wLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgot
PG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxvbmci
PgotPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgotPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMg
PSB7fTsKLQotd2hsc2xUZXN0cy5zaW1wbGVXaGlsZSA9IGFzeW5jICgpID0+IHsKLSAgICBsZXQg
cHJvZ3JhbSA9IGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKHggPCAxMykKLSAgICAgICAgICAgICAgICB4ID0geCAqIDI7Ci0gICAgICAgICAg
ICByZXR1cm4geDsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIDE2KTsKLX0KLQot
cnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjcyYzFjYWJlMDdiNjAyNGY5ZWI3NWQzZTY4OTEwMWMwODFiYjJlZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtc3RvcmUtbnVsbC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwzICswLDAgQEAKLQotUEFTUyBzdG9yZU51bGwgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1zdG9yZS1udWxsLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c3RvcmUtbnVsbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjQ0YjMyYzVl
ZDZkZTc2ZjI1YTlkMDc3NDNhN2E3YmNjMTYxY2RiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS1udWxs
Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9
ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVzdHMgPSB7fTsKLQot
d2hsc2xUZXN0cy5zdG9yZU51bGwgPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgdm9pZCBmb28oKSB7ICpudWxsID0gNDI7IH0KLSAg
ICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0
eS11cGRhdGVzLXByb3Blcmx5LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtc3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNk
YjMzZDhlMjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0eS11cGRhdGVzLXByb3Bl
cmx5LWV4cGVjdGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdG9yZS10by1wcm9wZXJ0
eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc3RvcmUt
dG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZTRkNTVjNTE1YTY3MTZhZTU0Mzg5ZmFlMzEwZGY4Y2ZlNjI3NmRmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1zdG9yZS10by1wcm9wZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxNTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgot
PGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi1zdHJ1Y3QgVmVydGV4T3V0
IHsKLSAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKLSAgICBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKTsKLX0KLQotc3RydWN0IEJhciB7Ci0gICAgaW50IHg7Ci0gICAgZmxvYXQg
eTsKLSAgICBpbnQgejsKLX0KLQotc3RydWN0IEZvbyB7Ci0gICAgQmFyIGJhcjsKLSAgICBCYXIg
YmFyMjsKLX0KLQotdGhyZWFkIEZvbyogcHRyKCkgewotICAgIEZvbyBsb2NhbDsKLSAgICByZXR1
cm4gJmxvY2FsOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9z
aXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAg
VmVydGV4T3V0IHJlc3VsdDsKLQotICAgIHRocmVhZCBGb28qIHAgPSBwdHIoKTsKLSAgICBwLT5i
YXIyLnkgPSAxLjA7Ci0gICAgZmxvYXQgdmFsdWUgPSBwLT5iYXIyLnk7Ci0KLSAgICByZXN1bHQu
cG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICByZXN1bHQuc2hhZGUgPSB2YWx1ZTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJuIGZsb2F0NChz
aGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0gICAgY29uc3Qg
YXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19
OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7
Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVy
MC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAx
LjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0KLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEu
MDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0KLSAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OwotICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAgIGNvbnN0IHN3
YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Ci0gICAg
Y29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50
VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5j
cmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7cjogMCwgZzog
MCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVu
dDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFy
Iiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29uc3QgZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
PSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0gICAgY29uc3Qg
cmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVy
UGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwot
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
LSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBmdW5jdGlvbigp
IHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXN0cnVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtc3RydWN0LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzYyMGVlMWIyODU4NDZjOGE2ZmUyZmNmNDQ1Y2E2M2ZjZGE3ZGE1My4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtc3RydWN0LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAot
Ci1QQVNTIGVtcHR5U3RydWN0IAotUEFTUyBzZXR0aW5nQW5BcnJheUluc2lkZUFTdHJ1Y3QgCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zdHJ1Y3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzAxMDdjOGRlMWNiNDMxYzBkOTc2MmUzOTA2NGY2ODRhMWY5YTgxZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtc3RydWN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgotPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdobHNsVGVz
dHMgPSB7fTsKLQotd2hsc2xUZXN0cy5lbXB0eVN0cnVjdCA9IGFzeW5jICgpID0+Ci17Ci0gICAg
bGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBUaGluZ3kgeyB9Ci0gICAgICAgIGludCBm
b28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBUaGluZ3kgdGhpbmd5OwotICAgICAgICAgICAg
cmV0dXJuIDQ2OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Nik7Ci19OwotCi13aGxzbFRlc3Rz
LnNldHRpbmdBbkFycmF5SW5zaWRlQVN0cnVjdCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0IHBy
b2dyYW0gPSBgCi0gICAgICAgIHN0cnVjdCBGb28gewotICAgICAgICAgICAgaW50WzFdIGFycmF5
OwotICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBG
b28gZm9vOwotICAgICAgICAgICAgdGhyZWFkIEZvbyogYmFyID0gJmZvbzsKLSAgICAgICAgICAg
IGJhci0+YXJyYXlbMF0gPSAyMTsKLSAgICAgICAgICAgIHJldHVybiBmb28uYXJyYXlbMF07Ci0g
ICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDIxKTsKLX07Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwot
PC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
c3dpdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhw
ZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNiZjUxM2M2OWZjNmE2
M2ZjODMxMjRmMzFiYjgzZGZlNDUxMzAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2gtZXhwZWN0ZWQu
dHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLVBBU1Mgc3dpdGNoQnJlYWsgCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zd2l0Y2guaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDQ3MDYxYjE1YTA4ZWM1M2UxMTRhNjcyNzhkNjZjYzRmZTFhMDY1Yy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtc3dpdGNoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURPQ1RZ
UEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3QgcHJlZml4L3Bvc3RmaXguPC90aXRsZT4K
LTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3
aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMuc3dpdGNoQnJlYWsgPSBhc3luYyAoKSA9Pgot
ewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICBpbnQgZm9vKGludCB4KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIHN3aXRjaCAoeCkgewot
ICAgICAgICAgICAgY2FzZSA3Njc6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IDI3OwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA2OToKLSAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gNzYyNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IDQ5OwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDc2NyldKSwgMjcpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2OSldKSwgNzYyNCk7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KDApXSksIDQ5KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXJuYXJ5LXNw
ZWMtdGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGVybmFyeS1z
cGVjLXRlc3QtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmI4
ODY0ZjExMDE1ZjJmNGM1ZTZhN2IwZjA4NTFkOWEyN2M3NDcxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXJu
YXJ5LXNwZWMtdGVzdC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LQotUEFTUyB0ZXJuYXJ5RXhwcmVzc2lvbiAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXRlcm5hcnktc3BlYy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdGVybmFyeS1zcGVjLXRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDkwYWE4MzhlNzQzZDY4MDJmZDAyYmFiMzA4YjFiYTc5NzVmYWM0My4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGVybmFyeS1zcGVjLXRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTwh
RE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBjaGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0i
dGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRs
ZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25z
dCB3aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMudGVybmFyeUV4cHJlc3Npb24gPSBhc3lu
YyAoKSA9PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28oaW50IHgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4IDwgMyA/IDQgOiA1OwotICAgICAgICB9Ci0g
ICAgICAgIGludCBiYXIoaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4IDwg
MTAgPyAxMSA6IHggPCAxMiA/IDE0IDogMTU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJheihp
bnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDMgPCA0ID8geCA6IDU7Ci0gICAg
ICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUludCg3NjcpXSksIDUpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgyKV0pLCA0KTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW21h
a2VJbnQoOCldKSwgMTEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJiYXIiLCBbbWFrZUludCg5KV0pLCAxMSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEwKV0pLCAxNCk7
Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIs
IFttYWtlSW50KDExKV0pLCAxNCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEyKV0pLCAxNSk7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KDEzKV0p
LCAxNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImJheiIsIFttYWtlSW50KDE0KV0pLCAxNCk7Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBpbnQgZm9vKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpbnQgeDsKLSAgICAgICAgICAgICAgICAoNCA8IDUgPyB4IDogNykgPSA4OwotICAgICAgICAg
ICAgfQotICAgICAgICBgKTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIGludCBmb28oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4Owot
ICAgICAgICAgICAgICAgIGludCB5OwotICAgICAgICAgICAgICAgICgwIDwgMSA/IHggOiB5KSA9
IDQyOwotICAgICAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICAgICAgfQotICAgICAgICBg
KTsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28o
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAg
IGludCB5OwotICAgICAgICAgICAgICAgIHRocmVhZCBpbnQqIHogPSAmKDAgPCAxID8geCA6IHkp
OwotICAgICAgICAgICAgICAgIHJldHVybiAqejsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgZm9vKCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgICAgICBp
bnQgeTsKLSAgICAgICAgICAgICAgICB0aHJlYWQgaW50W10geiA9IEAoMCA8IDEgPyB4IDogeSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp6OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28oKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAgIGZs
b2F0IHk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDQgPCA1ID8geCA6IHk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIGApOwotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAg
ICAgICAgaW50IGZvbygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDQg
PCA1ID8gNiA6IDcuMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3Rz
KHdobHNsVGVzdHMpOwotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0LWV4cGVjdGVkLnR4dApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTA3NTc3ZDUwNGQ5NmQ3N2RiYzU2MjMxNDQ5MTYxZTA1MmUx
NWM2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotCi1QQVNTIFJldHVybiBhIGxpdGVyYWwgb2YgdHlw
ZSBib29sLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCi1QQVNTIFJl
dHVybiBhbiBleHBlY3RlZCBpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWlu
dCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCi1QQVNTIFVw
bG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBm
bG9hdDQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVlLiAKLVBBU1Mg
UmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQg
ZmxvYXQgdmFsdWUuIAotUEFTUyBVcGxvYWQgbWFueSBib29sIHZhbHVlcyBhbmQgcmV0dXJuIGEg
Y2FsY3VsYXRlZCByZXN1bHQuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0IHZhbHVl
LiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGludCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBl
eHBlY3RlZCB1aW50IHZhbHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0IHZhbHVl
LiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBh
biBleHBlY3RlZCBpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWludCB2YWx1
ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCi1QQVNTIFJldHVybiBh
biBleHBlY3RlZCBmbG9hdDQgdmFsdWUuIAotUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZh
bHVlLiAKLVBBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAotUEFTUyBSZXR1cm4g
YW4gZXhwZWN0ZWQgZmxvYXQgdmFsdWUuIAotUEFTUyBVcGxvYWQgYW5kIGNhbGN1bGF0ZSBhIHJl
c3VsdCBmcm9tIHZhcmllZCBhcmd1bWVudCB0eXBlcy4gCi1QQVNTIFN0b3JlIGludG8gYSBmbG9h
dDRbXS4gCi1QQVNTIFVwbG9hZCBhIGludFtdIGFuZCBzdG9yZSBpbnRvIGEgaW50W10uIAotUEFT
UyBVcGxvYWQgYSBmbG9hdDR4NFtdIGFuZCBzdG9yZSBpbnRvIGEgZmxvYXQ0eDRbXS4gCi1QQVNT
IFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBl
Y3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2
YWx1ZS4gCi1QQVNTIFJldHVybiBhbiBleHBlY3RlZCBmbG9hdDR4NCB2YWx1ZS4gCi0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3MtdGVzdC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MjkxNDYyMDcyZWIyMmY1NjliZjYzZTNiZjZiYTc5NTc2
ZTVkNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5U
ZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJqcy93aGxz
bC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCBlcHNpbG9uID0gMC4w
MDAxOwotCi0vLyBGSVhNRTogQWRkICJ1Y2hhciIgYmFjayBpbiB3aGVuIG9wZXJhdG9yKyh1Y2hh
ciwgdWNoYXIpIGlzIGF2YWlsYWJsZS4KLWNvbnN0IG51bWVyaWNTY2FsYXJUeXBlcyA9IFsiaW50
IiwgInVpbnQiLCAiZmxvYXQiXTsKLQotY29uc3QgbnVtZXJpY1NjYWxhckZ1bmNzID0gewotICAg
ICJpbnQiOiBjYWxsSW50RnVuY3Rpb24sCi0gICAgInVjaGFyIjogY2FsbFVjaGFyRnVuY3Rpb24s
Ci0gICAgInVpbnQiOiBjYWxsVWludEZ1bmN0aW9uLAotICAgICJmbG9hdCI6IGNhbGxGbG9hdEZ1
bmN0aW9uCi19OwotCi1jb25zdCBzY2FsYXJBcmdNYWtlcnMgPSB7Ci0gICAgImJvb2wiOiBtYWtl
Qm9vbCwKLSAgICAiaW50IjogbWFrZUludCwKLSAgICAidWNoYXIiOiBtYWtlVWNoYXIsCi0gICAg
InVpbnQiOiBtYWtlVWludCwKLSAgICAiZmxvYXQiOiBtYWtlRmxvYXQKLX07Ci0KLWNvbnN0IGFy
cmF5VHlwZUxlbmd0aHMgPSB7Ci0gICAgImZsb2F0NCI6IDQsCi0gICAgImZsb2F0NHg0IjogMTYK
LX07Ci0KLWNvbnN0IGFycmF5RnVuY3MgPSB7Ci0gICAgImZsb2F0NCI6IGNhbGxGbG9hdDRGdW5j
dGlvbiwKLSAgICAiZmxvYXQ0eDQiOiBjYWxsRmxvYXQ0eDRGdW5jdGlvbiwKLX07Ci0KLWNvbnN0
IGFycmF5QXJnTWFrZXJzID0gewotICAgICJmbG9hdDQiOiBtYWtlRmxvYXQ0LAotICAgICJmbG9h
dDR4NCI6IG1ha2VGbG9hdDR4NAotfTsKLQotY29uc3QgZmxvYXQ0eDRleHBlY3RlZCA9IFswLCA0
LCA4LCAxMiwgMSwgNSwgOSwgMTMsIDIsIDYsIDEwLCAxNCwgMywgNywgMTEsIDE1XTsKLWNvbnN0
IGZsb2F0NHg0Q29sdW1uRXhwZWN0ZWQgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwg
MTAsIDExLCAxMiwgMTMsIDE0LCAxNV07Ci1jb25zdCBmbG9hdDRleHBlY3RlZCA9IFswLCAxLCAy
LCAzXTsKLQotbGV0IHdobHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5saXRlcmFscyA9ICgp
ID0+IHsKLSAgICBjaGVja0Jvb2xzKCJSZXR1cm4gYSBsaXRlcmFsIG9mIHR5cGUgYm9vbC4iLCAi
cmV0dXJuIHRydWU7Iik7Ci0gICAgY2hlY2tBcnJheXMoImZsb2F0NCIsICJyZXR1cm4gZmxvYXQ0
KDAsIDEsIDIsIDMpOyIsIFtdLCBmbG9hdDRleHBlY3RlZCk7Ci0gICAgY2hlY2tOdW1lcmljU2Nh
bGFycygicmV0dXJuIDQyOyIsIFtdLCA0Mik7Ci19OwotCi13aGxzbFRlc3RzLnNpbmdsZUFyZ3Vt
ZW50ID0gKCkgPT4gewotICAgIGNoZWNrQm9vbHMoIlVwbG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2
YWx1ZS4iLCAicmV0dXJuIGluMDsiLCBbdHJ1ZV0pOwotICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQi
LCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0ZXhwZWN0ZWRdLCBmbG9hdDRleHBlY3RlZCk7Ci0gICAg
Y2hlY2tOdW1lcmljU2NhbGFycygicmV0dXJuIGluMDsiLCBbNDJdLCA0Mik7Ci19OwotCi13aGxz
bFRlc3RzLm1hbnlBcmd1bWVudHMgPSAoKSA9PiB7Ci0gICAgY2hlY2tCb29scygiVXBsb2FkIG1h
bnkgYm9vbCB2YWx1ZXMgYW5kIHJldHVybiBhIGNhbGN1bGF0ZWQgcmVzdWx0LiIsCi0gICAgICAg
ICJyZXR1cm4gaW4wICYgaW4xICYgaW4yICYgaW4zICYgaW40ICYgaW41ICYgaW42ICYgaW43OyIs
Ci0gICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVl
XSk7Ci0KLSAgICBsZXQgYm9keSA9ICJyZXR1cm4gZmxvYXQ0KGluMC54LCBpbjEueSwgaW4yLnos
IGluMy53KTsiCi0gICAgbGV0IGFyZ3MgPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7
ICsraSkKLSAgICAgICAgYXJncy5wdXNoKGZsb2F0NGV4cGVjdGVkKTsKLSAgICBjaGVja0FycmF5
cygiZmxvYXQ0IiwgYm9keSwgYXJncywgZmxvYXQ0ZXhwZWN0ZWQpOwotCi0gICAgYm9keSA9IGBy
ZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsgaW40ICsgaW41ICsgaW42ICsgaW43O2A7Ci0g
ICAgY2hlY2tOdW1lcmljU2NhbGFycyhib2R5LCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgN10sIDI4
KTsKLX07Ci0KLXdobHNsVGVzdHMuYnVmZmVyc1dpdGhPbmVWYWx1ZSA9ICgpID0+IHsKLSAgICBj
b25zdCBib2R5ID0gYHJldHVybiBpbjBbMF07YAotICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCBi
b2R5LCBbW2Zsb2F0NGV4cGVjdGVkXV0sIGZsb2F0NGV4cGVjdGVkKTsKLSAgICBjaGVja051bWVy
aWNTY2FsYXJzKGJvZHksIFtbNDJdXSwgNDIpOwotfTsKLQotd2hsc2xUZXN0cy5tdWx0aXBsZUJ1
ZmZlckFyZ3VtZW50cyA9ICgpID0+IHsKLSAgICBsZXQgYm9keSA9IGAKLSAgICBmbG9hdCB4ID0g
aW4wWzBdLnggKyBpbjBbMV0ueCArIGluMFsyXS54ICsgaW4xLnggKyBpbjJbMF0ueDsKLSAgICBm
bG9hdCB5ID0gaW4wWzBdLnkgKyBpbjBbMV0ueSArIGluMFsyXS55ICsgaW4xLnkgKyBpbjJbMF0u
eTsKLSAgICBmbG9hdCB6ID0gaW4wWzBdLnogKyBpbjBbMV0ueiArIGluMFsyXS56ICsgaW4xLnog
KyBpbjJbMF0uejsKLSAgICBmbG9hdCB3ID0gaW4wWzBdLncgKyBpbjBbMV0udyArIGluMFsyXS53
ICsgaW4xLncgKyBpbjJbMF0udzsKLQotICAgIHJldHVybiBmbG9hdDQoeCwgeSwgeiwgdyk7YDsK
LSAgICBjaGVja0FycmF5cygiZmxvYXQ0IiwgYm9keSwgW1tmbG9hdDRleHBlY3RlZCwgZmxvYXQ0
ZXhwZWN0ZWQsIGZsb2F0NGV4cGVjdGVkXSwgZmxvYXQ0ZXhwZWN0ZWQsIFtmbG9hdDRleHBlY3Rl
ZF1dLCBbMCwgNSwgMTAsIDE1XSk7Ci0KLSAgICBib2R5ID0gYHJldHVybiBpbjBbMF0gKyBpbjBb
MV0gKyBpbjBbMl0gKyBpbjEgKyBpbjJbMF07YDsKLSAgICBjaGVja051bWVyaWNTY2FsYXJzKGJv
ZHksIFtbMCwgMSwgMl0sIDMsIFs0XV0sIDEwKTsKLX07Ci0KLXdobHNsVGVzdHMubXVsdGlwbGVB
cmd1bWVudFR5cGVzID0gKCkgPT4gewotICAgIGNvbnN0IHNyYyA9IGBmbG9hdCB0ZXN0KGludCBp
LCB1Y2hhciBjLCBmbG9hdDQgZjQsIGRldmljZSB1aW50W10gdSwgZGV2aWNlIGZsb2F0W10gZnMp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmxvYXQoaSkgKyBmbG9hdChjKSArIGY0LnggKyBmNC55
ICsgZjQueiArIGY0LncgKyBmbG9hdCh1WzBdKSArIGZzWzBdICsgZnNbMV07Ci0gICAgfWA7Ci0g
ICAgY29uc3QgaSA9IG1ha2VJbnQoMSk7Ci0gICAgY29uc3QgYyA9IG1ha2VVY2hhcigyKTsKLSAg
ICBjb25zdCBmNCA9IG1ha2VGbG9hdDQoWzQsIDUsIDYsIDddKTsKLSAgICBjb25zdCB1ID0gbWFr
ZVVpbnQoWzNdKTsKLSAgICBjb25zdCBmcyA9IG1ha2VGbG9hdChbOCwgOV0pOwotICAgIHdlYkdQ
VVByb21pc2VUZXN0KCgpID0+IHsKLSAgICAgICAgcmV0dXJuIGNhbGxGbG9hdEZ1bmN0aW9uKHNy
YywgInRlc3QiLCBbaSwgYywgZjQsIHUsIGZzXSkudGhlbihyZXN1bHQgPT4gewotICAgICAgICAg
ICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0LCA0NSwgZXBzaWxvbiwgIlRlc3QgcmV0dXJu
ZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0gICAgICAgIH0pOwotICAgIH0sICJVcGxvYWQgYW5kIGNh
bGN1bGF0ZSBhIHJlc3VsdCBmcm9tIHZhcmllZCBhcmd1bWVudCB0eXBlcy4iKTsKLX07Ci0KLXdo
bHNsVGVzdHMuYnVmZmVyU3RvcmVzID0gKCkgPT4gewotICAgIGxldCBzcmMgPSBgdm9pZCB0ZXN0
KGRldmljZSBmbG9hdDRbXSBvdXQpIHsKLSAgICAgICAgb3V0WzBdID0gZmxvYXQ0KDAsIDEsIDIs
IDMpOwotICAgIH1gOwotICAgIGNvbnN0IGZsb2F0NE91dCA9IG1ha2VGbG9hdDQoW1swLCAwLCAw
LCAwXV0pOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIGZsb2F0NE91dCk7Ci0K
LSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7Ci0gICAgICAgIHJldHVybiBmbG9hdDRPdXQu
Z2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKLSAgICAgICAgICAgIGNvbnN0
IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIpOwotICAgICAgICAgICAgZm9y
IChsZXQgaTsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1
YWxzKHJlc3VsdFtpXSwgaSwgIlRlc3Qgc3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSwgIlN0b3JlIGludG8gYSBmbG9hdDRbXS4iKTsK
LQotICAgIHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNlIGludFtdIGluLCBkZXZpY2UgaW50W10gb3V0
KSB7Ci0gICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDU7IGkgPSBpICsgMSkKLSAgICAgICAg
ICAgIG91dFtpXSA9IGluW2ldOwotICAgIH1gOwotICAgIGNvbnN0IGFycmF5ID0gWzAsIDEsIDIs
IDMsIDRdOwotICAgIGNvbnN0IGlucHV0ID0gbWFrZUludChhcnJheSk7Ci0gICAgY29uc3Qgb3V0
cHV0ID0gbWFrZUludChbMCwgMCwgMCwgMCwgMF0pOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3Jj
LCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7Ci0KLSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9
PiB7Ci0gICAgICAgIHJldHVybiBvdXRwdXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVm
ZmVyID0+IHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50MzJBcnJheShhcnJh
eUJ1ZmZlcik7Ci0gICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGFycmF5LCByZXN1bHQs
ICJUZXN0IHN0b3JlZCBleHBlY3RlZCB2YWx1ZXMuIik7Ci0gICAgICAgIH0pOwotICAgIH0sICJV
cGxvYWQgYSBpbnRbXSBhbmQgc3RvcmUgaW50byBhIGludFtdLiIpOwotfTsKLQotd2hsc2xUZXN0
cy5mbG9hdDR4NHRlc3RzID0gKCkgPT4gewotICAgIGNvbnN0IHNyYyA9IGB2b2lkIHRlc3QoZGV2
aWNlIGZsb2F0NHg0W10gaW4sIGRldmljZSBmbG9hdDR4NFtdIG91dCkgewotICAgICAgICBmb3Ig
KHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpCi0gICAgICAgICAgICBvdXRbaV0gPSBpbltp
XTsKLSAgICB9YDsKLSAgICBjb25zdCBpbnB1dCA9IG1ha2VGbG9hdDR4NChbZmxvYXQ0eDRleHBl
Y3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3Rl
ZF0pOwotICAgIGNvbnN0IG91dHB1dCA9IG1ha2VGbG9hdDR4NChuZXcgQXJyYXkoNjQpLmZpbGwo
MCkpOwotICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7
Ci0KLSAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7Ci0gICAgICAgIHJldHVybiBvdXRwdXQu
Z2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKLSAgICAgICAgICAgIGNvbnN0
IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIpOwotICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0g
MDsgaiA8IDE2OyArK2opCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxz
KHJlc3VsdFtpICogMTYgKyBqXSwgZmxvYXQ0eDRleHBlY3RlZFtqXSwgZXBzaWxvbiwgIlRlc3Qg
c3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
ICAgfSwgIlVwbG9hZCBhIGZsb2F0NHg0W10gYW5kIHN0b3JlIGludG8gYSBmbG9hdDR4NFtdLiIp
OwotCi0gICAgY2hlY2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBmbG9hdDR4NChmbG9hdDQo
MCwgMSwgMiwgMyksIGZsb2F0NCg0LCA1LCA2LCA3KSwgZmxvYXQ0KDgsIDksIDEwLCAxMSksIGZs
b2F0NCgxMiwgMTMsIDE0LCAxNSkpOyIsIFtdLCBmbG9hdDR4NGV4cGVjdGVkKTsKLSAgICBjaGVj
a0FycmF5cygiZmxvYXQ0eDQiLCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0eDRleHBlY3RlZF0sIGZs
b2F0NHg0ZXhwZWN0ZWQpOwotICAgIGxldCBtdWx0aXBsZTR4NGFyZ3MgPSBbXTsKLSAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgICAgY29uc3QgYXJnID0gbmV3IEFycmF5
KDE2KTsKLSAgICAgICAgYXJnLmZpbGwoMCk7Ci0gICAgICAgIGFyZ1tpXSA9IGk7Ci0gICAgICAg
IG11bHRpcGxlNHg0YXJncy5wdXNoKGFyZyk7Ci0gICAgfQotICAgIGNoZWNrQXJyYXlzKCJmbG9h
dDR4NCIsICJyZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsgaW40ICsgaW41ICsgaW42ICsg
aW43ICsgaW44ICsgaW45ICsgaW4xMCArIGluMTEgKyBpbjEyICsgaW4xMyArIGluMTQgKyBpbjE1
OyIsIG11bHRpcGxlNHg0YXJncywgZmxvYXQ0eDRDb2x1bW5FeHBlY3RlZCk7Ci0gICAgY2hlY2tB
cnJheXMoImZsb2F0NHg0IiwgInJldHVybiBpbjBbMF07IiwgW1tmbG9hdDR4NGV4cGVjdGVkXV0s
IGZsb2F0NHg0ZXhwZWN0ZWQpOwotfTsKLQotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCAoKSA9PiB7Ci0gICAgdHJ5IHsKLSAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHdobHNsVGVz
dHMpIHsKLSAgICAgICAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCJfIikpCi0gICAgICAgICAg
ICAgICAgd2hsc2xUZXN0c1tuYW1lXSgpOwotICAgICAgICB9Ci0gICAgfSBjYXRjaCAoZSkgewot
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKLSAgICAgICAgCi0gICAgICAgIHRocm93IGU7Ci0gICAgfQotfSk7Ci0KLS8q
IEhlbHBlciBmdW5jdGlvbnMgKi8KLQotY29uc3QgY2hlY2tOdW1lcmljU2NhbGFycyA9IChib2R5
LCBhcmdWYWx1ZXMsIGV4cGVjdGVkKSA9PiB7Ci0gICAgbGV0IGZ1bmN0aW9ucyA9IFtdOwotICAg
IGxldCBzcmMgPSAiIjsKLSAgICBmb3IgKGxldCB0eXBlIG9mIG51bWVyaWNTY2FsYXJUeXBlcykg
ewotICAgICAgICBsZXQgbmFtZSwgdmFsdWVzOwotICAgICAgICBbc3JjLCBuYW1lLCB2YWx1ZXNd
ID0gYXBwZW5kU2NhbGFyRnVuY3Rpb25Ub1NvdXJjZShzcmMsIHR5cGUsIGJvZHksIGFyZ1ZhbHVl
cyk7Ci0gICAgICAgIGZ1bmN0aW9ucy5wdXNoKHsgdHlwZTogdHlwZSwgbmFtZTogbmFtZSwgYXJn
czogdmFsdWVzLCBleHBlY3RlZDogZXhwZWN0ZWQgfSk7Ci0gICAgfQotCi0gICAgZm9yIChjb25z
dCBmIG9mIGZ1bmN0aW9ucykgewotICAgICAgICBjb25zdCBjYWxsRnVuYyA9IG51bWVyaWNTY2Fs
YXJGdW5jc1tmLnR5cGVdOwotICAgICAgICB3ZWJHUFVQcm9taXNlVGVzdChhc3luYyAoKSA9PiB7
Ci0gICAgICAgICAgICByZXR1cm4gY2FsbEZ1bmMoc3JjLCBmLm5hbWUsIGYuYXJncykudGhlbihy
ZXN1bHQgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdCwg
Zi5leHBlY3RlZCwgZXBzaWxvbiwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSwgYFJldHVybiBhbiBleHBlY3RlZCAke2YudHlwZX0g
dmFsdWUuYCk7Ci0gICAgfQotfTsKLQotY29uc3QgY2hlY2tCb29scyA9IChtc2cgPSAiUmV0dXJu
IGFuIGV4cGVjdGVkIGJvb2wgdmFsdWUuIiwgYm9keSwgYXJnVmFsdWVzID0gW10sIGV4cGVjdGVk
ID0gdHJ1ZSkgPT4gewotICAgIGNvbnN0IFtzcmMsIG5hbWUsIHZhbHVlc10gPSBhcHBlbmRTY2Fs
YXJGdW5jdGlvblRvU291cmNlKCIiLCAiYm9vbCIsIGJvZHksIGFyZ1ZhbHVlcyk7IAotCi0gICAg
d2ViR1BVUHJvbWlzZVRlc3QoYXN5bmMgKCkgPT4gewotICAgICAgICByZXR1cm4gY2FsbEJvb2xG
dW5jdGlvbihzcmMsIG5hbWUsIHZhbHVlcykudGhlbihyZXN1bHQgPT4gewotICAgICAgICAgICAg
YXNzZXJ0X2VxdWFscyhyZXN1bHQsIGV4cGVjdGVkLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2
YWx1ZS4iKTsKLSAgICAgICAgfSwgZSA9PiB7Ci0gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNl
b2YgV2ViR1BVVW5zdXBwb3J0ZWRFcnJvcikpCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAg
ICAgICAgfSk7Ci0gICAgfSwgbXNnKTsKLX07Ci0KLWNvbnN0IGNoZWNrQXJyYXlzID0gKHR5cGUs
IGJvZHksIGFyZ1ZhbHVlcyA9IFtdLCBleHBlY3RlZCkgPT4gewotICAgIGxldCBpbnB1dEFyZ3Mg
PSBbXTsKLSAgICBsZXQgdmFsdWVzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdW
YWx1ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgLy8gU3VwcG9ydCBhcnJheXMgb2YgZmxvYXQ0
LCBpbmNsdWRpbmcgb25lIHdpdGggYSBzaW5nbGUgZmxvYXQ0LgotICAgICAgICBjb25zdCB0b3Rh
bExlbmd0aCA9IGFyZ1ZhbHVlc1tpXS5mbGF0KCkubGVuZ3RoOwotICAgICAgICBjb25zdCBpc0J1
ZmZlciA9IGFyZ1ZhbHVlc1tpXS5sZW5ndGggPT09IDEgfHwgdG90YWxMZW5ndGggPiBhcnJheVR5
cGVMZW5ndGhzW3R5cGVdOwotICAgICAgICBpbnB1dEFyZ3MucHVzaChgJHtpc0J1ZmZlciA/ICJk
ZXZpY2UgIiA6ICIifSR7dHlwZX0ke2lzQnVmZmVyID8gIltdIiA6ICIifSBpbiR7aX1gKTsKLSAg
ICAgICAgdmFsdWVzLnB1c2goYXJyYXlBcmdNYWtlcnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7Ci0g
ICAgfQotCi0gICAgY29uc3Qgc3JjID0gYCR7dHlwZX0gJHt0eXBlfVRlc3QoJHtpbnB1dEFyZ3Mu
am9pbigiLCAiKX0pIHsgJHtib2R5fSB9Ci0gICAgYDsKLQotICAgIHdlYkdQVVByb21pc2VUZXN0
KGFzeW5jICgpID0+IHsKLSAgICAgICAgcmV0dXJuIGFycmF5RnVuY3NbdHlwZV0oc3JjLCBgJHt0
eXBlfVRlc3RgLCB2YWx1ZXMpLnRoZW4ocmVzdWx0ID0+IHsKLSAgICAgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgYXJyYXlUeXBlTGVuZ3Roc1t0eXBlXTsgKytpKQotICAgICAgICAgICAgICAg
IGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtpXSwgZXhwZWN0ZWRbaV0sIGVwc2lsb24sICJU
ZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIpOwotICAgICAgICB9KTsKLSAgICB9LCBgUmV0
dXJuIGFuIGV4cGVjdGVkICR7dHlwZX0gdmFsdWUuYCk7Ci19Ci0KLWNvbnN0IGFwcGVuZFNjYWxh
ckZ1bmN0aW9uVG9Tb3VyY2UgPSAoc3JjLCB0eXBlLCBib2R5LCBhcmdWYWx1ZXMpID0+IHsKLSAg
ICBjb25zdCBuYW1lID0gYCR7dHlwZX1UZXN0YDsKLQotICAgIGxldCBpbnB1dEFyZ3MgPSBbXTsK
LSAgICBsZXQgdmFsdWVzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdWYWx1ZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY29uc3QgaXNCdWZmZXIgPSBBcnJheS5pc0FycmF5KGFy
Z1ZhbHVlc1tpXSk7Ci0gICAgICAgIGlucHV0QXJncy5wdXNoKGAke2lzQnVmZmVyID8gImRldmlj
ZSAiIDogIiJ9JHt0eXBlfSR7aXNCdWZmZXIgPyAiW10iIDogIiJ9IGluJHtpfWApOwotICAgICAg
ICB2YWx1ZXMucHVzaChzY2FsYXJBcmdNYWtlcnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7Ci0gICAg
fQotCi0gICAgc3JjICs9IGAke3R5cGV9ICR7bmFtZX0oJHtpbnB1dEFyZ3Muam9pbigiLCAiKX0p
IHsgJHtib2R5fSB9Ci0gICAgYDsKLSAgICAKLSAgICByZXR1cm4gW3NyYywgbmFtZSwgdmFsdWVz
XTsKLX07Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLWV4cGVjdGVkLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFm
MjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtZ2V0ZGltZW5zaW9ucy1leHBlY3RlZC50
eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVuc2lvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC10ZXh0dXJlcy1nZXRkaW1lbnNpb25zLmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE5ZjEyZjhhMWYzNmZiYThlOTNkM2E3MWFiYzA3ZmY0MDI2MjFmODQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLWdldGRpbWVuc2lvbnMuaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDgwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08
c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSldCi1j
b21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJlIDog
cmVnaXN0ZXIodDApLCBkZXZpY2UgdWludFtdIHRoZUJ1ZmZlciA6IHJlZ2lzdGVyKHUxKSkgewot
ICAgIHVpbnQgd2lkdGg7Ci0gICAgdWludCBoZWlnaHQ7Ci0gICAgdWludCBudW1iZXJPZkxldmVs
czsKLSAgICBHZXREaW1lbnNpb25zKHRoZVRleHR1cmUsIDAsICZ3aWR0aCwgJmhlaWdodCwgJm51
bWJlck9mTGV2ZWxzKTsKLSAgICB0aGVCdWZmZXJbMF0gPSB3aWR0aDsKLSAgICB0aGVCdWZmZXJb
MV0gPSBoZWlnaHQ7Ci0gICAgdGhlQnVmZmVyWzJdID0gbnVtYmVyT2ZMZXZlbHM7Ci19Ci1gOwot
Ci1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKLSAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5
cGU6ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBj
b25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRH
cm91cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCBjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxh
eW91dH07Ci0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQ
aXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHRleHR1cmVE
ZXNjcmlwdG9yID0ge3NpemU6IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDogMX0sIGZvcm1h
dDogInJnYmE4dW5vcm0iLCB1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlNBTVBMRUR9OwotICAgIGNv
bnN0IHRleHR1cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgdGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAg
ICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDMsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1JFQUR9OwotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJp
bmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplOiBVaW50MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDN9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmdzID0gW3tiaW5kaW5n
OiAwLCByZXNvdXJjZTogdGV4dHVyZVZpZXd9LCB7YmluZGluZzogMSwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9XTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogYmluZEdyb3VwQmluZGluZ3N9OwotICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0K
LSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJl
Z2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwotICAg
IGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9
IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChb
Y29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQg
cmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBjb25zdCByZXN1bHRzVWludDMyQXJy
YXkgPSBuZXcgVWludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKLSAgICBpZiAocmVzdWx0
c1VpbnQzMkFycmF5WzBdID09IDIKLSAgICAgICAgJiYgcmVzdWx0c1VpbnQzMkFycmF5WzFdID09
IDIKLSAgICAgICAgJiYgcmVzdWx0c1VpbnQzMkFycmF5WzJdID09IDEpCi0gICAgICAgIHRlc3RQ
YXNzZWQoIiIpOwotICAgIGVsc2UKLSAgICAgICAgdGVzdEZhaWxlZCgiIik7Ci0gICAgcmVzdWx0
c0J1ZmZlci51bm1hcCgpOwotfQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAg
ICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpT
VGVzdCgpOwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtbG9hZC1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhl
MjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLWV4cGVjdGVkLmh0bWwKKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgotPHNjcmlwdD4KLWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKLWRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC10ZXh0dXJlcy1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdGV4dHVyZXMtbG9hZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTRm
ZTBmYzg0ZTlkNDI2Nzc4YzI4MTE2YmVlMmFmM2E0YWI2ZjA0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXh0
dXJlcy1sb2FkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotPCFET0NUWVBF
IGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRo
PSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3Vy
Y2UgPSBgCi12ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRy
aWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQotZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKFRleHR1cmUyRDxmbG9hdDQ+IHRoZVRleHR1cmUg
OiByZWdpc3Rlcih0MCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBMb2FkKHRoZVRleHR1
cmUsIGludDIoMCwgMCkpOwotfQotYDsKLQotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKLSAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OwotICAgIGNv
bnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Ci0gICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
Ci0gICAgCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07Ci0gICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNl
dDogW2F0dHJpYnV0ZTBdfTsKLSAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmls
aXR5OiA3LCB0eXBlOiAic2FtcGxlZC10ZXh0dXJlIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQot
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21l
bnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0
ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91
dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNy
ZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVh
dGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9
IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzNdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3
XSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEwXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxM10gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAg
IHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplOiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAy
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodGV4dHVyZURhdGFCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5
KHRleHR1cmVEYXRhQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWlu
dDhBcnJheVswXSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0gPSAy
NTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzJdID0gMjU1OwotICAgIHRleHR1
cmVEYXRhQnVmZmVyVWludDhBcnJheVszXSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVp
bnQ4QXJyYXlbNF0gPSAxMjg7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVdID0g
MTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs2XSA9IDEyODsKLSAgICB0ZXh0
dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbN10gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJV
aW50OEFycmF5WzhdID0gMTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5XSA9
IDEyODsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTBdID0gMTI4OwotICAgIHRl
eHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZm
ZXJVaW50OEFycmF5WzEyXSA9IDEyODsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlb
MTNdID0gMTI4OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAxMjg7Ci0g
ICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzE1XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0
YUJ1ZmZlci51bm1hcCgpOwotCi0gICAgY29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6ZTog
e3dpZHRoOiAyLCBoZWlnaHQ6IDIsIGRlcHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIsIHVz
YWdlOiBHUFVUZXh0dXJlVXNhZ2UuU0FNUExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZFUl9E
U1R9OwotICAgIGNvbnN0IHRleHR1cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgdGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5ncyA9IFt7YmluZGluZzogMCwgcmVz
b3VyY2U6IHRleHR1cmVWaWV3fV07Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IGJpbmRHcm91cEJpbmRpbmdzfTsKLSAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsK
LSAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1
bm9ybSJ9OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWlu
KHN3YXBDaGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hh
aW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91
dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0KLSAgICBjb25zdCBi
dWZmZXJDb3B5VmlldyA9IHtidWZmZXI6IHRleHR1cmVEYXRhQnVmZmVyLCByb3dQaXRjaDogVWlu
dDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAyLCBpbWFnZUhlaWdodDogVWludDhBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiAyICogMn07Ci0gICAgY29uc3QgdGV4dHVyZUNvcHlW
aWV3ID0ge3RleHR1cmU6IHRleHR1cmV9OwotICAgIGNvbnN0IGNvcHlTaXplID0ge3dpZHRoOiAy
LCBoZWlnaHQ6IDIsIGRlcHRoOiAxfTsKLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9U
ZXh0dXJlKGJ1ZmZlckNvcHlWaWV3LCB0ZXh0dXJlQ29weVZpZXcsIGNvcHlTaXplKTsKLQotICAg
IGNvbnN0IGNsZWFyQ29sb3IgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3Qg
Y29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29s
dmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJD
b2xvcn1dOwotICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNv
bnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnR9OwotICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29k
ZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
Ci0gICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0KLWlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtc2FtcGxlLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXRleHR1cmVzLXNhbXBsZS1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4
dHVyZXMtc2FtcGxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGV4dHVyZXMtc2Ft
cGxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDVlNDc3MDRmZjFhMGFl
ZGU0NGIyNjFjNjA2MDliYWRkOWU2N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXRleHR1cmVzLXNhbXBsZS5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLWZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJlIDogcmVnaXN0ZXIo
dDApLCBzYW1wbGVyIHRoZVNhbXBsZXIgOiByZWdpc3RlcihzMSkpIDogU1ZfVGFyZ2V0IDAgewot
ICAgIHJldHVybiBTYW1wbGUodGhlVGV4dHVyZSwgdGhlU2FtcGxlciwgZmxvYXQyKDAuNSwgMC41
KSk7Ci19Ci1gOwotCi1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07Ci0gICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OwotICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307Ci0gICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAotICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLSAgICAKLSAgICBj
b25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsK
LSAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRl
MF19OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0
ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJz
YW1wbGVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0
XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2
ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
ciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAg
Y29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERl
c2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZl
cnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsy
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7
Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAw
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0gICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsK
LQotICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50OEFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAyLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCB0ZXh0
dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodGV4dHVyZURhdGFCdWZmZXJEZXNj
cmlwdG9yKTsKLSAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHRleHR1cmVEYXRh
QnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KHRleHR1cmVEYXRhQnVmZmVyQXJyYXlC
dWZmZXIpOwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVswXSA9IDI1NTsKLSAgICB0
ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZm
ZXJVaW50OEFycmF5WzJdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsz
XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbNF0gPSAyNTU7Ci0gICAg
dGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVm
ZmVyVWludDhBcnJheVs2XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlb
N10gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzhdID0gMjU1OwotICAg
IHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1
ZmZlclVpbnQ4QXJyYXlbMTBdID0gMjU1OwotICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJh
eVsxMV0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzEyXSA9IDI1NTsK
LSAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTNdID0gMjU1OwotICAgIHRleHR1cmVE
YXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAyNTU7Ci0gICAgdGV4dHVyZURhdGFCdWZmZXJVaW50
OEFycmF5WzE1XSA9IDI1NTsKLSAgICB0ZXh0dXJlRGF0YUJ1ZmZlci51bm1hcCgpOwotCi0gICAg
Y29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6ZToge3dpZHRoOiAyLCBoZWlnaHQ6IDIsIGRl
cHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIsIHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuU0FN
UExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZFUl9EU1R9OwotICAgIGNvbnN0IHRleHR1cmUg
PSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7Ci0gICAgY29uc3QgdGV4
dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBzYW1w
bGVyRGVzY3JpcHRvciA9IHttYWdGaWx0ZXI6ICJsaW5lYXIiLCBtaW5GaWx0ZXI6ICJsaW5lYXIi
fTsKLSAgICBjb25zdCBzYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoc2FtcGxlckRlc2Ny
aXB0b3IpOwotCi0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZ3MgPSBbe2JpbmRpbmc6IDAsIHJl
c291cmNlOiB0ZXh0dXJlVmlld30sIHtiaW5kaW5nOiAxLCByZXNvdXJjZTogc2FtcGxlcn1dOwot
ICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQs
IGJpbmRpbmdzOiBiaW5kR3JvdXBCaW5kaW5nc307Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2
aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVz
Y3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2Fw
Q2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsK
LSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7
Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQotCi0gICAgY29uc3QgYnVmZmVyQ29weVZpZXcgPSB7YnVmZmVy
OiB0ZXh0dXJlRGF0YUJ1ZmZlciwgcm93UGl0Y2g6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1F
TlQgKiA0ICogMiwgaW1hZ2VIZWlnaHQ6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0
ICogMiAqIDJ9OwotICAgIGNvbnN0IHRleHR1cmVDb3B5VmlldyA9IHt0ZXh0dXJlOiB0ZXh0dXJl
fTsKLSAgICBjb25zdCBjb3B5U2l6ZSA9IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDogMX07
Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShidWZmZXJDb3B5Vmlldywg
dGV4dHVyZUNvcHlWaWV3LCBjb3B5U2l6ZSk7Ci0KLSAgICBjb25zdCBjbGVhckNvbG9yID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3J9XTsKLSAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRl
eEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKLQotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci19Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0g
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBm
dW5jdGlvbigpIHsKLSAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJheS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5
LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1
NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lv
bmFsLWFycmF5LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotUEFT
UyAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5Lmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTM1OWI2YzhmMjExY2IwODkxNTZi
N2JkYWUxZTk3OGZlYTRiMjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJheS5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotdm9pZCBm
aWxsKHRocmVhZCBmbG9hdFsxMF1bXSBhcnJheSwgZmxvYXRbMTBdIHZhbHVlKSB7Ci0gICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgYXJy
YXlbaV0gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBhcnJh
eSwgZmxvYXQgdmFsdWUpIHsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7
IGkgPSBpICsgMSkgewotICAgICAgICBhcnJheVtpXSA9IHZhbHVlOwotICAgIH0KLX0KLQotYm9v
bCBjb250YWlucyh0aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0IHZhbHVlKSB7Ci0gICAg
Zm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAg
Zm9yICh1aW50IGogPSAwOyBqIDwgYXJyYXlbal0ubGVuZ3RoOyBqID0gaiArIDEpIHsKLSAgICAg
ICAgICAgIGlmIChhcnJheVtpXVtqXSAhPSB2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgY29u
dGFpbnModGhyZWFkIGZsb2F0W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7Ci0gICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgaWYgKGFycmF5
W2ldICE9IHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0
ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFk
SUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7Ci0gICAgZmxvYXRbMTBdWzVdIGFycmF5OwotICAg
IGlmIChhcnJheS5sZW5ndGggIT0gNSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghY29udGFp
bnMoQGFycmF5LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yICh1aW50IGkgPSAwOyBp
IDwgYXJyYXkubGVuZ3RoOyBpID0gaSArIDEpIHsKLSAgICAgICAgZmxvYXRbMTBdIHZhbHVlOwot
ICAgICAgICBmaWxsKEB2YWx1ZSwgZmxvYXQoaSkpOwotICAgICAgICBhcnJheVtpXSA9IHZhbHVl
OwotICAgIH0KLQotICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkg
KyAxKSB7Ci0gICAgICAgIGZsb2F0WzEwXSB2YWx1ZSA9IGFycmF5W2ldOwotICAgICAgICBpZiAo
IWNvbnRhaW5zKEB2YWx1ZSwgZmxvYXQoaSkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGJ1ZmZlclswXSA9IDE7Ci19Ci1gOwotYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNl
KSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3QgY29tcHV0ZVN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9
OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3ti
aW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OwotICAg
IGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKLSAgICBjb25zdCBw
aXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91
dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtj
b21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNvbnN0IGNvbXB1dGVQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVz
Y3JpcHRvcik7Ci0KLSAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVO
VCAqIDE7Ci0KLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OwotICAg
IGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7Ci0g
ICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygp
OwotICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFy
cmF5QnVmZmVyKTsKLSAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOwotICAgIGJ1ZmZlci51
bm1hcCgpOwotCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1Qg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07Ci0gICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwotCi0gICAgY29uc3Qg
YnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OwotICAgIGNvbnN0
IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9
OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlv
dXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNvbnN0IGJpbmRHcm91cCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7Ci0KLSAgICBjb25z
dCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQot
ICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNC
dWZmZXIsIDAsIHNpemUpOwotICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKLSAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdy
b3VwKDAsIGJpbmRHcm91cCk7Ci0gICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEs
IDEpOwotICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotCi0gICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVy
ID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKLSAgICBsZXQgcmVzdWx0c0lu
dDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwotICAgIGlmIChy
ZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKLSAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAg
ZWxzZQotICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKLSAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7
Ci19Ci13aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewot
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVz
dEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVuY3Rp
b24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsKLTwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXR5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNTc4Njg1YmQwY2MzNThlM2M4YzU1NWUwMWVjZGY3MmFhODYyNTdmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC10eXBlLW1pc21hdGNoLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBA
QAotCi1QQVNTIHR5cGVNaXNtYXRjaFJldHVybiAKLVBBU1MgdHlwZU1pc21hdGNoVmFyaWFibGVE
ZWNsIAotUEFTUyB0eXBlTWlzbWF0Y2hBc3NpZ25tZW50IAotUEFTUyB0eXBlTWlzbWF0Y2hSZXR1
cm5QYXJhbSAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUtbWlz
bWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC10eXBlLW1pc21hdGNoLmh0bWwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZWQyNDQzYzZkOTNkMmJlM2JhYjlmNzYy
YzZiNmRiYWI5NDQ4OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR5cGUtbWlzbWF0Y2guaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08bWV0YSBj
aGFyc2V0PXV0Zi04PgotPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Ci08dGl0
bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMudHlwZU1pc21hdGNoUmV0dXJuID0gYXN5bmMgKCkgPT4KLXsKLSAgICBh
d2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBmb28oKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAxMC41OwotICAgICAgICAgICAgfQotICAg
ICAgICBgKTsKLX0KLQotd2hsc2xUZXN0cy50eXBlTWlzbWF0Y2hWYXJpYWJsZURlY2wgPSBhc3lu
YyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAg
dm9pZCBmb28odWludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB5ID0g
eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXdobHNsVGVzdHMudHlwZU1pc21h
dGNoQXNzaWdubWVudCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICB2b2lkIGZvbyh1aW50IHgpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaW50IHk7Ci0gICAgICAgICAgICAgICAgeSA9IHg7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnR5cGVNaXNtYXRjaFJldHVyblBhcmFtID0g
YXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIGludCBmb28odWludCB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biB4OwotICAgICAgICAgICAgfQotICAgICAgICBgKTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0
cyk7Ci0KLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXVpbnQtYml0d2lzZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmNkNjg0ZjUzNTkxMTViMDQ0MjY1MjNlZTY2ZGU5MjA0NzhmMGY1OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBA
QAotCi1QQVNTIHVpbnRCaXRBbmQgCi1QQVNTIHVpbnRCaXRPciAKLVBBU1MgdWludEJpdFhvciAK
LVBBU1MgdWludEJpdE5vdCAKLVBBU1MgdWludExTaGlmdCAKLVBBU1MgdWludFJTaGlmdCAKLVBB
U1MgdWludFNpbXBsZU1hdGggCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC11aW50LWJpdHdpc2UuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11aW50LWJpdHdp
c2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1OTEzOTlhZGE2ZjFjNTQ2
YTk2ZDM1Y2JhZTNjODRhYTc3YjVjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdWludC1iaXR3aXNlLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KLTx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KLTxzY3JpcHQg
c3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3
aGxzbFRlc3RzID0ge307Ci0KLXdobHNsVGVzdHMudWludEJpdEFuZCA9IGFzeW5jICgpID0+IHsK
LSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhICYgYjsKLSAgICAgICAgfQotICAgIGA7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
bWFrZVVpbnQoMSksIG1ha2VVaW50KDcpXSksIDEpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KSwgbWFrZVVp
bnQoNDIpXSksIDQyKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludChNYXRoLnBvdygyLCAzMikgLSAxKSwgbWFrZVVpbnQo
TWF0aC5wb3coMiwgMzIpIC0gNyldKSwgNDI5NDk2NzI4OSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1ha2VV
aW50KDg1NzMyKV0pLCAwKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0T3IgPSBhc3luYyAoKSA9
PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBi
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSB8IGI7Ci0gICAgICAgIH0KLSAgICBg
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VVaW50KDEpLCBtYWtlVWludCg3KV0pLCA3KTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg2NTUzNSksIG1h
a2VVaW50KDQyKV0pLCA2NTUzNSk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1h
a2VVaW50KE1hdGgucG93KDIsIDMyKSAgLSA3KV0pLCA0Mjk0OTY3Mjk1KTsKLSAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgw
KSwgbWFrZVVpbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0WG9y
ID0gYXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICB1aW50IGZvbyh1
aW50IGEsIHVpbnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgXiBiOwotICAg
ICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgxKSwgbWFrZVVpbnQoNyldKSwgNik7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVp
bnQoNjU1MzUpLCBtYWtlVWludCg0MildKSwgNjU0OTMpOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIs
IDMyKSAtIDEpLCBtYWtlVWludChNYXRoLnBvdygyLCAzMikgLSA3KV0pLCA2KTsKLSAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWlu
dCgwKSwgbWFrZVVpbnQoODU3MzIpXSksIDg1NzMyKTsKLX0KLQotd2hsc2xUZXN0cy51aW50Qml0
Tm90ID0gYXN5bmMgKCkgPT4geyAKLSAgICBsZXQgcHJvZ3JhbSA9IGAKLSAgICAgICAgdWludCBm
b28odWludCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gfmE7Ci0gICAgICAgIH0K
LSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VVaW50KDEpXSksIDQyOTQ5NjcyOTQpOwotICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KV0p
LCA0Mjk0OTAxNzYwKTsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludChNYXRoLnBvdygyLCAzMikgLSAxKV0pLCAwKTsKLSAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlVWludCgwKV0pLCA0Mjk0OTY3Mjk1KTsKLX0KLQotd2hsc2xUZXN0cy51aW50TFNoaWZ0ID0g
YXN5bmMgKCkgPT4gewotICAgIGxldCBwcm9ncmFtID0gYAotICAgICAgICB1aW50IGZvbyh1aW50
IGEsIHVpbnQgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKLSAgICAg
ICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMSksIG1ha2VVaW50KDcpXSksIDEyOCk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVp
bnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAyNjIxNDApOwotICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIs
IDMyKSAtIDEpLCBtYWtlVWludCg1KV0pLCA0Mjk0OTY3MjY0KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFr
ZVVpbnQoMyldKSwgMCk7Ci19OwotCi13aGxzbFRlc3RzLnVpbnRSU2hpZnQgPSBhc3luYyAoKSA9
PiB7Ci0gICAgbGV0IHByb2dyYW0gPSBgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBi
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYSA+PiBiOwotICAgICAgICB9Ci0gICAg
YDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlVWludCgxKSwgbWFrZVVpbnQoNyldKSwgMCk7Ci0gICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBt
YWtlVWludCgyKV0pLCAxNjM4Myk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1h
a2VVaW50KDUpXSksIDEzNDIxNzcyNyk7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWlu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1ha2VVaW50KDMpXSksIDAp
OwotfTsKLQotd2hsc2xUZXN0cy51aW50U2ltcGxlTWF0aCA9IGFzeW5jICgpID0+IHsKLSAgICBs
ZXQgcHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCArIHk7IH0i
OwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCAxMik7Ci0KLSAgICBwcm9ncmFtID0gInVp
bnQgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4IC0geTsgfSI7Ci0gICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyks
IG1ha2VVaW50KDUpXSksIDIpOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDUpLCBtYWtlVWludCg3KV0pLCA0Mjk0OTY3
Mjk0KTsKLQotICAgIHByb2dyYW0gPSAidWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJu
IHggKiB5OyB9IjsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlVWludCg3KSwgbWFrZVVpbnQoNSldKSwgMzUpOwotCi0gICAgLy8g
RklYTUU6IG1ha2UgdGhpcyB3b3JrOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk5NjAyCi0gICAgLy8gcHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkg
eyByZXR1cm4geCAvIHk7IH0iOwotICAgIC8vIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCgyKV0pLCAzKTsK
LX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFi
bGUtMi1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODJmOTA0
NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRl
ZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAg
QEAKLVBBU1MgCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExF
VEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQt
dmFyaWFibGUtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQt
dmFyaWFibGUtMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmU4NTJmMzk5
ZTlhZGIwNTAxNzg0OTA2MjVjOTFiMDg1YjAyYjllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZp
bmVkLXZhcmlhYmxlLTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291
cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwgMSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRl
cihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6
IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAgICBmbG9hdDQgdmVjID0gZmxvYXQ0KHgseCx4LHgp
OwotfQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgY29uc3QgYWRhcHRlciA9
IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKLSAgICBjb25zdCBkZXZpY2Ug
PSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKLQotICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29t
cHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotfQotCi13aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0UGFz
c2VkKCIiKTsKLSAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRlc3RGYWlsZWQoIiIpOwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9KTsK
LX0sIGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIpOwotICAgIGZpbmlzaEpTVGVzdCgp
OwotfSk7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3
ZjhmNmFmMjMxODJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdXNlLXVuZGVmaW5lZC12YXJpYWJsZS1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVBBU1MgCi1QQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC11c2UtdW5kZWZpbmVkLXZhcmlhYmxlLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhN2NkNjIzNjU3NTQ5YTM4Yzk2NWFhY2FkYTlkYWI3MDUx
YTM1MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXVzZS11bmRlZmluZWQtdmFyaWFibGUuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDUxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4K
LTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJv
ZHk+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotW251bXRocmVhZHMoMSwgMSwg
MSldCi1jb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiBy
ZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKLSAg
ICBmbG9hdCBmb287Ci0gICAgaWYgKGZvbykgewotICAgICAgICB4ID0geCArIDE7Ci0gICAgfQot
fQotYDsKLQotYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgY29uc3QgYWRhcHRlciA9IGF3
YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKLSAgICBjb25zdCBkZXZpY2UgPSBh
d2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKLQotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOwotICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlw
ZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmlu
ZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
UGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5l
TGF5b3V0fTsKLSAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0
ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotfQotCi13aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7
Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAgIHRlc3RQYXNzZWQoIiIp
OwotICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGVzdEZhaWxlZCgiIik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgIH0pOwotfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19KTsK
LTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXZhcmlhYmxlLXNoYWRvd2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWRlZTViNTg5YjQ3Yzg1YWIyYTQ4MDU5MWYwNzc3MjFmZWUwMjk4MS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4dAorKysgL2Rldi9u
dWxsCkBAIC0xLDMgKzAsMCBAQAotCi1QQVNTIHZhcmlhYmxlU2hhZG93aW5nIAotCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmFyaWFibGUtc2hhZG93aW5nLmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYzFhNDM1ZGNmMTA1ZWZiNWY2ZTYyMTBmNzM2ZWE2MDE3
ZjcyZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZhcmlhYmxlLXNoYWRvd2luZy5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJz
ZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5U
ZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3Rz
LnZhcmlhYmxlU2hhZG93aW5nID0gYXN5bmMgKCkgPT4KLXsKLSAgICBsZXQgcHJvZ3JhbSA9IGAK
LSAgICAgICAgaW50IGZvbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5OwotICAgICAg
ICAgICAgaW50IHggPSA3OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB4ID0g
ODsKLSAgICAgICAgICAgICAgICB5ID0geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiB5OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA4KTsKLQotICAgIHByb2dyYW0gPSBgCi0g
ICAgICAgIGludCBmb28oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeTsKLSAgICAgICAg
ICAgIGludCB4ID0gNzsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IDg7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB5ID0geDsKLSAgICAgICAgICAgIHJldHVybiB5
OwotICAgICAgICB9Ci0gICAgYDsKLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3KTsKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7
Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC12ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC12
ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjAwZWQwOWFmOTkyMDM4MDJiNjM5MTZjNmE1NjgwMWE3NDU2ZDAxOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dmVjdG9yLXN5bnRheC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LQotUEFTUyB2ZWN0b3JUeXBlU3ludGF4IAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtdmVjdG9yLXN5bnRheC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXZl
Y3Rvci1zeW50YXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxNWYzOTJi
MWRmOWYyNzdmODk4MGU5M2RiNDY1YThjMjk5OWQxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdmVjdG9yLXN5
bnRheC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+
Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KLTxzY3JpcHQgc3JjPSJq
cy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1jb25zdCB3aGxzbFRlc3RzID0ge307
Ci0KLXdobHNsVGVzdHMudmVjdG9yVHlwZVN5bnRheCA9IGFzeW5jICgpID0+Ci17Ci0gICAgbGV0
IHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28yKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50MiB4OwotICAgICAgICAgICAgdmVjdG9yPGludCwgMj4geiA9IGludDIoMywgNCk7Ci0gICAg
ICAgICAgICB4ID0gejsKLSAgICAgICAgICAgIHJldHVybiB4Lnk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbnQgZm9vMygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDMgeDsKLSAgICAgICAg
ICAgIHZlY3RvcjxpbnQsIDM+IHogPSBpbnQzKDMsIDQsIDUpOwotICAgICAgICAgICAgeCA9IHo7
Ci0gICAgICAgICAgICByZXR1cm4geC56OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGZvbzQo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQ0IHg7Ci0gICAgICAgICAgICB2ZWN0b3I8aW50
LDQ+IHogPSBpbnQ0KDMsIDQsIDUsIDYpOwotICAgICAgICAgICAgeCA9IHo7Ci0gICAgICAgICAg
ICByZXR1cm4geC53OwotICAgICAgICB9YDsKLQotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0KTsKLSAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgNSk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDYp
OwotCi0gICAgcHJvZ3JhbSA9IGAKLSAgICAgICAgdHlwZWRlZiBpID0gaW50OwotICAgICAgICBp
bnQgZm9vMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludDIgeDsKLSAgICAgICAgICAgIHZl
Y3RvcjxpLCAyPiB6ID0gaW50MigzLCA0KTsKLSAgICAgICAgICAgIHggPSB6OwotICAgICAgICAg
ICAgcmV0dXJuIHgueTsKLSAgICAgICAgfWA7Ci0KLSAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgNCk7Ci19Ci1ydW5UZXN0cyh3aGxz
bFRlc3RzKTsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxi
b2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOwotZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFz
KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWsuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY5MDYzMDNhMjhiNWY0NGJhMThiZGJjMzQ0ZDg0ZmQ4ODE5OWMwOTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXdoaWxlLWxvb3AtYnJlYWsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNo
YWRlclNvdXJjZSA9IGAKLXN0cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uOwotICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0
ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCks
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQot
ICAgIGJvb2wgYiA9IHRydWU7Ci0gICAgdWludCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IDEwKSB7
Ci0gICAgICAgIGlmIChiKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBzaGFkZSA9IHNoYWRlICsgMS4wOwotICAgICAgICBpID0gaSArIDE7Ci0gICAgfQotCi0gICAg
cmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewotICAgIHJldHVybiBm
bG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKLX0KLWA7Ci0KLWNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLQotYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7Ci0gICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Ci0gICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKLSAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKLSAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Ci0gICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Ci0gICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCi0gICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOwotCi0gICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlv
bjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKLSAgICBjb25zdCBhdHRyaWJ1dGUx
ID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OwotICAg
IGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07Ci0gICAgY29uc3Qg
aW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Ci0gICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07Ci0gICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVm
ZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwotICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29u
c3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRl
eEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzVdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gMC4wOwotCi0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTNdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOwotCi0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
N10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7Ci0gICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7Ci0gICAgdmVydGV4QnVmZmVyMC51
bm1hcCgpOwotCi0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZP
Uk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwotICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwotICAgIHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKLSAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOwotCi0g
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0
fTsKLSAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBi
dWZmZXJCaW5kaW5nfTsKLSAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDog
YmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKLSAgICBjb25z
dCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3Ip
OwotCi0gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKLSAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OwotICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKLQotICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Ci0gICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OwotICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwotICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwotICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OwotICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyMF0sIFswXSk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Ci0gICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwotICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwotfQotCi1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0g
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci1nZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7Ci0gICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSk7Ci19LCBm
dW5jdGlvbigpIHsKLSAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOwotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Ci19KTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLWV4
cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTNhMjY1NTMyMWYz
MzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29u
dGludWUtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotZHJhd1doaXRlU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29u
dGludWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVl
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlN2RiOWFiM2UyYTM5NzIyMTc5
ZjIwMWI0ZjZhNzgzNjBmOWU5ZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgotPHNjcmlwdD4KLWNvbnN0IHNoYWRlclNvdXJjZSA9IGAKLXN0
cnVjdCBWZXJ0ZXhPdXQgewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwotICAg
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOwotfQotCi12ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7Ci0gICAgVmVydGV4T3V0IHJlc3VsdDsKLQotICAgIGJvb2wgYiA9IHRydWU7
Ci0gICAgdWludCBpID0gMDsKLSAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAwLjEsIGkgPCAx
MCkpIHsKLSAgICAgICAgaWYgKGIpIHsKLSAgICAgICAgICAgIGkgPSBpICsgMTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHNoYWRlID0gMC4wOwotICAgIH0KLQot
ICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRl
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1
cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1bmN0aW9u
IHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwotICAgIGNv
bnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVy
dGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJpbWl0aXZl
VG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0
ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0IGFscGhh
QmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JT
dGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3
cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0IGRlcHRo
U3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3QgYXR0cmli
dXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsK
LSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwotICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OwotICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3Jt
LWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKLSAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4xOwotCi0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9
IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs5XSA9IDAuMTsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41
OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMTsK
LQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwot
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4xOwotICAgIHZlcnRleEJ1ZmZl
cjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
OiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5V
TklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIu
bWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsK
LQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6
ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0g
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
LSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctYXJndW1lbnQtbGVuZ3RoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5n
dGgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmNlMzY5NDU4
MTk4NTdhZmUxZDA0MTczNGRjMGQxZTE1MTJiMjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy1hcmd1
bWVudC1sZW5ndGgtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAot
Ci1QQVNTIGJpdEFuZFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGJpdE5vdFdyb25nQXJndW1l
bnRMZW5ndGggCi1QQVNTIGJpdE9yV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgYml0WG9yV3Jv
bmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZGVjV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZGl2
aWRlV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgZG90T3BlcmF0b3JTZXR0ZXJXcm9uZ0FyZ3Vt
ZW50TGVuZ3RoIAotUEFTUyBkb3RPcGVyYXRvcldyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGdy
ZWF0ZXJFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIGdyZWF0ZXJXcm9uZ0FyZ3VtZW50
TGVuZ3RoIAotUEFTUyBpbmNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAotUEFTUyBpbmRleE9wZXJhdG9y
U2V0dGVyV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1MgaW5kZXhPcGVyYXRvcldyb25nQXJndW1l
bnRMZW5ndGggCi1QQVNTIGxTaGlmdFdyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIG1pbnVzV3Jv
bmdBcmd1bWVudExlbmd0aCAKLVBBU1MgbW9kdWxvV3JvbmdBcmd1bWVudExlbmd0aCAKLVBBU1Mg
cGx1c1dyb25nQXJndW1lbnRMZW5ndGggCi1QQVNTIHJTaGlmdFdyb25nQXJndW1lbnRMZW5ndGgg
Ci1QQVNTIHRpbWVzV3JvbmdBcmd1bWVudExlbmd0aCAKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXdyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXdyb25nLWFyZ3VtZW50LWxlbmd0aC5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ZWM0MTkxYjEwZjVjMGFhZWNjYmZmNTY0NWQ0MzNjZmU2Mjc1ZDkyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC13cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDM2NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPG1ldGEgY2hhcnNldD11
dGYtOD4KLTxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgotPHRpdGxlPlRlc3Qg
aW50IGJpdCBtYXRoLjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNz
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0PgotY29uc3Qgd2hsc2xUZXN0cyA9IHt9OwotCi13aGxzbFRlc3RzLmJpdEFu
ZFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFp
bCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGlu
dCBvcGVyYXRvciYoRm9vKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsg
fQotICAgICAgICAgICAgaW50IG9wZXJhdG9yJihGb28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAg
ICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAg
ICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yJihGb28sIEZvbywg
Rm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3Rz
LmJpdE5vdFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yfigpIHsgcmV0dXJu
IDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0
b3J+KEZvbywgRm9vKSB7IHJldHVybiA1MzQ7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQot
d2hsc2xUZXN0cy5iaXRPcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAg
IGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0K
LSAgICAgICAgICAgIGludCBvcGVyYXRvcnwoKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsK
LSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yfChGb28pIHsgcmV0dXJuIDUz
NDsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9y
fChGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19
Ci13aGxzbFRlc3RzLmJpdFhvcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgotewot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9y
XigpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVj
a0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAg
ICBpbnQgb3BlcmF0b3JeKEZvbykgeyByZXR1cm4gNTM0OyB9Ci0gICAgICAgIGApOwotICAgICAg
ICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBG
b28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3JeKEZvbywgRm9vLCBGb28pIHsgcmV0dXJu
IDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVzdHMuZGVjV3JvbmdBcmd1
bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAg
ICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3ItLSgpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAg
IGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAg
ICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3ItLShGb28sIEZvbykg
eyByZXR1cm4gNzY7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy5kaXZp
ZGVXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvci8oKSB7IHJldHVybiAzMjsg
fQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBg
Ci0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yLyhG
b28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yLyhGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmRvdE9wZXJhdG9yU2V0dGVyV3JvbmdBcmd1bWVu
dExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBg
Ci0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgRm9vIG9wZXJhdG9yLmZv
bz0oKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgRm9vIG9wZXJhdG9yLmZvbz0oRm9vKSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAg
ICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsgfQotICAgICAgICAgICAgRm9vIG9wZXJhdG9yLmZvbz0oRm9vLCBpbnQsIGludCkg
eyByZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy5kb3RP
cGVyYXRvcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbygpIHsgcmV0
dXJuIDQyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0g
ICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3Bl
cmF0b3IuZm9vKEZvbywgaW50KSB7IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAg
Ci19Ci13aGxzbFRlc3RzLmdyZWF0ZXJFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAo
KSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj49KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0g
ICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsg
fQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQotICAg
ICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj49KEZvbywg
Rm9vLCBGb28pIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hs
c2xUZXN0cy5ncmVhdGVyV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17Ci0gICAg
YXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPigp
IHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNr
RmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3I+KEZvbykgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAg
ICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsgfQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj4oRm9vLCBGb28sIEZvbykgeyByZXR1
cm4gdHJ1ZTsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmluY1dyb25n
QXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKysoKSB7IHJldHVybiAzMjsgfQotICAg
ICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAg
ICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yKysoRm9vLCBG
b28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVzdHMu
aW5kZXhPcGVyYXRvclNldHRlcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9Pgotewot
ICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9y
W109KCkgeyByZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCkgeyBy
ZXR1cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgaW50KSB7IHJldHVy
biA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAg
ICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCBpbnQsIGludCwgaW50KSB7
IHJldHVybiA0MjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmluZGV4
T3BlcmF0b3JXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcltdKCkgeyByZXR1
cm4gNDI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAg
ICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oaW50KSB7IHJldHVybiA0MjsgfQot
ICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0g
ICAgICAgICAgICBpbnQgb3BlcmF0b3JbXShpbnQsIGludCwgaW50KSB7IHJldHVybiA0MjsgfQot
ICAgICAgICBgKTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLmxTaGlmdFdyb25nQXJndW1lbnRM
ZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAot
ICAgICAgICAgICAgaW50IG9wZXJhdG9yPDwoKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsK
LSAgICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPDwoRm9vKSB7IHJldHVybiA1
MzQ7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAg
ICAgYAotICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KLSAgICAgICAgICAgIGludCBvcGVyYXRv
cjw8KEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAK
LX0KLXdobHNsVGVzdHMubWludXNXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KLXsK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRv
ci0oKSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yLShGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQotICAgICAgICBg
KTsKLSAgICAgICAgCi19Ci13aGxzbFRlc3RzLm1vZHVsb1dyb25nQXJndW1lbnRMZW5ndGggPSBh
c3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAg
ICAgaW50IG9wZXJhdG9yJSgpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAK
LSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28g
eyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IlKEZvbykgeyByZXR1cm4gNTM0OyB9Ci0gICAg
ICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAg
ICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IlKEZvbywgRm9v
LCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLX0KLXdobHNsVGVz
dHMucGx1c1dyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNo
ZWNrRmFpbCgKLSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKygpIHsgcmV0dXJu
IDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAg
ICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0
b3IrKEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwotICAgICAgICAK
LX0KLXdobHNsVGVzdHMuclNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Ci17
Ci0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0
b3I+PigpIHsgcmV0dXJuIDMyOyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAg
ICAgICBpbnQgb3BlcmF0b3I+PihGb28pIHsgcmV0dXJuIDUzNDsgfQotICAgICAgICBgKTsKLSAg
ICAgICAgCi0gICAgYXdhaXQgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yPj4oRm9vLCBGb28sIEZvbykgeyBy
ZXR1cm4gNzY7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotd2hsc2xUZXN0cy50aW1lc1dy
b25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgotewotICAgIGF3YWl0IGNoZWNrRmFpbCgK
LSAgICAgICAgYAotICAgICAgICAgICAgaW50IG9wZXJhdG9yKigpIHsgcmV0dXJuIDMyOyB9Ci0g
ICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAg
ICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBpbnQgb3BlcmF0b3IqKEZvbykg
eyByZXR1cm4gNTM0OyB9Ci0gICAgICAgIGApOwotICAgICAgICAKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIHN0cnVjdCBGb28geyB9Ci0gICAgICAgICAgICBp
bnQgb3BlcmF0b3IqKEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2OyB9Ci0gICAgICAgIGApOwot
ICAgICAgICAKLX0KLQotcnVuVGVzdHMod2hsc2xUZXN0cyk7Ci08L3NjcmlwdD4KLTwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTUxOGYxYjU5ZDY0NjJmYTY2NTdiMTU1
NzJhNDI4YjhkNTFjYWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC13cm9uZy10eXBlcy1leHBlY3RlZC50eHQK
KysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotUEFTUyBkZWNXcm9uZ1R5cGVzIAotUEFT
UyBpbmNXcm9uZ1R5cGVzIAotUEFTUyBncmVhdGVyVGhhbldyb25nUmV0dXJuVHlwZSAKLVBBU1Mg
Z3JlYXRlckVxdWFsV3JvbmdSZXR1cm5UeXBlIAotUEFTUyBpbmRleFNldHRlcldpdGhNaXNtYXRj
aGVkVHlwZSAKLVBBU1Mgc2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlIAotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd3JvbmctdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC13cm9uZy10eXBlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyZTFhMTYxNjkyOWFiM2IxYWIxYThkODM2NTFkZGVjNWY4YTc3NTUxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC13cm9uZy10eXBlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxtZXRhIGNoYXJzZXQ9dXRmLTg+Ci08bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KLTx0aXRsZT5UZXN0IGludCBiaXQgbWF0aC48L3RpdGxlPgot
PHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWNvbnN0IHdo
bHNsVGVzdHMgPSB7fTsKLQotd2hsc2xUZXN0cy5kZWNXcm9uZ1R5cGVzID0gYXN5bmMgKCkgPT4K
LXsKLSAgICBhd2FpdCBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVy
YXRvci0tKGZsb2F0KSB7IHJldHVybiAzMjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci0K
LXdobHNsVGVzdHMuaW5jV3JvbmdUeXBlcyA9IGFzeW5jICgpID0+Ci17Ci0gICAgYXdhaXQgY2hl
Y2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBpbnQgb3BlcmF0b3IrKyhmbG9hdCkgeyBy
ZXR1cm4gMzI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13aGxzbFRlc3RzLmdyZWF0
ZXJUaGFuV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBjaGVja0Zh
aWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcj4oaW50IGEsIGludCBiKSB7
IHJldHVybiBhICsgYjsgfQotICAgICAgICBgKTsKLSAgICAgICAgCi19Ci0KLXdobHNsVGVzdHMu
Z3JlYXRlckVxdWFsV3JvbmdSZXR1cm5UeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAgICBhd2FpdCBj
aGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGludCBvcGVyYXRvcj49KGludCBhLCBp
bnQgYikgeyByZXR1cm4gYSArIGI7IH0KLSAgICAgICAgYCk7Ci0gICAgICAgIAotfQotCi13aGxz
bFRlc3RzLmluZGV4U2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlID0gYXN5bmMgKCkgPT4KLXsKLSAg
ICBjaGVja0ZhaWwoCi0gICAgICAgIGAKLSAgICAgICAgICAgIGZsb2F0IG9wZXJhdG9yW10oaW50
LCB1aW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1LjQzOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgdWludCwgaW50KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA1NDM7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGApOwotfQotCi13aGxzbFRlc3RzLnNldHRlcldpdGhNaXNtYXRjaGVkVHlwZSA9
IGFzeW5jICgpID0+Ci17Ci0gICAgY2hlY2tGYWlsKAotICAgICAgICBgCi0gICAgICAgICAgICBm
bG9hdCBvcGVyYXRvci5mb28oaW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiA1LjQzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbz0o
aW50LCBpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgYCk7Ci19Ci0KLXJ1blRlc3RzKHdobHNsVGVzdHMpOwotPC9z
Y3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIy
ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZTlkODNkYmNiMzZiMmY1ODBjZjY5ZjdiYThk
NzBlMjI4Y2QzMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+
Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qgc2hhZGVyU291cmNlID0gYAotc3RydWN0
IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Ci0gICAgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLXN0cnVjdCBCYXIgewotICAgIGZsb2F0IHk7
Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeTI7Ci0gICAgZmxvYXQgeTM7Ci0gICAgZmxvYXQg
eTQ7Ci0gICAgZmxvYXQgeTU7Ci0gICAgZmxvYXQgeTY7Ci0gICAgZmxvYXQgeTc7Ci0gICAgZmxv
YXQgeTg7Ci0gICAgZmxvYXQgeTk7Ci0gICAgZmxvYXQgeTEwOwotICAgIGZsb2F0IHkxMTsKLSAg
ICBmbG9hdCB5MTI7Ci0gICAgZmxvYXQgeTEzOwotICAgIGZsb2F0IHkxNDsKLSAgICBmbG9hdCB5
MTU7Ci0gICAgZmxvYXQgeTE2OwotICAgIGZsb2F0IHkxNzsKLSAgICBmbG9hdCB5MTg7Ci0gICAg
ZmxvYXQgeTE5OwotICAgIGZsb2F0IHkyMDsKLX0KLQotdmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgxKSkgewotICAgIFZlcnRleE91dCByZXN1bHQ7Ci0KLSAgICBCYXIgYmFyOwotCi0gICAg
cmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LnNoYWRlID0gYmFyLnkyMDsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Ci0gICAgcmV0dXJu
IGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwotfQotYDsKLQotY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwotCi1hc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKLSAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKLSAgICBjb25z
dCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OwotICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OwotICAgIGNvbnN0IHByaW1pdGl2ZVRv
cG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKLSAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUg
PSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKLSAgICBjb25zdCBhbHBoYUJs
ZW5kID0ge307Ci0gICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OwotICAgIGNvbnN0IGNvbG9yU3Rh
dGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3Jp
dGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKLSAgICBjb25zdCBkZXB0aFN0
ZW5jaWxTdGF0ZSA9IG51bGw7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0
aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OwotICAgIGNvbnN0IGF0dHJpYnV0
ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07Ci0g
ICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKLSAgICBjb25z
dCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKLSAgICBj
b25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKLSAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OwotCi0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1i
dWZmZXIifV19OwotICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKLSAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9n
eSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZl
cnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Ci0gICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVz
Y3JpcHRvcik7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJd
ID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAw
LjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbOV0gPSAxLjA7Ci0KLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxM10gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Ci0K
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE3XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKLSAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIw
LnVubWFwKCk7Ci0KLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5J
Rk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Ci0gICAgY29uc3QgcmVzb3VyY2VCdWZm
ZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Ci0gICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1h
cFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7Ci0gICAgcmVzb3VyY2VC
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7Ci0K
LSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6
IDR9OwotICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OwotICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OwotICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7Ci0KLSAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwotICAg
IGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3Jt
In07Ci0gICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dh
cENoYWluRGVzY3JpcHRvcik7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5n
ZXRDdXJyZW50VGV4dHVyZSgpOwotICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0
VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwotCi0gICAgY29uc3QgY29tbWFuZEVuY29kZXIg
PSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KLSAgICBjb25zdCByZWQgPSB7
cjogMCwgZzogMCwgYjogMSwgYTogMX07Ci0gICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7
YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRP
cDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Ci0gICAgY29u
c3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7Ci0gICAgY29uc3QgcmVuZGVyUGFzc0Rl
c2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Ci0g
ICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBh
c3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAo
MCwgYmluZEdyb3VwKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAs
IFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKLSAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKLSAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Ci0gICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Ci19Ci0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikK
LSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9KTsKLX0s
IGZ1bmN0aW9uKCkgewotICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12
YWx1ZXMtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmODY5
YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1p
bml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAs
MCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1j
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci1kcmF3Qmxh
Y2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwotPC9zY3JpcHQ+Ci08
L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8t
aW5pdGlhbGl6ZS12YWx1ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEy
NTY4ZmFjYzEyZTM4MDkyNjk5M2M2ZTQyNDU2NTU4NzZlN2U5Mi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAK
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2Fu
dmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Ci08c2NyaXB0PgotY29uc3Qg
c2hhZGVyU291cmNlID0gYAotc3RydWN0IFZlcnRleE91dCB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb247Ci0gICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Ci19Ci0KLXRo
cmVhZCBmbG9hdCogcHRyKCkgewotICAgIGZsb2F0IGxvY2FsOwotICAgIHJldHVybiAmbG9jYWw7
Ci19Ci0KLXZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0
dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKLSAgICBWZXJ0ZXhPdXQg
cmVzdWx0OwotCi0gICAgdGhyZWFkIGZsb2F0KiBwID0gcHRyKCk7Ci0gICAgKnAgPSAxLjA7Ci0g
ICAgZmxvYXQgdmFsdWUgPSAqcHRyKCk7IC8vIGNhbGxpbmcgcHRyKCkgemVybyBpbml0aWFsaXpl
cy4KLQotICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5zaGFkZSA9
IHZhbHVlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKLSAg
ICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Ci19Ci1gOwotCi1jb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwot
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLQotICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Ci0gICAgY29uc3Qg
YXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6
IDE2fTsKLSAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwot
ICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9
OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwotICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307Ci0KLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1
bmlmb3JtLWJ1ZmZlciJ9XX07Ci0gICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91
cExheW91dF19OwotICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKLSAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotCi0gICAgY29uc3QgdmVydGV4QnVmZmVyMERl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBh
d2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZm
ZXIpOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OwotICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsK
LSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOwotCi0gICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs2XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOwotICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs5XSA9IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBd
ID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKLSAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEzXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9
IDEuMDsKLQotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OwotICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTddID0gMS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0g
MS4wOwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOwotICAgIHZlcnRl
eEJ1ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9y
KTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VC
dWZmZXIubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5t
YXAoKTsKLQotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZl
ciwgc2l6ZTogNH07Ci0gICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCBy
ZXNvdXJjZTogYnVmZmVyQmluZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9
IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07
Ci0gICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBE
ZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1
Iik7Ci0gICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJn
cmE4dW5vcm0ifTsKLSAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBD
aGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dh
cENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcg
PSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0
IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1l
bnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVs
bCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsK
LSAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5k
ZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50fTsKLSAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
UmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJp
bmRHcm91cCgwLCBiaW5kR3JvdXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLQotaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewotICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAg
IH0pOwotfSwgZnVuY3Rpb24oKSB7Ci0gICAgZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotfSk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Y2Ew
ZGQzYmJhZjhjZDEwMTMxMmIwOGVhNzljOGNlODFmODZjNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxoZWFkPgotPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KLTxzY3JpcHQ+Ci1jb25zdCBzaGFkZXJTb3VyY2UgPSBgCi12ZXJ0ZXgg
ZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0
IGkgOiBhdHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24gewotICAgIHJldHVybiBwb3NpdGlvbjsK
LX0KLQotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNW
X1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci1gOwot
Ci1jb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Ci0KLWFz
eW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewotICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1
ZX0pOwotICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAidmVydGV4U2hhZGVyIn07Ci0gICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Ci0gICAgY29u
c3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwotICAgIGNvbnN0IHJhc3Rl
cml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OwotICAg
IGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKLSAgICBjb25zdCBjb2xvckJsZW5kID0ge307Ci0gICAg
Y29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBj
b2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAotICAg
IGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKLSAgICAKLSAgICBjb25zdCBhdHRyaWJ1
dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKLSAgICBjb25zdCBh
dHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OwotICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07Ci0g
ICAgY29uc3QgaW5wdXQxID0ge3N0cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMV19
OwotICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDAsIGlucHV0MV07Ci0gICAgY29uc3QgdmVydGV4
SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKLQotICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKLSAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwot
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07Ci0gICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKLQotICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwg
cHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRo
U3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OwotICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRl
clBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0KLSAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07Ci0gICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIo
dmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOwotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1
ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOwotICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBB
cnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Ci0gICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNd
ID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKLSAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OwotICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNl0gPSAxLjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7Ci0g
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzldID0gLTAuNTsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEw
XSA9IDEuMDsKLSAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7Ci0gICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxM10gPSAwLjU7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAx
LjA7Ci0gICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOwotICAgIHZlcnRleEJ1
ZmZlcjAudW5tYXAoKTsKLQotICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwotICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjEgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsK
LSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIx
Lm1hcFdyaXRlQXN5bmMoKTsKLSAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOwotICAgIHZlcnRleEJ1
ZmZlcjFGbG9hdDMyQXJyYXlbMF0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlb
MV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOwotICAgIHZlcnRl
eEJ1ZmZlcjFGbG9hdDMyQXJyYXlbM10gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsK
LQotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKLSAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3lu
YygpOwotICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKLSAgICByZXNvdXJjZUJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IDE7Ci0gICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKLQotICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Ci0gICAg
Y29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmlu
ZGluZ307Ci0gICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91
cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Ci0gICAgY29uc3QgYmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKLQotICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Ci0gICAgY29uc3Qgc3dh
cENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKLSAgICBj
b25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNj
cmlwdG9yKTsKLSAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRU
ZXh0dXJlKCk7Ci0gICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNy
ZWF0ZURlZmF1bHRWaWV3KCk7Ci0KLSAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5j
cmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAw
LCBiOiAxLCBhOiAxfTsKLSAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50
OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIi
LCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKLSAgICBjb25zdCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKLSAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9
IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKLSAgICBjb25zdCBy
ZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQ
YXNzRGVzY3JpcHRvcik7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVy
UGlwZWxpbmUpOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3Jv
dXApOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1
ZmZlcjAsIHZlcnRleEJ1ZmZlcjFdLCBbMCwgMF0pOwotICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7Ci0gICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwotICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKLSAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKLX0KLWlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLWdldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKLSAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICB9
KTsKLX0sIGZ1bmN0aW9uKCkgewotICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJiaXRyYXJ5LXZlcnRleC1h
dHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvYXJiaXRyYXJ5LXZlcnRleC1hdHRyaWJ1dGUtbG9jYXRpb25zLWV4cGVjdGVkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJpdHJhcnktdmVydGV4LWF0
dHJpYnV0ZS1sb2NhdGlvbnMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJpdHJhcnktdmVydGV4
LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmJp
dHJhcnktdmVydGV4LWF0dHJpYnV0ZS1sb2NhdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWEwNDE0
N2Q1MDEwNjVjODQyYmFhY2YxM2IzMzdlZGExNDYwOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FyYml0cmFyeS12ZXJ0ZXgtYXR0cmlidXRlLWxvY2F0aW9u
cy5odG1sCkBAIC0wLDAgKzEsMTMyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMTczKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoNDk4
KSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDAp
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUs
IDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNv
bnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDE3MywgZm9ybWF0OiAiZmxvYXQ0In07
CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogNDk4LCBmb3JtYXQ6ICJm
bG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRy
aWJ1dGVTZXQ6IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOwor
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MzYyYzJhODIzZTY2MjZhNjU4OTYyMDE0YzhhNzdlMzE3NDhj
MmRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FyZ3VtZW50
LWV2YWx1YXRpb24tb3JkZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGV2
YWx1YXRpb25PcmRlckZvckFyZ3VtZW50cyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2FyZ3VtZW50LWV2YWx1YXRpb24tb3JkZXIuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBl
YThkMTY1ZDBmMGQyZTAwODYxYjc1OGM0MjhiNjEyZTExN2I0MwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcmd1bWVudC1ldmFsdWF0aW9uLW9yZGVyLmh0bWwK
QEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9
dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5Db3B5
aW5nLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmV2YWx1YXRpb25PcmRl
ckZvckFyZ3VtZW50cyA9IGFzeW5jICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAg
ICAgICBpbnQgZm9vKCkgeyByZXR1cm4gKmJhcigxMCkgKyAqYmFyKDIwKTsgfQorCisgICAgICAg
IHRocmVhZCBpbnQqIGJhcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4
ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKworICAgICAgICBp
bnQgYmF6KCkgeyByZXR1cm4gcGx1cyhiYXIoMTApLCBiYXIoMjApKTsgfQorCisgICAgICAgIGlu
dCBwbHVzKHRocmVhZCBpbnQqIHgsIHRocmVhZCBpbnQqIHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqeCArICp5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgNDAp
OworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FycmF5LWxlbmd0aC1zcGVjLXRlc3Rz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1sZW5ndGgtc3Bl
Yy10ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTUzM2U4YWFmMDJlM2E0MDRkZDI0MjBm
MWM5YTk0ZjdiMDdmNGE3ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9hcnJheS1sZW5ndGgtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBA
CisKK1BBU1Mgbm9uQXJyYXlSZWZBcnJheUxlbmd0aEZhaWwgCitQQVNTIG5vbkFycmF5UmVmQXJy
YXlMZW5ndGhTdWNjZWVkIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
YXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9h
cnJheS1sZW5ndGgtc3BlYy10ZXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NzcwNGNhZTgzOGI5ZTVh
ODUyMDNmODNiYzc4NmMzMGYzNWIwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvYXJyYXktbGVuZ3RoLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDQ1IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5h
bWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxl
PgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0
IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5ub25BcnJheVJlZkFycmF5TGVuZ3RoRmFp
bCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAg
ICAgICAgICB0aHJlYWQgdWludCogbGVuZ3RoUHRyKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbnRbNDJdIGFycmF5OworICAgICAgICAgICAgICAgIHJldHVybiAmKGFycmF5Lmxl
bmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLm5vbkFy
cmF5UmVmQXJyYXlMZW5ndGhTdWNjZWVkID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGAKKyAgICAgICAgdWludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdFs3
NTRdIGFycmF5OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQor
ICAgICAgICB1aW50IGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludFs3NTRdIGFycmF5
OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgIGA7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSksIDc1NCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dy
YW0sICJiYXIiLCBbXSksIDc1NCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3Jp
cHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJyYXkt
c3BlYy10ZXN0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYXJyYXkt
c3BlYy10ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY4NWIxZjZlNmZmMDk0MWZjNjM4
NGQ5MmM4MzgyYjI3ZDJiMDJiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKKwor
UEFTUyBhcnJheVJlZlRvQXJyYXlSZWYgCitQQVNTIGFzc2lnbkxlbmd0aCAKK1BBU1MgYXNzaWdu
TGVuZ3RoSGVscGVyIAorUEFTUyBidWlsZEFycmF5VGhlblN1bUl0IAorUEFTUyBidWlsZEFycmF5
VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSAKK1BBU1MgcGFzc2luZ0FycmF5VG9GdW5jdGlv
biAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2FycmF5LXNwZWMtdGVz
dHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3RzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDQyY2Q0ZDA3NmNjYzQzNmJkMGMxODc1NDNhMGY0NWE3YmZkZTFmOAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9hcnJheS1zcGVjLXRlc3Rz
Lmh0bWwKQEAgLTAsMCArMSwxMjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBj
aGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0
bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owor
Cit3aGxzbFRlc3RzLmFycmF5UmVmVG9BcnJheVJlZiA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCB4OworICAgICAgICAgICAgdGhyZWFkIGludFtdIHAgPSBAeDsKKyAgICAgICAgICAgIHRocmVh
ZCBpbnRbXVtdIHBwID0gQHA7CisgICAgICAgICAgICBpbnRbXXRocmVhZFtddGhyZWFkIHFxID0g
cHA7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIHggPSA0MjsKKyAg
ICAgICAgICAgIHBbMF0gPSA3NjsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAg
ICAgcHBbMF1bMF0gPSAzOTsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAgICAg
cXFbMF1bMF0gPSA4MzsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzYgKyAzOSArIDgzKTsKK30KKwor
d2hsc2xUZXN0cy5hc3NpZ25MZW5ndGggPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZmxvYXRbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICAoQGFycmF5
KS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQor
Cit3aGxzbFRlc3RzLmFzc2lnbkxlbmd0aEhlbHBlciA9IGFzeW5jICgpID0+IHsKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgYmFyKHRocmVhZCBmbG9h
dFtdIGFycmF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5Lmxlbmd0aCA9
IDQyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZsb2F0Wzc1NF0gYXJyYXk7CisgICAgICAgICAgICAgICAgYmFy
KEBhcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLmJ1
aWxkQXJyYXlUaGVuU3VtSXQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisg
ICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRbNDJdIGFycmF5Owor
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDI7IGkgPSBpICsgMSkKKyAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IGludChpICsgNSk7CisgICAgICAgICAgICBpbnQgcmVzdWx0Owor
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDI7IGkgPSBpICsgMSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBhcnJheVtpXTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyICogNSArIDQyICogNDEgLyAyKTsKK30K
Kword2hsc2xUZXN0cy5idWlsZEFycmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSA9IGFz
eW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGJhcih0aHJlYWQg
aW50W10gYXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IDQyOyBpID0gaSArIDEpCisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBpbnQoaSArIDUpOwor
ICAgICAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IDQyOyBpID0gaSArIDEpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYXJyYXlb
aV07CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRbNDJdIGFycmF5OworICAgICAgICAgICAg
cmV0dXJuIGJhcihAYXJyYXkpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0MiAqIDUgKyA0MiAq
IDQxIC8gMik7Cit9CisKK3dobHNsVGVzdHMucGFzc2luZ0FycmF5VG9GdW5jdGlvbiA9IGFzeW5j
ICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnRbMTBdIGFycjsKKyAgICAgICAgICAgIGZvciAodWludCBpID0g
MDsgaSA8IGFyci5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBhcnJbaV0gPSBpbnQoaSkg
KyAxOworICAgICAgICAgICAgcmV0dXJuIHN1bShhcnIpOworICAgICAgICB9CisKKyAgICAgICAg
aW50IHN1bShpbnRbMTBdIHhzKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgdCA9IDA7Cisg
ICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgICAgICB0ID0gdCArIHhzW2ldOworICAgICAgICAgICAgcmV0dXJuIHQ7CisgICAgICAgIH0K
KyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSksIDU1KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYWRkLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYWRkLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iZWI0NTJlNjkyMTk2YzUxYzZkMzQxOGNhMGEzNmQzYmZjNTBkMWRiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hZGQtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGJhZEFkZCAKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hZGQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9iYWQtYWRkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmFlMDQxNjljYTYzMWE5MDczMTJiYzc0Yzdk
MmM4ZGE1NzE5NjQ2YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9iYWQtYWRkLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KKzx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3Rz
LmJhZEFkZCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCwgdWludCB5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHVpbnQgeiA9IHggKyB5OworICAgICAgICAgICAgfQorICAgICAgICBgKTsK
K30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hbmRlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yzk4YTc0YzlkZmU3MWI1Yzk0NjUwMjRkNjk4OWVhOTk5N2I0Y2UxYgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXItZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsOSBAQAorCitQQVNTIGluZGV4QW5kZXJEb2VzbnRSZXR1cm5Qb2ludGVyIAorUEFTUyBp
bmRleEFuZGVyRG9lc250VGFrZVJlZmVyZW5jZSAKK1BBU1MgYW5kZXJEb2VzbnRSZXR1cm5Qb2lu
dGVyIAorUEFTUyBhbmRlckRvZXNudFRha2VSZWZlcmVuY2UgCitQQVNTIGFuZGVyV2l0aEJhZElu
ZGV4IAorUEFTUyBhbmRlcldpdGhOb3RoaW5nV3JvbmcgCitQQVNTIGFuZGVyV2l0aFdyb25nTnVt
YmVyT2ZBcmd1bWVudHMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9i
YWQtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtYW5kZXIuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45Yzk3YWI4ZTRlYTI2OTA0MDlhYWZiNjc4NmNiMmQ5NmNmOGM2NzMyCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2JhZC1hbmRlci5odG1sCkBA
IC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11
dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qg
cHJlZml4L3Bvc3RmaXguPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuaW5k
ZXhBbmRlckRvZXNudFJldHVyblBvaW50ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAg
ICAgICAgaW50IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3ImW10o
dGhyZWFkIEZvbyogZm9vLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmb28tPng7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3Rz
LmluZGV4QW5kZXJEb2VzbnRUYWtlUmVmZXJlbmNlID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAgICAg
ICAgICAgICAgIGludCB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkIGludCog
b3BlcmF0b3ImW10oRm9vIGZvbywgdWludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJmZvby54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xU
ZXN0cy5hbmRlckRvZXNudFJldHVyblBvaW50ZXIgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQg
Y2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAg
ICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvciYu
Zm9vKHRocmVhZCBGb28qIGZvbykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZm9vLT54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5h
bmRlckRvZXNudFRha2VSZWZlcmVuY2UgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICAg
ICAgaW50IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRv
ciYuZm9vKEZvbyBmb28pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZm
b28ueDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuYW5kZXJX
aXRoQmFkSW5kZXggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbChgaW50IGZv
byh0aHJlYWQgaW50W10geCkgeyByZXR1cm4geFstMV07IH1gKTsKKworICAgIGF3YWl0IGNoZWNr
RmFpbChgaW50IGZvbyh0aHJlYWQgaW50W10geCkgeyByZXR1cm4geFsxLmZdOyB9YCk7CisKKyAg
ICBhd2FpdCBjaGVja0ZhaWwoYGludCBmb28odGhyZWFkIGludFtdIHgsIGludCB5KSB7IHJldHVy
biB4W3ldOyB9YCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoYGludCBmb28odGhyZWFkIGludFtd
IHgsIGZsb2F0IHkpIHsgcmV0dXJuIHhbeV07IH1gKTsKK30KKword2hsc2xUZXN0cy5hbmRlcldp
dGhOb3RoaW5nV3JvbmcgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAg
ICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAg
IHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkK
KyAgICAgICAgeworICAgICAgICAgICAgRm9vIHg7CisgICAgICAgICAgICB4LnggPSAxMzsKKyAg
ICAgICAgICAgIHJldHVybiB4LmZvbzsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMTMpOworfQor
Cit3aGxzbFRlc3RzLmFuZGVyV2l0aFdyb25nTnVtYmVyT2ZBcmd1bWVudHMgPSBhc3luYyAoKSA9
PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB0aHJlYWQg
aW50KiBvcGVyYXRvciYuZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQg
eDsKKyAgICAgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgICAgICB9CisgICAgICAgIGAp
OworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3Qg
Rm9vIHsKKyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRocmVhZCBpbnQqIG9wZXJhdG9yJi5mb28odGhyZWFkIEZvbyogZm9vLCBpbnQgYmxhaCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYmFkLWxpdGVyYWxz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2YTE2YTJmOTA0NWE4Njg2YTM0ZDlmN2IwYjA0YjRlZWJi
NzI5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYmFkLWxp
dGVyYWxzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBiYWRJbnRMaXRlcmFs
Rm9ySW50IAorUEFTUyBiYWRJbnRMaXRlcmFsRm9yRmxvYXQgCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9iYWQtbGl0ZXJhbHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9iYWQtbGl0ZXJhbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OGUwMjA1YzU4NDYxNTM0NDdj
MzgyYjE3NTZiY2E0M2UxYWM4NzMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2JhZC1saXRlcmFscy5odG1sCkBAIC0wLDAgKzEsMjUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgorPHNj
cmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNs
VGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5iYWRJbnRMaXRlcmFsRm9ySW50ID0gYXN5bmMgKCkg
PT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoICJ2b2lkIGZvbygpIHsgaW50IHggPSAzMDAwMDAw
MDAwOyB9Iik7Cit9CisKK3dobHNsVGVzdHMuYmFkSW50TGl0ZXJhbEZvckZsb2F0ID0gYXN5bmMg
KCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoInZvaWQgZm9vKCkgeyBmbG9hdCB4ID0gNTAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDsgfSIpOworfQorCitydW5UZXN0cyh3
aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0
MWRkNjY3ODFmYjFkMTgwNTQ3OGJhNDk1ODRhNmM2NGE4Mzc3NzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYml0d2lzZS1ib29sLW9wcy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSw2IEBACisKK1BBU1MgYm9vbEJpdEFuZCAKK1BBU1MgYm9vbEJpdE9yIAorUEFT
UyBib29sQml0WG9yIAorUEFTUyBib29sQml0Tm90IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvYml0d2lzZS1ib29sLW9wcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDZlODNjZDI0NjEwN2I2
N2U3ZjMzOWVlOGQ0ZTVmNTA3MWQ1MmViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2JpdHdpc2UtYm9vbC1vcHMuaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0
aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5l
c3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+Citjb25zdCBlcHNpbG9uID0gMC4wMDAxOworCitjb25zdCB3aGxzbFRlc3Rz
ID0ge307CisKK3dobHNsVGVzdHMuYm9vbEJpdEFuZCA9IGFzeW5jICgpID0+IHsKKyAgICBjb25z
dCBzb3VyY2UgPSBgCisgICAgICAgIGJvb2wgZm9vKGJvb2wgYSwgYm9vbCBiKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0KKyAgICBgOworCisgICAgewor
ICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28i
LCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKHRydWUpXSk7CisgICAgICAgIGFzc2VydF9lcXVh
bHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNv
dXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZh
bHVlLiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbChmYWxz
ZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5l
ZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSks
IG1ha2VCb29sKHRydWUpXSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwg
IlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorfTsKKword2hsc2xUZXN0
cy5ib29sQml0T3IgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3Qgc291cmNlID0gYAorICAgICAg
ICBib29sIGZvbyhib29sIGEsIGJvb2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGEgfCBiOworICAgICAgICB9CisgICAgYDsKKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9
IGF3YWl0IGNhbGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBt
YWtlQm9vbCh0cnVlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlRl
c3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAgICAgICBs
ZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJv
b2woZmFsc2UpLCBtYWtlQm9vbChmYWxzZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1
bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwg
ImZvbyIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2woZmFsc2UpXSk7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKHRydWUpXSk7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCB0cnVlLCAiVGVzdCByZXR1cm5lZCBleHBlY3Rl
ZCB2YWx1ZS4iKTsKKyAgICB9Cit9OworCit3aGxzbFRlc3RzLmJvb2xCaXRYb3IgPSBhc3luYyAo
KSA9PiB7CisgICAgY29uc3Qgc291cmNlID0gYAorICAgICAgICBib29sIGZvbyhib29sIGEsIGJv
b2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9Cisg
ICAgYDsKKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKHRydWUpLCBtYWtlQm9vbCh0cnVlKV0pOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgZmFsc2UsICJUZXN0IHJldHVybmVkIGV4cGVjdGVk
IHZhbHVlLiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24oc291cmNlLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2wo
ZmFsc2UpXSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVzdWx0LCBmYWxzZSwgIlRlc3QgcmV0
dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1
ZSksIG1ha2VCb29sKGZhbHNlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlc3VsdCwgdHJ1
ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQorCisgICAgeworICAg
ICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBb
bWFrZUJvb2woZmFsc2UpLCBtYWtlQm9vbCh0cnVlKV0pOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHJlc3VsdCwgdHJ1ZSwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfQor
fTsKKword2hsc2xUZXN0cy5ib29sQml0Tm90ID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHNv
dXJjZSA9IGAKKyAgICAgICAgYm9vbCBmb28oYm9vbCBhKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAgICBgOworCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0ID0gYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihzb3VyY2UsICJmb28iLCBbbWFrZUJvb2wodHJ1
ZSldKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGZhbHNlLCAiVGVzdCByZXR1cm5l
ZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSBhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHNvdXJjZSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSld
KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIHRydWUsICJUZXN0IHJldHVybmVkIGV4
cGVjdGVkIHZhbHVlLiIpOworICAgIH0KK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYm9v
bHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Jvb2xzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNDVhYmI4YzFjNDBiYzY3MmM3Nzk4YjliMmMyZDU0ZjIzNWY3OGM0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Jvb2xzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBib29sZWFuTWF0aCAKK1BBU1MgaWRlbnRp
dHlCb29sIAorUEFTUyBsaXRlcmFsQm9vbCAKK1BBU1Mgb3BlcmF0b3JCb29sIAorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYm9vbHMuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9ib29scy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZjcxYTQ5OWUzNjE2MTMzMWQ4ZDZh
MWI5NmZkYTU5NmJkNDcyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYm9vbHMuaHRtbApAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJs
b25nIj4KKzx0aXRsZT5Cb29scy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3Qt
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0
cy5ib29sZWFuTWF0aCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAg
ICAgIGJvb2wgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWUgJiYgdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzIoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZSAmJiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzMoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2UgJiYgdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBib29sIGZvbzQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2Ug
JiYgZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBmb281KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWUgfHwgdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZv
bzYoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZSB8fCBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBib29sIGZvbzcoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2UgfHwgdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvbzgoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2UgfHwgZmFsc2U7CisgICAgICAgIH0KKyAgICBgOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzIiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIGZhbHNlKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUi
LCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihw
cm9ncmFtLCAiZm9vNiIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
Qm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbXSksIGZhbHNlKTsK
K30KKworCit3aGxzbFRlc3RzLmlkZW50aXR5Qm9vbCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQg
cHJvZ3JhbSA9ICJib29sIGZvbyhib29sIHgpIHsgcmV0dXJuIHg7IH0iOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHRy
dWUpXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7Cit9CisKK3dobHNsVGVz
dHMubGl0ZXJhbEJvb2wgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAiYm9vbCBm
b28oKSB7IHJldHVybiB0cnVlOyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7Cit9CisKK3dobHNsVGVzdHMub3Bl
cmF0b3JCb29sID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
Ym9vbCBib29sRnJvbVVjaGFyRmFsc2UoKSB7IHJldHVybiBib29sKHVjaGFyKDApKTsgfQorICAg
ICAgICBib29sIGJvb2xGcm9tVWNoYXJUcnVlKCkgeyByZXR1cm4gYm9vbCh1Y2hhcigxKSk7IH0K
KworICAgICAgICBib29sIGJvb2xGcm9tVWludEZhbHNlKCkgeyByZXR1cm4gYm9vbCh1aW50KDAp
KTsgfQorICAgICAgICBib29sIGJvb2xGcm9tVWludFRydWUoKSB7IHJldHVybiBib29sKHVpbnQo
MSkpOyB9CisKKyAgICAgICAgYm9vbCBib29sRnJvbUludEZhbHNlKCkgeyByZXR1cm4gYm9vbChp
bnQoMCkpOyB9CisgICAgICAgIGJvb2wgYm9vbEZyb21JbnRUcnVlKCkgeyByZXR1cm4gYm9vbChp
bnQoMSkpOyB9CisKKyAgICAgICAgYm9vbCBib29sRnJvbUZsb2F0RmFsc2UoKSB7IHJldHVybiBi
b29sKGZsb2F0KDApKTsgfQorICAgICAgICBib29sIGJvb2xGcm9tRmxvYXRUcnVlKCkgeyByZXR1
cm4gYm9vbChmbG9hdCgxKSk7IH0KKyAgICAgICAgYm9vbCBib29sRnJvbUZsb2F0TmFOKGZsb2F0
IGFyZykgeyByZXR1cm4gYm9vbChhcmcpOyB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21VY2hhckZhbHNlIiwgW10p
LCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJib29sRnJvbVVjaGFyVHJ1ZSIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImJvb2xGcm9tVWludEZhbHNlIiwgW10p
LCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJib29sRnJvbVVpbnRUcnVlIiwgW10pLCB0cnVlKTsKKworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21JbnRGYWxzZSIsIFtdKSwg
ZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAiYm9vbEZyb21JbnRUcnVlIiwgW10pLCB0cnVlKTsKKworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiYm9vbEZyb21GbG9hdEZhbHNlIiwgW10pLCBm
YWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0s
ICJib29sRnJvbUZsb2F0VHJ1ZSIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbUZsb2F0TmFOIiwgW21ha2VGbG9h
dChwcm9ncmFtLCBOYU4pXSksIHRydWUpOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZmxvYXQzIHg7CisgICAgICAgICAgICAgICAgYm9vbCByID0gYm9vbCh4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZmxvYXQzeDMgeDsKKyAgICAgICAgICAgICAgICBib29sIHIgPSBib29sKHgpOworICAg
ICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3J1blRlc3RzKHdobHNsVGVz
dHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvYnVmZmVyLWZyYWdtZW50LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1
MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItZnJhZ21lbnQtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2Ry
YXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9idWZmZXItZnJhZ21lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXIt
ZnJhZ21lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGJhYmEwMzdmMWNlMmIwNzlhNWQ2OTJiMjJjZDll
MzIyM2Y5ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1
ZmZlci1mcmFnbWVudC5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwg
ZmxvYXQgaSA6IGF0dHJpYnV0ZSgxKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0
aW9uOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb24sIGNvbnN0YW50IGZsb2F0W10gdGhlQnVmZmVyIDogcmVnaXN0ZXIoYjAp
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHRoZUJ1ZmZlclswXSwgdGhlQnVm
ZmVyWzBdLCB0aGVCdWZmZXJbMF0sIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRl
dmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kg
PSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9u
dEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBb
e2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6
IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0
YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxv
Y2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6
IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXQxID0ge3N0
cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMV19OworICAgIGNvbnN0IGlucHV0cyA9
IFtpbnB1dDAsIGlucHV0MV07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVy
In1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJh
c3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJ
bnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjEgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIxLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMF0g
PSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMV0gPSAxOworICAgIHZlcnRleEJ1
ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlb
M10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3Vy
Y2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAg
cmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjAsIHZlcnRleEJ1ZmZlcjFd
LCBbMCwgMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2Up
IHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgewor
ICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvYnVmZmVyLWxlbmd0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4
MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3RoLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1ZmZl
ci1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3RoLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTMyMmM2ZGQ1NjlmY2Y2MWNhNzE0OTFjMzVmNjE5ZWNhODM3NTg5OQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItbGVuZ3Ro
Lmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygxLCAxLCAx
KV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSB1aW50W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAg
YnVmZmVyWzBdID0gYnVmZmVyLmxlbmd0aDsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0
KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNv
bXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVT
aGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGlu
Z3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1d
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5
b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBj
b21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IFVpbnQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogMTMzNzsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVS
X1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyVWludDMyQXJyYXkgPSBuZXcgVWludDMyQXJy
YXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlclVpbnQzMkFycmF5WzBdID0gMDsKKyAg
ICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAw
LCByZXN1bHRzQnVmZmVyLCAwLCAxICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpOwor
ICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0
ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1
ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRVaW50MzJBcnJheSA9IG5ldyBV
aW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRVaW50MzJBcnJh
eVswXSA9PSAxMzM3KQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAg
IHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsK
KyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZl
cnRleC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1ZmZlci12ZXJ0
ZXgtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZm
MDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2J1ZmZlci12ZXJ0ZXgtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWZmZXItdmVydGV4Lmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZlcnRleC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAwMGYyODA4MWM2MThlMGIwMzA4NzE5OTc2ZDliYjVjNTViN2M2YzYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVmZmVyLXZlcnRleC5odG1sCkBAIC0wLDAg
KzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGNv
bnN0YW50IGZsb2F0NFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKGIwKSwgdWludCBpZCA6IFNWX1ZlcnRl
eElEKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gYnVmZmVyW2lkXTsKK30KKworZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6
IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEuMCwgMS4wLCAxLjAsIDEuMCk7Cit9
CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Cisg
ICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0
IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9
OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJs
ZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFM
TAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IFtdfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlw
ZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmlu
ZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
UGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJp
bWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3Rl
bmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVM
YXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBp
cGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gNCAq
IDQgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7CisKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHJlc291cmNlQnVmZmVyRmxv
YXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9
IDAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbOF0gPSAwLjU7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41
OworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzEyXSA9IDAuNTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7
CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHJlc291cmNl
QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsK
KworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6
ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTog
YnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6
IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29u
c3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAg
Y29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0i
fTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2Fw
Q2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdl
dEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRU
ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHty
OiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3th
dHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9w
OiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVz
Y3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFz
cyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgw
LCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12ZWN0b3JzLTItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0yLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZTdiMDE3MmVlY2M2MTUyM2YxMWNmNWQyNmIxMTkwNGU4MTY0YWUxCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy0yLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBidWlsdGluVmVjdG9yR2V0dGVycyAK
K1BBU1MgYnVpbHRpblZlY3RvclNldHRlcnMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9idWlsdGluLXZlY3RvcnMtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2J1aWx0aW4tdmVjdG9ycy0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU1N2E4MzY2ZjVmMjM5M2Vl
ZjQ3ZTVhZjVlNmQ0MjBmOGExNjZiNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9idWlsdGluLXZlY3RvcnMtMi5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgorPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVz
dHMgPSB7fTsKKworY29uc3QgY2hlY2tGdW5jcyA9IHsKKyAgICAidWludCI6IGNhbGxVaW50RnVu
Y3Rpb24sCisgICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKKyAgICAiZmxvYXQiOiBjYWxsRmxv
YXRGdW5jdGlvbgorfTsKK2NvbnN0IHR5cGVOYW1lcyA9IFsgInVpbnQiLCAiaW50IiwgImZsb2F0
IiBdOworY29uc3Qgc2l6ZXMgPSBbIDIsIDMsIDQgXTsKK2NvbnN0IGVsZW1lbnRzID0gWyAieCIs
ICJ5IiwgInoiLCAidyIgXTsKK2NvbnN0IGluaXRpYWxpemVyTGlzdCA9IFsgMSwgMiwgMywgNCBd
OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JHZXR0ZXJzID0gYXN5bmMgKCkgPT4KK3sKKwor
ICAgIGxldCB0ZXN0cyA9IFtdOworICAgIGxldCBzcmMgPSAiIjsKKyAgICBmb3IgKGxldCB0eXBl
TmFtZSBvZiB0eXBlTmFtZXMpIHsKKyAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBzaXplcykgewor
ICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0ke3NpemV9JHtlbGVtZW50c1tp
XX1gOworICAgICAgICAgICAgICAgIHNyYyArPSBgJHt0eXBlTmFtZX0gJHtmdW5jdGlvbk5hbWV9
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAke3R5cGVOYW1lfSR7c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtzaXplfSgke2luaXRpYWxpemVy
TGlzdC5zbGljZSgwLCBzaXplKS5qb2luKCIsICIpfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHguJHtlbGVtZW50c1tpXX07CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBgOworICAgICAgICAgICAgICAgIHRlc3RzLnB1c2go
eyB0eXBlOiB0eXBlTmFtZSwgbmFtZTogZnVuY3Rpb25OYW1lLCBleHBlY3RhdGlvbjogaW5pdGlh
bGl6ZXJMaXN0W2ldIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
bGV0IHByb2dyYW0gPSBzcmM7CisgICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgeworICAgICAg
ICBjb25zdCBjaGVja0Z1bmMgPSBjaGVja0Z1bmNzW3Rlc3QudHlwZV07CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2hlY2tGdW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0LmV4
cGVjdGF0aW9uKTsKKyAgICB9Cit9OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JTZXR0ZXJz
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgdGVzdHMgPSBbXTsKKyAgICBsZXQgc3JjID0gIiI7
CisgICAgZm9yIChsZXQgdHlwZU5hbWUgb2YgdHlwZU5hbWVzKSB7CisgICAgICAgIGZvciAobGV0
IHNpemUgb2Ygc2l6ZXMpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dHlwZU5hbWV9
JHtzaXplfSR7ZWxlbWVudHNbaV19YDsKKyAgICAgICAgICAgICAgICBzcmMgKz0gYCR7dHlwZU5h
bWV9ICR7ZnVuY3Rpb25OYW1lfSgpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3NpemV9IHggPSAke3R5cGVOYW1lfSR7
c2l6ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6ZSkuam9pbigiLCAiKX0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHguJHtlbGVtZW50c1tpXX0gPSAzNDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geC4ke2VsZW1lbnRzW2ldfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGA7CisgICAgICAgICAgICAg
ICAgdGVzdHMucHVzaCh7IHR5cGU6IHR5cGVOYW1lLCBuYW1lOiBmdW5jdGlvbk5hbWUsIGV4cGVj
dGF0aW9uOiAzNCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGxl
dCBwcm9ncmFtID0gc3JjOworICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAg
Y29uc3QgY2hlY2tGdW5jID0gY2hlY2tGdW5jc1t0ZXN0LnR5cGVdOworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNoZWNrRnVuYyhwcm9ncmFtLCB0ZXN0Lm5hbWUsIFtdKSwgdGVzdC5leHBl
Y3RhdGlvbik7CisgICAgfQorfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0Pgor
PC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12
ZWN0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9idWlsdGluLXZl
Y3RvcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMWM3YTI4MmVmNmI1ZTI3OTY1NzAyYzE5
YWNmNGUxNTRlOGNhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvYnVpbHRpbi12ZWN0b3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBi
dWlsdGluVmVjdG9ySW5kZXhTZXR0ZXJzIAorUEFTUyBidWlsdGluVmVjdG9ycyAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2J1aWx0aW4tdmVjdG9ycy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIx
NDk0ZjMxYjVkZjljZjliMTU1OTQxMjM2MWI3YzY1ZDhkZjg4NDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvYnVpbHRpbi12ZWN0b3JzLmh0bWwKQEAgLTAsMCAr
MSwxOTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04Pgor
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48
L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKworY29uc3QgY2hlY2tGdW5jcyA9IHsKKyAgICAidWlu
dCI6IGNhbGxVaW50RnVuY3Rpb24sCisgICAgImludCI6IGNhbGxJbnRGdW5jdGlvbiwKKyAgICAi
ZmxvYXQiOiBjYWxsRmxvYXRGdW5jdGlvbgorfTsKK2NvbnN0IHR5cGVOYW1lcyA9IFsgInVpbnQi
LCAiaW50IiwgImZsb2F0IiBdOworY29uc3Qgc2l6ZXMgPSBbIDIsIDMsIDQgXTsKK2NvbnN0IGVs
ZW1lbnRzID0gWyAieCIsICJ5IiwgInoiLCAidyIgXTsKK2NvbnN0IGluaXRpYWxpemVyTGlzdCA9
IFsgMSwgMiwgMywgNCBdOworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JJbmRleFNldHRlcnMg
PSBhc3luYyAoKSA9PgoreworICAgIGxldCB0ZXN0cyA9IFtdOworICAgIGxldCBzcmMgPSAiIjsK
KyAgICBmb3IgKGxldCB0eXBlTmFtZSBvZiB0eXBlTmFtZXMpIHsKKyAgICAgICAgZm9yIChsZXQg
c2l6ZSBvZiBzaXplcykgeworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0eXBlTmFtZX0k
e3NpemV9JHtlbGVtZW50c1tpXX1gOworICAgICAgICAgICAgICAgIHNyYyArPSBgJHt0eXBlTmFt
ZX0gJHtmdW5jdGlvbk5hbWV9KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAke3R5cGVOYW1lfSR7c2l6ZX0geCA9ICR7dHlwZU5hbWV9JHtz
aXplfSgke2luaXRpYWxpemVyTGlzdC5zbGljZSgwLCBzaXplKS5qb2luKCIsICIpfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeFske2l9XSA9IDM0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB4WyR7aX1dOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYDsKKyAgICAgICAgICAgICAgICB0ZXN0cy5wdXNoKHsgdHlw
ZTogdHlwZU5hbWUsIG5hbWU6IGZ1bmN0aW9uTmFtZSwgZXhwZWN0YXRpb246IDM0IH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbGV0IHByb2dyYW0gPSBzcmM7Cisg
ICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgeworICAgICAgICBjb25zdCBjaGVja0Z1bmMgPSBj
aGVja0Z1bmNzW3Rlc3QudHlwZV07CisgICAgICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2hlY2tG
dW5jKHByb2dyYW0sIHRlc3QubmFtZSwgW10pLCB0ZXN0LmV4cGVjdGF0aW9uKTsKKyAgICB9Cit9
OworCit3aGxzbFRlc3RzLmJ1aWx0aW5WZWN0b3JzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dDIgYSA9IGludDIoMywgNCk7CisgICAgICAgICAgICByZXR1cm4gYVswXTsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgZm9vMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludDIgYSA9IGludDIo
MywgNCk7CisgICAgICAgICAgICBpbnQzIGIgPSBpbnQzKGEsIDUpOworICAgICAgICAgICAgcmV0
dXJuIGJbMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzMoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQzIGEgPSBpbnQzKDMsIDQsIDUpOworICAgICAgICAgICAgaW50NCBiID0gaW50
NCg2LCBhKTsKKyAgICAgICAgICAgIHJldHVybiBiWzFdOworICAgICAgICB9CisgICAgICAgIGlu
dCBmb280KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50MiBhID0gaW50MigzLCA0KTsKKyAg
ICAgICAgICAgIGludDIgYiA9IGludDIoNSwgNik7CisgICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0
KGEsIGIpOworICAgICAgICAgICAgcmV0dXJuIGNbMl07CisgICAgICAgIH0KKyAgICAgICAgYm9v
bCBmb281KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50NCBhID0gaW50NCgzLCA0LCA1LCA2
KTsKKyAgICAgICAgICAgIGludDIgYiA9IGludDIoNCwgNSk7CisgICAgICAgICAgICBpbnQ0IGMg
PSBpbnQ0KDMsIGIsIDYpOworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYzsKKyAgICAgICAgfQor
ICAgICAgICBib29sIGZvbzYoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQyIGEgPSBpbnQy
KDQsIDUpOworICAgICAgICAgICAgaW50MyBiID0gaW50MygzLCBhKTsKKyAgICAgICAgICAgIGlu
dDMgYyA9IGludDMoMywgNCwgNik7CisgICAgICAgICAgICByZXR1cm4gYiA9PSBjOworICAgICAg
ICB9CisgICAgICAgIHVpbnQgZm9vdSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQyIGEg
PSB1aW50MigzLCA0KTsKKyAgICAgICAgICAgIHJldHVybiBhWzBdOworICAgICAgICB9CisgICAg
ICAgIHVpbnQgZm9vdTIoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MiBhID0gdWludDIo
MywgNCk7CisgICAgICAgICAgICB1aW50MyBiID0gdWludDMoYSwgNSk7CisgICAgICAgICAgICBy
ZXR1cm4gYlsxXTsKKyAgICAgICAgfQorICAgICAgICB1aW50IGZvb3UzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdWludDMgYSA9IHVpbnQzKDMsIDQsIDUpOworICAgICAgICAgICAgdWludDQg
YiA9IHVpbnQ0KDYsIGEpOworICAgICAgICAgICAgcmV0dXJuIGJbMV07CisgICAgICAgIH0KKyAg
ICAgICAgdWludCBmb291NCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQyIGEgPSB1aW50
MigzLCA0KTsKKyAgICAgICAgICAgIHVpbnQyIGIgPSB1aW50Mig1LCA2KTsKKyAgICAgICAgICAg
IHVpbnQ0IGMgPSB1aW50NChhLCBiKTsKKyAgICAgICAgICAgIHJldHVybiBjWzJdOworICAgICAg
ICB9CisgICAgICAgIGJvb2wgZm9vdTUoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50NCBh
ID0gdWludDQoMywgNCwgNSwgNik7CisgICAgICAgICAgICB1aW50MiBiID0gdWludDIoNCwgNSk7
CisgICAgICAgICAgICB1aW50NCBjID0gdWludDQoMywgYiwgNik7CisgICAgICAgICAgICByZXR1
cm4gYSA9PSBjOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vdTYoKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1aW50MiBhID0gdWludDIoNCwgNSk7CisgICAgICAgICAgICB1aW50MyBiID0g
dWludDMoMywgYSk7CisgICAgICAgICAgICB1aW50MyBjID0gdWludDMoMywgNCwgNik7CisgICAg
ICAgICAgICByZXR1cm4gYiA9PSBjOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvb2YoKQor
ICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOworICAgICAg
ICAgICAgcmV0dXJuIGFbMF07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vZjIoKQorICAg
ICAgICB7CisgICAgICAgICAgICBmbG9hdDIgYSA9IGZsb2F0MigzLiwgNC4pOworICAgICAgICAg
ICAgZmxvYXQzIGIgPSBmbG9hdDMoYSwgNS4pOworICAgICAgICAgICAgcmV0dXJuIGJbMV07Cisg
ICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vZjMoKQorICAgICAgICB7CisgICAgICAgICAgICBm
bG9hdDMgYSA9IGZsb2F0MygzLiwgNC4sIDUuKTsKKyAgICAgICAgICAgIGZsb2F0NCBiID0gZmxv
YXQ0KDYuLCBhKTsKKyAgICAgICAgICAgIHJldHVybiBiWzFdOworICAgICAgICB9CisgICAgICAg
IGZsb2F0IGZvb2Y0KCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyIGEgPSBmbG9hdDIo
My4sIDQuKTsKKyAgICAgICAgICAgIGZsb2F0MiBiID0gZmxvYXQyKDUuLCA2Lik7CisgICAgICAg
ICAgICBmbG9hdDQgYyA9IGZsb2F0NChhLCBiKTsKKyAgICAgICAgICAgIHJldHVybiBjWzJdOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vZjUoKQorICAgICAgICB7CisgICAgICAgICAgICBm
bG9hdDQgYSA9IGZsb2F0NCgzLiwgNC4sIDUuLCA2Lik7CisgICAgICAgICAgICBmbG9hdDIgYiA9
IGZsb2F0Mig0LiwgNS4pOworICAgICAgICAgICAgZmxvYXQ0IGMgPSBmbG9hdDQoMy4sIGIsIDYu
KTsKKyAgICAgICAgICAgIHJldHVybiBhID09IGM7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBm
b29mNigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0MiBhID0gZmxvYXQyKDQuLCA1Lik7
CisgICAgICAgICAgICBmbG9hdDMgYiA9IGZsb2F0MygzLiwgYSk7CisgICAgICAgICAgICBmbG9h
dDMgYyA9IGZsb2F0MygzLiwgNC4sIDYuKTsKKyAgICAgICAgICAgIHJldHVybiBiID09IGM7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFtdKSwgMyk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbXSksIDUpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIs
IFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb282IiwgW10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
VWludEZ1bmN0aW9uKHByb2dyYW0sICJmb291IiwgW10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UyIiwgW10pLCA0KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvb3UzIiwgW10p
LCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvb3U0IiwgW10pLCA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24ocHJvZ3JhbSwgImZvb3U1IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvb3U2IiwgW10pLCBmYWxzZSk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vZiIsIFtdKSwg
Myk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vZjIiLCBbXSksIDQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rp
b24ocHJvZ3JhbSwgImZvb2YzIiwgW10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNCIsIFtdKSwgNSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb29mNSIsIFtdKSwgdHJ1ZSk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb29m
NiIsIFtdKSwgZmFsc2UpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Nhc3RzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jYXN0cy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWI3Y2U0YzdkOGU0MWE3ZWE1ZmE5M2RjMzY0OTExYTJlNDMxYmRhMgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jYXN0cy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgY2FzdHMgCitQQVNTIHNlbGZDYXN0cyAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Nhc3RzLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvY2FzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWZlZjQyYmM4NjRjNzcwYjMz
MTJjMGI1Njk0MWNlMmRkZjZiNjBkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2Nhc3RzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5CYWQgYWRkLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wt
dGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxz
bFRlc3RzLmNhc3RzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBz
dHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIG9wZXJh
dG9yIEJhcihGb28gZm9vKSB7CisgICAgICAgICAgICBCYXIgYjsKKyAgICAgICAgICAgIGIueSA9
IGZvby54ICsgNzsKKyAgICAgICAgICAgIHJldHVybiBiOworICAgICAgICB9CisgICAgICAgIGlu
dCBiYXooaW50IHopIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueCA9
IHo7CisgICAgICAgICAgICBCYXIgYiA9IEJhcihmb28pOworICAgICAgICAgICAgcmV0dXJuIGIu
eTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImJheiIsIFttYWtlSW50KDYpXSksIDEzKTsKK30KKword2hsc2xUZXN0
cy5zZWxmQ2FzdHMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAg
ICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAgIGlu
dCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9v
LnggPSAyMTsKKyAgICAgICAgICAgIEZvbyBiYXIgPSBGb28oZm9vKTsKKyAgICAgICAgICAgIGJh
ci54ID0gNDI7CisgICAgICAgICAgICByZXR1cm4gZm9vLnggKyBiYXIueDsKKyAgICAgICAgfQor
ICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdKSwgMjEgKyA0Mik7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3Jp
cHQ+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jaGVj
a2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NoZWNrZXItc2hvdWxkLXNldC10eXBl
LW9mLXJlYWQtbW9kaWZ5LXdyaXRlLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jaGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1y
ZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAor
UEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY2hlY2tlci1zaG91bGQtc2V0
LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUtdmFyaWFibGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvY2hlY2tlci1zaG91bGQtc2V0LXR5cGUtb2YtcmVhZC1tb2RpZnktd3JpdGUt
dmFyaWFibGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM3OTliZjVhM2MwNGNiNTU5ZTA3N2ZiMzIwZmVl
ZGQzMzhiMDc2NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9j
aGVja2VyLXNob3VsZC1zZXQtdHlwZS1vZi1yZWFkLW1vZGlmeS13cml0ZS12YXJpYWJsZXMuaHRt
bApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDEsIDEsIDEpXQor
Y29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0
ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgZmxv
YXQ0IHZlYzsKKyAgICB2ZWNbMF0gKz0gNDIuMDsKKyAgICBidWZmZXJbdWludCh0aHJlYWRJRC54
KV0gPSB2ZWNbMF07Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVT
dGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
ID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAx
OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25z
dCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5
QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1h
cCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBH
UFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJp
bmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9Owor
ICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQs
IGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBj
b21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAg
IGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZm
ZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNv
ZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEp
OworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0g
YXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRzRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlm
IChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDQyKQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsK
KyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5t
YXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBm
dW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30p
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9jb21tZW50LXBhcnNpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljYjQwOTFi
ZDgxMWJmNzVmZWQzNjJlZWY0MDUyMjc1YjZjZjdmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDMgQEAKKworUEFTUyBjb21tZW50UGFyc2luZyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2NvbW1lbnQtcGFyc2luZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2NvbW1lbnQtcGFyc2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzg1ZmFmYzY1YjU3NTY1
YjEzM2EyMmQ3NDVjNTk1MzM2M2FmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvY29tbWVudC1wYXJzaW5nLmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRl
c3RzID0ge307CisKK3dobHNsVGVzdHMuY29tbWVudFBhcnNpbmcgPSBhc3luYyAoKSA9PiB7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIC8qIHRoaXMgY29tbWVudAorICAgICAgICBydW5z
IG92ZXIgbXVsdGlwbGUgbGluZXMgKi8KKyAgICAgICAgYm9vbCBmb28oKSB7IHJldHVybiB0cnVl
OyB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgLyogdGhpcyBjb21tZW50CisgICAgICAgIHJ1bnMgb3ZlciBtdWx0aXBsZSBs
aW5lcworICAgICAgICBib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7Cit9
CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jb21wdXRlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9jb21wdXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgy
ZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29tcHV0ZS5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iM2Iw
ZTlhNGJiYmJlMTFiMzJlMmJlZjdjZWU1ZDE4ZDkyNGQwZDk0Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2NvbXB1dGUuaHRtbApAQCAtMCwwICsxLDkyIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRl
clNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVT
aGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFk
SUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCld
ID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOworfQorYDsKKworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZm
ZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAg
YnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4
OworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Cisg
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJy
YXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAgICAg
JiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMy
QXJyYXlbMl0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgKKyAg
ICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3VsdHNG
bG9hdDMyQXJyYXlbNV0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09
IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0ZXN0
UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3Vs
dHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvY29weS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZhNGJkY2Y0MzY2OGFjZDRh
MGU3N2M0ZmYzNmU5MzkxMjBkZWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9jb3B5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBjb3B5
QXJyYXkgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9jb3B5Lmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwYzE5N2Iy
ZDkxYWM2MGY2OTVhMjY2YWRjNzA3Y2ZlMjk0YmU1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvY29weS5odG1sCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+Q29weWluZy48L3RpdGxlPgorPHNjcmlwdCBzcmM9
ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7
fTsKKword2hsc2xUZXN0cy5jb3B5QXJyYXkgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9n
cmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50WzEw
XSB4czsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgICAgIHhzW2ldID0gaW50KGkpICsgMTsKKyAgICAgICAgICAgIGludFsxMF0g
eXMgPSB4czsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsr
KQorICAgICAgICAgICAgICAgIHhzW2ldID0gMDsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOwor
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgeXMubGVuZ3RoOyBpKyspCisgICAgICAg
ICAgICAgICAgc3VtID0gc3VtICsgeXNbaV07CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAg
ICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10pLCA1NSk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZGVy
ZWZlcmVuY2Utb3JkZXJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWM2MTdlZWY1
ZmU0NzI0MjJlZDBhNGZiNWY4MjZkMDBhMjM4ZmNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLW9yZGVyaW5nLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKKworUEFTUyBjYWxsQXJndW1lbnRzQXJlQ29waWVkSW1tZWRpYXRlbHlBZnRl
ckV2YWx1YXRpb24gCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kZXJl
ZmVyZW5jZS1vcmRlcmluZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJl
bmNlLW9yZGVyaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM0YmFiZjY3MWE0MzcwNzcyYTMxMTJlYTBi
MDRjNDVhMjNkYjY3MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9kZXJlZmVyZW5jZS1vcmRlcmluZy5odG1sCkBAIC0wLDAgKzEsMzIgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+RGVyZWZlcmVuY2Ugb3JkZXJpbmcuPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxz
bFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuY2FsbEFyZ3VtZW50c0FyZUNvcGllZEltbWVkaWF0
ZWx5QWZ0ZXJFdmFsdWF0aW9uID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAor
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpiYXIoNSkg
KyAqYmFyKDcpOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJl
dHVybiAmeDsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMik7Cit9OworCitydW5UZXN0cyh3
aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2stZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kZXJlZmVyZW5jZS1wb2ludGVyLXNo
b3VsZC10eXBlLWNoZWNrLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMz
M2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9kZXJlZmVyZW5jZS1wb2ludGVyLXNob3VsZC10eXBlLWNoZWNrLWV4cGVj
dGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvZGVyZWZlcmVuY2UtcG9pbnRlci1zaG91bGQtdHlwZS1jaGVjay5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxk
LXR5cGUtY2hlY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmNlYzk2Y2NhZGZjOGZkYjk3NDhkYjVhNGFl
YzllM2E5Yjc5YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2RlcmVmZXJlbmNlLXBvaW50ZXItc2hvdWxkLXR5cGUtY2hlY2suaHRtbApAQCAtMCwwICsxLDEz
OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9z
aXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30K
KwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1
bHQ7CisKKyAgICB0aHJlYWQgZmxvYXQqIHB0cjIgPSAmc2hhZGU7CisgICAgKnB0cjIgPSBzaGFk
ZTsKKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9
ICpwdHIyOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAg
ICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3Qg
YXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6
IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOwor
ICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9
OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1
bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91
cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBh
d2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZm
ZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9
IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VC
dWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5t
YXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZl
ciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCBy
ZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9
IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07
CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1
Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJn
cmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBD
aGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dh
cENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcg
PSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0
IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1l
bnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVs
bCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5k
ZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
UmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJp
bmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9
KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1icmVh
ay1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3At
YnJlYWstZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1
ZjhiMjAyZmI5ZmQyMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2RvLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdCbGFja1NxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1s
b29wLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1i
cmVhay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2MWNhNTVkMmQ4YjJkMzE2NzEyNWNjZjVhOWVjNjMyMDI3
ZjYzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hp
bGUtbG9vcC1icmVhay5odG1sCkBAIC0wLDAgKzEsMTQyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0
cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAg
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7
CisgICAgZG8geworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9IHdoaWxlICgoc2hhZGUgPSAxLjAsIGZhbHNlKSk7CisKKyAgICByZXN1bHQucG9z
aXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFk
ZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2Up
IHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFn
ZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9Owor
ICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRy
aWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNl
OiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3Jt
YXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1d
OyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9
IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3Jt
YXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVy
TG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0
cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczog
W3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19Owor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQo
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBi
dWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNv
bnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRp
bmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBM
YXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91
cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3Vw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZm
ZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsK
KyAgICBkcmF3QmxhY2tTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwor
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1s
b29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC1jb250aW51
ZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtY29udGludWUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45Nzg5NmU4MGVlOWE5N2E4ZGQwOTgyMTJjYmFmYjM4YWJhNDBhODhl
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxv
b3AtY29udGludWUuaHRtbApAQCAtMCwwICsxLDE0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1
Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBm
bG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBib29sIGIgPSB0cnVlOwor
ICAgIHVpbnQgaSA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2hhZGUgPSAwLjA7CisgICAgfSB3aGlsZSAo
KGkgPSBpICsgMSwgc2hhZGUgPSBzaGFkZSArIDAuMSwgaSA8IDEwKSk7CisKKyAgICByZXN1bHQu
cG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChz
aGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hh
ZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3Qg
YXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVy
MC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAw
LjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3
YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAg
Y29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVz
Y3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50
VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5j
cmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzog
MCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVu
dDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFy
Iiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
PSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3Qg
cmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVy
UGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2
aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWV4cGVjdGVkLmh0
bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvZG8td2hpbGUtbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2RvLXdoaWxlLWxvb3AuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDljNWM4MTBmYzk0Nzc4NDcwYmYxODFh
MjJiMmMyN2ZjNWY0Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2RvLXdoaWxlLWxvb3AuaHRtbApAQCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsK
KyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2
ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBkbyB7CisgICAg
ICAgIHNoYWRlID0gMS4wOworICAgIH0gd2hpbGUoZmFsc2UpOworCisgICAgcmVzdWx0LnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUg
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUs
IHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAg
ICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxv
Y2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJp
YnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOwor
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9kb250LWNyYXNoLXBhcnNpbmctZW51bS1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWY1M2EyNjU1MzIxZjMzM2E1M2Y5Y2QyMWFmZjAzZGIzM2Q4ZTI0
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kb250LWNyYXNo
LXBhcnNpbmctZW51bS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFj
a2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jhc2gtcGFyc2luZy1l
bnVtLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG9udC1jcmFzaC1wYXJzaW5nLWVu
dW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMTNmMjQ1MDEyNmZmYzI0OTJiZDVlMWUxODgxMDZiMTI0MWZk
MGM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtY3Jh
c2gtcGFyc2luZy1lbnVtLmh0bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAor
CitlbnVtIERvbnRDcmFzaCB7CisgICAgVmFsdWUKK30KKwordmVydGV4IGZsb2F0NCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBpIDogYXR0cmlidXRl
KDEpKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK2ZyYWdtZW50
IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBT
Vl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorYDsKKworY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25z
dCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRv
cG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUg
PSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3Rh
dGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3Jp
dGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtz
aGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0
MSA9IHtzdHJpZGU6IDQsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTFdfTsKKyAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwLCBpbnB1dDFdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3Jt
LWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7
CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMUFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMUFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzJdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQz
MkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2ZXJ0ZXhC
dWZmZXIxXSwgWzAsIDBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlv
bigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdC1leHByZXNzaW9ucy1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLWV4
cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvZG90LWV4cHJlc3Npb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4ZDUwYmY4ZTQ1
NDljMjkwNTJmNWVkMTBkMzI0YTI3ZDhhMDQxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9kb3QtZXhwcmVzc2lvbnMuaHRtbApAQCAtMCwwICsxLDEzMyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBz
aGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24g
OiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVy
dGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
LCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7Cisg
ICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4g
ZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4
U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9w
b2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9
IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxl
bmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0
ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0
ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRp
b246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVy
TG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0
cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczog
W3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19Owor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQo
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBi
dWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNv
bnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRp
bmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBM
YXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91
cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3Vw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZm
ZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNl
KSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsK
KyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOwor
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1ub3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2RvdWJsZS1ub3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzQzMTg5
ZWRmOGQ1ZTIzMGM1OGVjMjU4MDhhMDYzMzM5NmM4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZG91YmxlLW5vdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwz
IEBACisKK1BBU1MgZG91YmxlTm90IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZG91YmxlLW5vdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1u
b3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZTlmNWJkN2MzYzVjYWY1ZjEzOGIwNDFhMmQ2OWQ4ODRlZjQ4
YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvdWJsZS1u
b3QuaHRtbApAQCAtMCwwICsxLDI3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEg
Y2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRp
dGxlPkNvcHlpbmcuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuZG91Ymxl
Tm90ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgYm9vbCBm
b28oYm9vbCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISF4OworICAgICAgICB9
CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKV0pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSldKSwg
ZmFsc2UpOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1zaG91
bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0
ZS1jdG9ycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0
ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1j
dG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2R1cGxpY2F0ZS10eXBlcy1zaG91
bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM0MjM4ZDM3
ZmVjODMzZmRjOWJiYWMzZTI2ZTMxYmU0NzJjMTM5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1
cGxpY2F0ZS1jdG9ycy5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVj
dCBYWVogeworICAgIGludCB4OworICAgIGludCB5OworICAgIGludCB6OworfQorCit0eXBlZGVm
IFhZWjEgPSBYWVo7Cit0eXBlZGVmIFhZWjIgPSBYWVo7Cit0eXBlZGVmIFhZWjMgPSBYWVo7CisK
K1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNl
IGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7CisgICAgdGhyZWFkIGludCogeDsKKyAgICB0aHJlYWQgaW50KiB5Owor
ICAgIHRocmVhZCBmbG9hdCogZjE7CisgICAgdGhyZWFkIGZsb2F0KiBmMjsKKyAgICBYWVoxIGE7
CisgICAgWFlaMiBiOworICAgIFhZWjMgYzsKKyAgICB0aHJlYWQgaW50W10gaW50QXJyYXlSZWYx
OworICAgIHRocmVhZCBpbnRbXSBpbnRBcnJheVJlZjI7CisgICAgaWYgKCp4ID09ICp5ICYmIHgg
PT0geSAmJiB4ID09IG51bGwgJiYgZjEgPT0gbnVsbCAmJiAqZjEgPT0gMCkgeworICAgICAgICBi
dWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7
CisgICAgfQorfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2Us
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsKKwor
ICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBi
dWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZl
cik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxv
YXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1
ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJV
c2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRF
bmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAgIGNvbnN0IGNvbXB1dGVQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3Qg
cmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsK
KyAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRz
QXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAg
ICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9h
dDMyQXJyYXlbMl0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgK
KyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNV0gPT0gNgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZd
ID09IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJl
c3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5p
c2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZHVwbGljYXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvZHVwbGljYXRlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIw
YTRlYjRiNmZiYzBjZDhlMjg3NTYyMzM1MTJmOTBkODRmN2M4MAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGVzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDMgQEAKKworUEFTUyBkdXBsaWNhdGVGdW5jdGlvbnMgCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9kdXBsaWNhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZHVwbGljYXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZWQ5NmM1MWYwM2YwM2ZlN2FjNTJl
YTg2YzU0NmRhOWFkM2IyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZHVwbGljYXRlcy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBwcmVmaXgvcG9zdGZpeC48L3RpdGxlPgorPHNjcmlwdCBz
cmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMg
PSB7fTsKKword2hsc2xUZXN0cy5kdXBsaWNhdGVGdW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgdm9pZCBmb28oKSB7IH0KKyAgICAgICAgdm9p
ZCBmb28oKSB7IH0KKyAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIHZv
aWQgZm9vKGludCB4KSB7IH0KKyAgICAgICAgdHlwZWRlZiBBID0gaW50OworICAgICAgICB2b2lk
IGZvbyhBIHgpIHsgfQorICAgIGApOworCisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAg
aW50IGJhcigpIHsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgfQorICAgICAgICBp
bnQgYmFyKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcigpOworICAgICAg
ICB9CisgICAgICAgIGludCBiYXooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFy
KDMpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgMyk7CisKKyAgICBhd2FpdCBj
aGVja0ZhaWwoYAorICAgICAgICBpbnQgb3BlcmF0b3ImW10odGhyZWFkIGludFtdIGEsIHVpbnQg
YikgeworICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGF3
YWl0IGNoZWNrRmFpbChgCisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKHRocmVhZCBpbnRb
XSBhKSB7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQorICAgIGApOworCisgICAg
YXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnRbXSBh
LCB0aHJlYWQgaW50W10gYikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9
PSh0aHJlYWQgaW50KiBhLCB0aHJlYWQgaW50KiBiKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIGApOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Nj
cmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1
cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLTItZXhwZWN0ZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9w
ZXItdmFyaWFibGUtbGlmZXRpbWUtMi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJl
T25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9w
ZXItdmFyaWFibGUtbGlmZXRpbWUtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vu
c3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5OGMzMTA1
ODZiNmU3ZjI3NmRlYmRkZWFmMGNjOTViMWU4ZjJlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS0yLmh0
bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7
CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBmbG9hdCogcHRyLCBm
bG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAqcHRyID0gdmFsdWU7Cit9CisKK3RocmVhZCBmbG9h
dCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gJnZhbHVlOworfQorCit0aHJl
YWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJlYWxQdHIodmFs
dWUpOworfQorCit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgeworICAgIHJl
dHVybiBmaXJzdFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
MSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0KiBwdHJUb1No
YWRlID0gZmlyc3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZTIgPSBz
ZWNvbmRQdHIoMS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBmbG9hdCogZHVt
bXlQdHIgPSAmZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hhZGUyLCAw
LjApOworICAgIHRocmVhZCBmbG9hdCogZHVtbXkyID0gcmVhbFB0cihzaGFkZSk7CisKKyAgICBy
ZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKworICAgIHJlc3VsdC5zaGFkZSA9ICpwdHJUb1No
YWRlMjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAg
cmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRl
ckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0g
e3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNv
bnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5w
dXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVy
In1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
TGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJh
c3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJ
bnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzld
ID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1h
cCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0g
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsK
KyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owor
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rp
b24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2Fu
dmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1l
LTMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVy
LXZhcmlhYmxlLWxpZmV0aW1lLTMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUz
MjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUtMy5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRp
bWUtMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhOGEyOGY1OGNhMjJhMTZmZGJjNTQwMjk0OTQ2NmFiMGI5
M2U1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJl
LXByb3Blci12YXJpYWJsZS1saWZldGltZS0zLmh0bWwKQEAgLTAsMCArMSwxNjMgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1Zf
UG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFz
c2lnblRvUHRyKHRocmVhZCBmbG9hdCogcHRyLCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAq
cHRyID0gdmFsdWU7Cit9CisKK3RocmVhZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sK
KyAgICBmbG9hdCB2ID0gdmFsdWU7CisgICAgcmV0dXJuICZ2OworfQorCit0aHJlYWQgZmxvYXQq
IGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJlYWxQdHIodmFsdWUpOworfQor
Cit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiBmaXJz
dFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAg
ICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0KiBwdHJUb1NoYWRlID0gZmly
c3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9TaGFkZTIgPSBzZWNvbmRQdHIo
MS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBmbG9hdCogZHVtbXlQdHIgPSAm
ZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRvU2hhZGUyLCAwLjApOworICAg
IHRocmVhZCBmbG9hdCogZHVtbXkyID0gcmVhbFB0cihzaGFkZSk7CisKKyAgICByZXN1bHQucG9z
aXRpb24gPSBwb3NpdGlvbjsKKworICAgIHJlc3VsdC5zaGFkZSA9ICpwdHJUb1NoYWRlMjsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihm
bG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZs
b2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFy
dChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2
ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxv
Y2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJp
YnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7
YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOwor
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVm
ZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25z
dCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5n
fTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5
b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAg
PSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLWV4cGVjdGVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1s
aWZldGltZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNk
MjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvZW5zdXJlLXByb3Blci12YXJpYWJsZS1saWZldGltZS1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2Vuc3VyZS1wcm9wZXItdmFyaWFibGUtbGlmZXRpbWUuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxpZmV0aW1lLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWE2YTJlZThiNDA3MzYzNjNiNGI2NzM0MzA1NzVhMTI0MzM5ZmQ5YgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnN1cmUtcHJvcGVyLXZhcmlhYmxlLWxp
ZmV0aW1lLmh0bWwKQEAgLTAsMCArMSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZl
cnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQg
c2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK2Zsb2F0IGFzc2lnblRvUHRyKHRocmVhZCBmbG9h
dCogcHRyLCBmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiAqcHRyID0gdmFsdWU7Cit9CisKK3Ro
cmVhZCBmbG9hdCogcmVhbFB0cihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gJnZhbHVlOwor
fQorCit0aHJlYWQgZmxvYXQqIGZpcnN0UHRyKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHJl
YWxQdHIodmFsdWUpOworfQorCit0aHJlYWQgZmxvYXQqIHNlY29uZFB0cihmbG9hdCB2YWx1ZSkg
eworICAgIHJldHVybiBmaXJzdFB0cih2YWx1ZSk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVy
dGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIGZsb2F0
KiBwdHJUb1NoYWRlID0gZmlyc3RQdHIoc2hhZGUpOworICAgIHRocmVhZCBmbG9hdCogcHRyVG9T
aGFkZTIgPSBzZWNvbmRQdHIoMS4wKTsKKworICAgIGZsb2F0IGR1bW15OworICAgIHRocmVhZCBm
bG9hdCogZHVtbXlQdHIgPSAmZHVtbXk7CisKKyAgICBkdW1teSA9IGFzc2lnblRvUHRyKHB0clRv
U2hhZGUyLCAwLjApOworICAgIGR1bW15ID0gYXNzaWduVG9QdHIocHRyVG9TaGFkZSwgc2hhZGUp
OworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisKKyAgICByZXN1bHQuc2hhZGUg
PSAqcHRyVG9TaGFkZTI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9h
dDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0
IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7
CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKwor
YXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0g
ZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBj
b25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFz
dGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Cisg
ICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQs
IGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRl
MCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0
cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2
fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAg
IGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9Owor
ICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlm
b3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExh
eW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
cjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIp
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEu
MDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZm
ZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwg
c2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNv
dXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Cisg
ICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7
CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4
dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFp
bihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENo
YWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBv
dXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJl
ZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRz
ID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwg
bG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVu
ZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRH
cm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZl
cnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXco
NCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0
IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0
UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsK
K30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW51bS1zcGVjLXRlc3RzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9lbnVtLXNwZWMtdGVzdHMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJkMjQ2NGU5OTc3ZGY2NTA4YzI4NmQ3MDg4Y2Q5ODRlMDk2Mjhk
ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZW51bS1zcGVj
LXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyBlbnVtRHVwbGljYXRl
cyAKK1BBU1MgZGVmYXVsdEVudW1Db25zdHJ1Y3RvciAKK1BBU1MgZW51bUFycmF5UmVmQmFzZSAK
K1BBU1MgZW51bUZsb2F0QmFzZSAKK1BBU1MgZW51bVB0ckJhc2UgCitQQVNTIGVudW1TdHJ1Y3RC
YXNlIAorUEFTUyBlbnVtTm9NZW1iZXJzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvZW51bS1zcGVjLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
ZW51bS1zcGVjLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU2YWI5YmQwNTEzMjBiYTMwZDNlYTNh
ZDE0MTBlYTJhNmMzYWY1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9lbnVtLXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxl
PgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0
IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5lbnVtRHVwbGljYXRlcyA9IGFzeW5jICgp
ID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICAgICAgZW51bSBGb28geworICAg
ICAgICAgICAgICAgIFdhciA9IDQyLAorICAgICAgICAgICAgICAgIEZhbWluZSA9IDAsCisgICAg
ICAgICAgICAgICAgUGVzdGlsZW5jZSA9IDIzLAorICAgICAgICAgICAgICAgIERlYXRoID0gNDIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9OworCit3aGxzbFRlc3RzLmRlZmF1bHRFbnVt
Q29uc3RydWN0b3IgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgZW51bSBXZWVrZGF5IHsKKyAgICAgICAgICAgIE1vbmRheSwKKyAgICAgICAgICAgIFR1ZXNk
YXksCisgICAgICAgICAgICBXZWRuZXNkYXksCisgICAgICAgICAgICBUaHVyc2RheSwKKyAgICAg
ICAgICAgIFBpenphZGF5CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFdlZWtkYXkgeCA9IFdlZWtkYXkoKTsKKyAgICAgICAgICAgIHJldHVybiA0
MjsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLmVudW1B
cnJheVJlZkJhc2UgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBlbnVtIEZvbyA6IHRocmVhZCBpbnRbXSB7CisgICAgICAgICAgICAg
ICAgQmFyCisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLmVudW1G
bG9hdEJhc2UgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICBlbnVtIEZvbyA6IGZsb2F0IHsKKyAgICAgICAgICAgICAgICBCYXIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuZW51bVB0ckJhc2UgPSBh
c3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBlbnVtIEZvbyA6IHRocmVhZCBpbnQqIHsKKyAgICAgICAgICAgICAgICBCYXIKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuZW51bVN0cnVjdEJhc2UgPSBhc3lu
YyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBz
dHJ1Y3QgVGhpbmd5IHsgfQorICAgICAgICAgICAgZW51bSBGb28gOiBUaGluZ3kgeworICAgICAg
ICAgICAgICAgIEJhcgorICAgICAgICAgICAgfQorICAgICAgICBgKTsKK307CisKK3dobHNsVGVz
dHMuZW51bU5vTWVtYmVycyA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisg
ICAgICAgIGAKKyAgICAgICAgICAgIGVudW0gRm9vIHsgfQorICAgICAgICBgKTsKK307CisKK3J1
blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZXF1YWxpdHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2VxdWFsaXR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzM4NDc4M2Y0
ODUxMGYzNTNjMTUzMjc0NTQ3ZTVhN2U5ZGUwNmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2VxdWFsaXR5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBA
CisKK1BBU1MgZXF1YWxpdHkgCitQQVNTIG5vdEVxdWFsaXR5IAorUEFTUyBlcXVhbGl0eVR5cGVG
YWlsdXJlIAorUEFTUyBlcXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBlcXVhbHNXcm9u
Z1JldHVyblR5cGUgCitQQVNTIGxlc3NFcXVhbFdyb25nQXJndW1lbnRMZW5ndGggCitQQVNTIGxl
c3NFcXVhbFdyb25nUmV0dXJuVHlwZSAKK1BBU1MgbGVzc1RoYW5Xcm9uZ0FyZ3VtZW50TGVuZ3Ro
IAorUEFTUyBsZXNzVGhhbldyb25nUmV0dXJuVHlwZSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2VxdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
ZXF1YWxpdHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjdmYTczOTkzNTIzZWU2MjQxYWFlN2FmNGVhYzU3
ZWRkNTYwMzhkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Vx
dWFsaXR5Lmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLmVxdWFsaXR5ID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9n
cmFtID0gImJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4ID09IHk7IH0iOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VVaW50KDcpLCBtYWtlVWludCg1KV0pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1ha2VVaW50
KDcpXSksIHRydWUpOworICAgIHByb2dyYW0gPSAiYm9vbCBmb28oaW50IHgsIGludCB5KSB7IHJl
dHVybiB4ID09IHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgZmFsc2UpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoNyksIG1ha2VJbnQoNyldKSwgdHJ1ZSk7CisgICAgcHJvZ3JhbSA9ICJib29sIGZvbyhi
b29sIHgsIGJvb2wgeSkgeyByZXR1cm4geCA9PSB5OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1h
a2VCb29sKHRydWUpXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2woZmFsc2Up
XSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pLCB0cnVlKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlQm9vbCh0cnVlKSwgbWFrZUJvb2wodHJ1ZSldKSwgdHJ1ZSk7Cit9CisKK3dobHNsVGVz
dHMubm90RXF1YWxpdHkgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAiYm9vbCBm
b28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggIT0geTsgfSI7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1h
a2VVaW50KDUpXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtlVWludCg3KV0pLCBmYWxzZSk7
CisgICAgcHJvZ3JhbSA9ICJib29sIGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggIT0geTsg
fSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpLCBtYWtl
SW50KDcpXSksIGZhbHNlKTsKKyAgICBwcm9ncmFtID0gImJvb2wgZm9vKGJvb2wgeCwgYm9vbCB5
KSB7IHJldHVybiB4ICE9IHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKSwgbWFrZUJvb2wodHJ1ZSld
KSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUJvb2wodHJ1ZSksIG1ha2VCb29sKGZhbHNlKV0pLCB0cnVlKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlQm9vbChmYWxzZSksIG1ha2VCb29sKGZhbHNlKV0pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wodHJ1
ZSksIG1ha2VCb29sKHRydWUpXSksIGZhbHNlKTsKK307CisKK3dobHNsVGVzdHMuZXF1YWxpdHlU
eXBlRmFpbHVyZSA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoImJvb2wgZm9v
KGludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOworfTsKKword2hsc2xUZXN0cy5l
cXVhbHNXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCkgeyByZXR1cm4g
dHJ1ZTsgfQorICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGludCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAg
ICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7
Cit9OworCit3aGxzbFRlc3RzLmVxdWFsc1dyb25nUmV0dXJuVHlwZSA9IGFzeW5jICgpID0+IHsK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28g
eyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3I9PShGb28sIEZvbykgeyByZXR1cm4gNDI7IH0K
KyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMubGVzc0VxdWFsV3JvbmdBcmd1bWVudExlbmd0
aCA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I8PSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBib29sIG9wZXJhdG9y
PD0oaW50KSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPD0oaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5sZXNzRXF1
YWxXcm9uZ1JldHVyblR5cGUgPSBhc3luYyAoKSA9PiB7CisgICAgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9y
PD0oRm9vLCBGb28pIHsgcmV0dXJuIDQyOyB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3Rz
Lmxlc3NUaGFuV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBj
aGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8KCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8KGludCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAg
ICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3I8KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7Cit9
CisKK3dobHNsVGVzdHMubGVzc1RoYW5Xcm9uZ1JldHVyblR5cGUgPSBhc3luYyAoKSA9PiB7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsg
fQorICAgICAgICAgICAgaW50IG9wZXJhdG9yPChGb28sIEZvbykgeyByZXR1cm4gNDI7IH0KKyAg
ICAgICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1
NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NGVkYTMwZjY0YjZlODRkZDMwYzBlZDhjN2ZlOTE0YTUzYTRjZjI3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGgt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGZsb2F0TWF0aCAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zsb2F0LW1hdGguaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2MGEzYzNlYTMz
NzYxYzMwYzIwMDI0OGI4ODMzOWY0ZWU4YjAxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9mbG9hdC1tYXRoLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qg
d2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmZsb2F0TWF0aCA9IGFzeW5jICgpID0+IHsK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgYm9vbCBmb28oKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gNDIuNSA9PSA0Mi41OworICAgICAgICB9CisgICAgICAgIGZsb2F0IGJh
cihmbG9hdCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQor
ICAgICAgICBmbG9hdCBmb282KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcig3
LjUpOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGZvbzkoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmxvYXQoNy41KTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28xMigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdCg3KTsKKyAgICAgICAgfQorICAg
ICAgICBmbG9hdCBmb28xMygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHggPSA3LjU7
CisgICAgICAgICAgICByZXR1cm4gZmxvYXQoeCk7CisgICAgICAgIH0KKyAgICBgOworCisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9vIiwgW10p
LCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dy
YW0sICJmb282IiwgW10pLCA3LjUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzkiLCBbXSksIDcuNSk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTIiLCBbXSksIDcpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEzIiwgW10p
LCA3LjUpOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBp
bnQgYmFyKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB4Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYmFyKDQuMCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgYmFyKGludCB4KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFy
KDQuMGYpOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKworICAgIGF3YWl0IGNoZWNrRmFp
bCgKKyAgICAgICAgYAorICAgICAgICAgICAgdWludCBiYXIodWludCB4KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFyKDQuMCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICB1aW50IGJhcih1aW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZm9vKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXIoNC4wZik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2Zvci1sb29wLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mb3ItbG9vcC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWU2N2U1ZmIzZmU4ZDQxY2ZkYTg1OTY1NDEyNGNhOGU1Mzc4MjM1NQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9mb3ItbG9vcC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgZm9yTG9vcCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL2Zvci1sb29wLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvZm9yLWxvb3AuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTlhOWNmODdlYTM2ZmJkYzU4YTdjNWZhMjg4
NzZiNzg2YzVlMDcyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2Zvci1sb29wLmh0bWwKQEAgLTAsMCArMSwxNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9u
ZyI+Cis8dGl0bGU+THZhbHVlcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3Qt
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0
cy5mb3JMb29wID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
aW50IGZvbzEoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAg
ICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAx
KSB7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzIoaW50IHgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgZm9vMyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7
CisgICAgICAgICAgICBpbnQgaSA9IDEwMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgeDsgaSA9IGkgKyAxKSB7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAgICAgICAgaW50
IGZvbzQoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaSA9PSA0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBzdW0gPSBzdW0gKyBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1
bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vNShpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkg
PSBpICsgMSkgeworICAgICAgICAgICAgICAgIGlmIChpID09IDUpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIGk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAgICB9CisgICAgICAgIGludCBmb282KGlu
dCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyA7IGkgPSBpICsgMSkgeworICAgICAgICAgICAgICAgIGlmIChpID49IHgp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN1bSA9IHN1bSAr
IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAgICB9Cisg
ICAgICAgIGludCBmb283KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3VtID0g
MDsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoIDsgOyBpID0gaSAr
IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSB4KQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vOChpbnQgeCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBpbnQgaSA9
IDA7CisgICAgICAgICAgICBmb3IgKCA7IDsgKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPj0g
eCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc3VtID0gc3Vt
ICsgaTsKKyAgICAgICAgICAgICAgICBpID0gaSArIDE7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gc3VtOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtlSW50KDMpXSksIDMpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28xIiwg
W21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzEiLCBbbWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbbWFrZUludCgzKV0pLCAz
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
MiIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW21ha2VJbnQoNSldKSwgMTApOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoMyld
KSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzMiLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtlSW50
KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb280IiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbbWFrZUludCg1KV0pLCA2KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtl
SW50KDYpXSksIDExKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vNSIsIFttYWtlSW50KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb281IiwgW21ha2VJbnQoNCldKSwgNik7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBb
bWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg2KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg3KV0pLCAx
MCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzYiLCBbbWFrZUludCgzKV0pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNiIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNSld
KSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb282IiwgW21ha2VJbnQoNildKSwgMTUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNyldKSwgMjEpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW21ha2VJ
bnQoMyldKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzciLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFtt
YWtlSW50KDYpXSksIDE1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDcpXSksIDIxKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIsIFttYWtlSW50KDMpXSksIDMp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284
IiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg2KV0p
LCAxNSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzgiLCBbbWFrZUludCg3KV0pLCAyMSk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgOyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHggPSBpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoIDsgeCA8IDEwOyApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVu
VGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0ZXItdHlwZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZ2V0dGVyLXNldHRlci10eXBlLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wMzU3ZWM3YjdhOTA0ZTEwZDJlNDFiYjM2YWZmNTY2Y2E4MzAxYTY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0ZXItdHlw
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgZ2V0dGVyVHlwZSAKK1BBU1Mg
c2V0dGVyVHlwZSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRl
ci1zZXR0ZXItdHlwZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2dldHRlci1zZXR0
ZXItdHlwZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMWYwNDE2MjQyNDY5YzEzODEzOTBmYTQ4Nzk4Y2Y5
M2Y4NmY3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZ2V0
dGVyLXNldHRlci10eXBlLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBsb29wcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKwor
d2hsc2xUZXN0cy5nZXR0ZXJUeXBlID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFp
bChgCisgICAgICAgIGludCBvcGVyYXRvci54KHRocmVhZCBpbnRbXSBmb28pCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmb29bMF07CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdh
aXQgY2hlY2tGYWlsKGAKKyAgICAgICAgaW50IG9wZXJhdG9yLngoaW50WzNdIGZvbykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZvb1swXTsKKyAgICAgICAgfQorICAgIGApOyAKKyAg
ICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgb3BlcmF0b3JbXSh0aHJlYWQgaW50W10g
Zm9vLCBpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb29baW5kZXhd
OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGlu
dCBvcGVyYXRvci54KGludFszXSBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
b29bMF07CisgICAgICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAg
ICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBp
bnQgb3BlcmF0b3JbXShGb28gZm9vLCB1aW50NCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZvb1tpbmRleC54XTsKKyAgICAgICAgfQorICAgIGApOyAKK307CisKK3dobHNs
VGVzdHMuc2V0dGVyVHlwZSA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAor
ICAgICAgICB0aHJlYWQgaW50W10gb3BlcmF0b3IueD0odGhyZWFkIGludFtdIGZvbywgdWludCB4
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgYCk7
IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGludFszXSBvcGVyYXRvci54PShpbnRb
M10gZm9vLCB1aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAg
ICAgIH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgdGhyZWFkIGlu
dFtdIG9wZXJhdG9yW109KHRocmVhZCBpbnRbXSBmb28sIHVpbnQgeCwgdWludCB5KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3
YWl0IGNoZWNrRmFpbChgCisgICAgICAgIGludFszXSBvcGVyYXRvci54PShpbnRbM10gZm9vLCB1
aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAg
ICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAg
ICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBGb28gb3BlcmF0b3JbXT0oRm9vIGZv
bywgZmxvYXQ0IHksIHVpbnQgeikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54
OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAgICAgIHN0
cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9w
ZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54Owor
ICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvci55PShGb28gZm9vLCBpbnQ0IHgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICBmb28ueCA9IHgueDsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICBgKTsgCit9OworCity
dW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaHVnZS1hcnJheS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvaHVnZS1hcnJheS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4
MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9odWdlLWFycmF5LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2h1Z2UtYXJy
YXkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9odWdlLWFycmF5Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDA4YTJmZjIyZWJhNTVlZjY2ZTc0YjI5ZjRlMjNhOTlmMDJhYjkzMgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9odWdlLWFycmF5Lmh0bWwKQEAgLTAs
MCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordm9pZCBmaWxsKHRocmVhZCBmbG9hdFtdIGFycmF5
LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIGFycmF5W2ldID0gdmFsdWU7CisgICAgfQorfQorCitbbnVtdGhyZWFk
cygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZm
ZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQp
IHsKKyAgICBmbG9hdFsxMDAwXSBhcnJheTsKKyAgICBpZiAoYXJyYXkubGVuZ3RoICE9IDEwMDAp
CisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7
ICsraSkgeworICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhcnJheVswXSA9IDAuMTMzNzsKKyAgICBpZiAoYXJyYXlbMF0gIT0gMC4x
MzM3KQorICAgICAgICByZXR1cm47CisKKyAgICB0aHJlYWQgZmxvYXRbXSBhcnJheVB0ciA9IEBh
cnJheTsKKyAgICBpZiAoYXJyYXlQdHIubGVuZ3RoICE9IDEwMDApCisgICAgICAgIHJldHVybjsK
KworICAgIGZpbGwoYXJyYXlQdHIsIDAuMTAxMCk7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwg
YXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5UHRyW2ldICE9IDAuMTAx
MCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFycmF5W2ldICE9IDAuMTAxMCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxsKEBhcnJheSwgMC4wMTAxKTsK
KyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICBp
ZiAoYXJyYXlQdHJbaV0gIT0gMC4wMTAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoYXJyYXlbaV0gIT0gMC4wMTAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5n
OiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRl
U3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7
CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0
IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVC
dWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIs
IDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdh
aXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJy
YXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRz
SW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQor
ICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2lm
LXN0YXRlbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaWYtc3Rh
dGVtZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTM4M2U3ZmFkNDZmZTM1N2QxOWUxMTBh
ZDU2Y2Q4NDUyMWE2YmEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2lmLXN0YXRlbWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1MgaWZT
dGF0ZW1lbnQgCitQQVNTIGlmRWxzZVN0YXRlbWVudCAKK1BBU1MgaWZFbHNlSWZTdGF0ZW1lbnQg
CitQQVNTIGlmRWxzZUlmRWxzZVN0YXRlbWVudCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2lmLXN0YXRlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2lmLXN0YXRlbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MjY0OGNkNWRjMTNhMzAyMzVhYTJkZDk1
ZGM1YmM5Zjg1NjFmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvaWYtc3RhdGVtZW50Lmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBpbnQgYml0IG1hdGguPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0g
e307CisKK3dobHNsVGVzdHMuaWZTdGF0ZW1lbnQgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBw
cm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgeSA9IDY7CisgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CisgICAgICAgICAgICAgICAg
eSA9IDg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQor
ICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDMpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSld
KSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDYpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA4KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCld
KSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlSW50KDkpXSksIDYpOworfQorCit3aGxzbFRlc3RzLmlmRWxzZVN0YXRlbWVu
dCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28o
aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgIGlm
ICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICB5ID0gODsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgeSA9IDk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4geTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDMpXSksIDkpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg0KV0p
LCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoNSldKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDYpXSksIDkpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0p
LCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQoOCldKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDkpXSksIDkpOworfQorCit3aGxzbFRl
c3RzLmlmRWxzZUlmU3RhdGVtZW50ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHkg
PSA2OworICAgICAgICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAgICAgIHkgPSA4Owor
ICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDgpIHsKKyAgICAgICAgICAgICAgICB5ID0gOTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgYDsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoMyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg1KV0pLCA2KTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoNildKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQoOSldKSwgNik7Cit9CisKK3dobHNsVGVzdHMuaWZFbHNlSWZFbHNlU3RhdGVtZW50
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhp
bnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgaWYg
KHggPT0gNykgeworICAgICAgICAgICAgICAgIHkgPSA4OworICAgICAgICAgICAgfSBlbHNlIGlm
ICh4ID09IDgpIHsKKyAgICAgICAgICAgICAgICB5ID0gOTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgeSA9IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzKV0pLCAxMCk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQp
XSksIDEwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQoNSldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2KV0pLCAxMCk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDcpXSksIDgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOSldKSwgMTApOworfQorCity
dW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNyZW1lbnQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIyOGU1MGU3MTQ3NTBiNmNlYWM3NjIyMmYwNWNlYmE2MmQxYTUwYzMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5jcmVtZW50LWRlY3Jl
bWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgaW5jcmVtZW50QW5kRGVj
cmVtZW50IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5jcmVtZW50
LWRlY3JlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3JlbWVudC1kZWNy
ZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjY2NTlhNzNmZGQ3NzhmOWQxY2E2ZGY4YTliMjkyYWQy
ODQ1MWVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luY3Jl
bWVudC1kZWNyZW1lbnQuaHRtbApAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9
ImxvbmciPgorPHRpdGxlPkNvcHlpbmcuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNs
VGVzdHMuaW5jcmVtZW50QW5kRGVjcmVtZW50ID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9n
cmFtID0gYAorICAgICAgICBpbnQgZm9vMSgpIHsgaW50IHggPSAwOyByZXR1cm4geCsrOyB9Cisg
ICAgICAgIGludCBmb28yKCkgeyBpbnQgeCA9IDA7IHgrKzsgcmV0dXJuIHg7IH0KKyAgICAgICAg
aW50IGZvbzMoKSB7IGludCB4ID0gMDsgcmV0dXJuICsreDsgfQorICAgICAgICBpbnQgZm9vNCgp
IHsgaW50IHggPSAwOyArK3g7IHJldHVybiB4OyB9CisgICAgICAgIGludCBmb281KCkgeyBpbnQg
eCA9IDA7IHJldHVybiB4LS07IH0KKyAgICAgICAgaW50IGZvbzYoKSB7IGludCB4ID0gMDsgeC0t
OyByZXR1cm4geDsgfQorICAgICAgICBpbnQgZm9vNygpIHsgaW50IHggPSAwOyByZXR1cm4gLS14
OyB9CisgICAgICAgIGludCBmb284KCkgeyBpbnQgeCA9IDA7IC0teDsgcmV0dXJuIHg7IH0KKyAg
ICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28xIiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vMiIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW10pLCAxKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFtdKSwgMCk7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzYiLCBb
XSksIC0xKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vNyIsIFtdKSwgLTEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb284IiwgW10pLCAtMSk7Cit9OworCitydW5UZXN0cyh3aGxzbFRlc3Rz
KTsKKzwvc2NyaXB0PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvaW5kZXgtYW5kZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2luZGV4LWFuZGVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmNiNDk0NGVjYjgzNTljYzU0
N2QyOWIxNTJiYjIxMTAwNzFmMzZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2luZGV4LWFuZGVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFT
UyBpbmRleEFuZGVyV2l0aE5vdGhpbmdXcm9uZyAKK1BBU1MgaW5kZXhBbmRlcldpdGhXcm9uZ051
bWJlck9mQXJndW1lbnRzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
aW5kZXgtYW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1hbmRlci5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRhNzI4NzhiYWYxYTQ1YWQ0MjcyNWY2NTJmNjRhNTZiYTk0YmEwMWMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5kZXgtYW5kZXIu
aHRtbApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hh
cnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxl
PlRlc3Qgc3RydWN0cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5pbmRl
eEFuZGVyV2l0aE5vdGhpbmdXcm9uZyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0K
KyAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZm9vLCB1aW50KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIHg7CisgICAgICAgICAgICB4
LnggPSAxMzsKKyAgICAgICAgICAgIHJldHVybiB4WzY2Nl07CisgICAgICAgIH0KKyAgICBgOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSksIDEzKTsKK30KKword2hsc2xUZXN0cy5pbmRleEFuZGVyV2l0aFdyb25nTnVtYmVyT2ZBcmd1
bWVudHMgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3ImW10oKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAgIHJldHVybiAmeDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICAgICAgaW50IHg7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQg
Rm9vKiBmb28pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPng7
CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0Zh
aWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgICAg
IGludCB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkIGludCogb3BlcmF0b3Im
W10odGhyZWFkIEZvbyogZm9vLCB1aW50LCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKwor
cnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YWJiZmYxMTM0MzljMzEwZmI3NDZhYTUyZjQ5NDhmMjBmNmY3YzU0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2luZGV4LWdldHRlci1z
ZXR0ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIHBvaW50ZXJJbmRleEdl
dHRlciAKK1BBU1MgcG9pbnRlckdldHRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2luZGV4LWdldHRlci1zZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGEwNzlmYTU3ZDE4NWM1
YWRmMjY4Y2U1ZDJkY2ZmYjE0NGJlMzJmZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9pbmRleC1nZXR0ZXItc2V0dGVyLmh0bWwKQEAgLTAsMCArMSw4MSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1l
PSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhh
cm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMucG9pbnRlckluZGV4
R2V0dGVyID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yW10oZGV2aWNlIGludCosIHVpbnQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
YCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBv
cGVyYXRvcltdKHRocmVhZCBpbnQqLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAgYXdhaXQg
Y2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXSh0aHJlYWRn
cm91cCBpbnQqLCB1aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiA1
NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAgYXdhaXQgY2hlY2tGYWlsKAor
ICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXShjb25zdGFudCBpbnQqLCB1aW50
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiA1NDM7CisgICAgICAgICAg
ICB9CisgICAgICAgIGApOworfQorCit3aGxzbFRlc3RzLnBvaW50ZXJHZXR0ZXIgPSBhc3luYyAo
KSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQg
b3BlcmF0b3IuZm9vKGRldmljZSBpbnQqKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiA1NDM7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNoZWNr
RmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbyh0aHJlYWQgaW50
KikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAg
ICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAg
ICAgICAgIGludCBvcGVyYXRvci5mb28odGhyZWFkZ3JvdXAgaW50KikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAgICAgfQorICAgICAgICBgKTsK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRv
ci5mb28oY29uc3RhbnQgaW50KikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gNTQzOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworCitydW5UZXN0cyh3aGxz
bFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2luZGV4LXNldHRlci1nZXR0ZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIzNjM5ZDA1YTZiMzQyZjhmZWNhNDdmODE1NDMyNDg2N2YxMGVlNGMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvaW5kZXgtc2V0dGVyLWdldHRlci1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw3IEBACisKK1BBU1MgaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVy
bG9hZCAKK1BBU1MgaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkIAorUEFTUyBu
b3RMb25lSW5kZXhTZXR0ZXIgCitQQVNTIGxvbmVJbmRleFNldHRlciAKK1BBU1MgbG9uZUluZGV4
U2V0dGVyUG9pbnRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2lu
ZGV4LXNldHRlci1nZXR0ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbmRleC1z
ZXR0ZXItZ2V0dGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhMTVhYTc0NjRjN2E3ZTI2MjE4YWY2MWUy
NzhhN2I1Y2RhYmUwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9pbmRleC1zZXR0ZXItZ2V0dGVyLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLmluZGV4U2V0dGVyV2l0aE5vR2V0dGVyT3ZlcmxvYWQgPSBhc3lu
YyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIHN0cnVjdCBCYXIgeyB9CisgICAgICAgICAgICBp
bnQgb3BlcmF0b3JbXShGb28sIHVpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDUzNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJhciBvcGVyYXRvcltdPShC
YXIsIHVpbnQsIGludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQmFy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAgICAKK307CisKK3dobHNsVGVz
dHMuaW5kZXhTZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkID0gYXN5bmMgKCkgPT4KK3sK
KyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICBzdHJ1Y3QgQmFyIHsgfQorICAgICAgICBp
bnQgb3BlcmF0b3JbXShCYXIsIHVpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiA1
MzQ7CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9yW109KEJhciwgdWludCwgaW50KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQmFyKCk7CisgICAgICAgIH0KKyAgICAgICAg
aW50IGZvbygpIHsgcmV0dXJuIEJhcigpWzBdOyB9CisgICAgICAgIGludCBiYXIoKSB7CisgICAg
ICAgICAgICBCYXIgYjsKKyAgICAgICAgICAgIGJbMF0gPSA0MDA7CisgICAgICAgICAgICByZXR1
cm4gYlswXTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNTM0KTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCA1MzQpOworfTsKKwor
d2hsc2xUZXN0cy5ub3RMb25lSW5kZXhTZXR0ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGNvbnN0
IHByb2dyYW0gPSBgCisgICAgICAgIGludCBvcGVyYXRvcltdKGludCwgdWludCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIDY1OworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRv
cltdPShpbnQsIHVpbnQsIGludCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDU0MzsK
KyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkgeworICAgICAgICAgICAgaW50IHg7CisgICAg
ICAgICAgICByZXR1cm4geFswXTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKCkgeworICAg
ICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB4WzBdID0gNDI7CisgICAgICAgICAgICByZXR1
cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNjUpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDU0Myk7Cit9OworCit3aGxz
bFRlc3RzLmxvbmVJbmRleFNldHRlciA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCB1aW50LCBp
bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfTsKKword2hsc2xUZXN0cy5sb25lSW5kZXhT
ZXR0ZXJQb2ludGVyID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yW109KHRocmVhZCBpbnQqIHB0
ciwgdWludCwgaW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwdHI7
CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgICAgICAKK307CisKK3J1blRlc3RzKHdo
bHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvaW50LWJpdC1tYXRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9pbnQtYml0LW1hdGgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MWI2YzUzZTFk
Y2MwY2RiNTdmNjU2ZmMyNjVkYjlmMjAxMjVmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvaW50LWJpdC1tYXRoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkg
QEAKKworUEFTUyBpbnRCaXRBbmQgCitQQVNTIGludEJpdE9yIAorUEFTUyBpbnRCaXRYb3IgCitQ
QVNTIGludEJpdE5vdCAKK1BBU1MgaW50TFNoaWZ0IAorUEFTUyBpbnRSU2hpZnQgCitQQVNTIGlu
dFNpbXBsZU1hdGggCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQt
Yml0LW1hdGguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQtYml0LW1hdGguaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMTdhZjRkODhlNzgzYWJkZjY0NWIyODFkMTgyNGEzZjg5MzRkZGZlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2ludC1iaXQtbWF0aC5o
dG1sCkBAIC0wLDAgKzEsMTEwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hh
cnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxl
PlRlc3QgaW50IGJpdCBtYXRoLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1o
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3Rz
LmludEJpdEFuZCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAg
IGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAm
IGI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKSwgbWFrZUludCg3KV0pLCAxKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoNjU1MzUpLCBtYWtlSW50KDQyKV0pLCA0Mik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZUludCgt
NyldKSwgLTcpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUludCgwKSwgbWFrZUludCg4NTczMildKSwgMCk7Cit9CisKK3dobHNs
VGVzdHMuaW50Qml0T3IgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAg
ICAgICBpbnQgZm9vKGludCBhLCBpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGEgfCBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMSksIG1ha2VJbnQoNyldKSwgNyk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDY1NTM1KSwgbWFrZUludCg0MildKSwgNjU1MzUpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgtMSksIG1h
a2VJbnQoLTcpXSksIC0xKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCksIG1ha2VJbnQoODU3MzIpXSksIDg1NzMyKTsK
K30KKword2hsc2xUZXN0cy5pbnRCaXRYb3IgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9n
cmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCBhLCBpbnQgYikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMSksIG1ha2VJ
bnQoNyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDY1NTM1KSwgbWFrZUludCg0MildKSwgNjU0OTMpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCgtMSksIG1ha2VJbnQoLTcpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKSwgbWFrZUludCg4NTczMild
KSwgODU3MzIpOworfQorCit3aGxzbFRlc3RzLmludEJpdE5vdCA9IGFzeW5jICgpID0+Cit7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IGEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB+YTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIC0y
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoNjU1MzUpXSksIC02NTUzNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKV0pLCAwKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoMCldKSwgLTEpOworfQorCit3aGxzbFRlc3RzLmludExTaGlmdCA9IGFzeW5jICgpID0+Cit7
CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IGEsIHVpbnQgYikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKKyAgICAgICAgfQorICAgIGA7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KDEpLCBtYWtlVWludCg3KV0pLCAxMjgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NTUzNSksIG1ha2VVaW50
KDIpXSksIDI2MjE0MCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZVVpbnQoNSldKSwgLTMyKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQoMCksIG1ha2VVaW50KDMpXSksIDApOworfQorCit3aGxzbFRlc3RzLmludFJTaGlmdCA9IGFz
eW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IGEs
IHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPj4gYjsKKyAgICAgICAg
fQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlSW50KDEpLCBtYWtlVWludCg3KV0pLCAwKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjU1MzUp
LCBtYWtlVWludCgyKV0pLCAxNjM4Myk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KC0xKSwgbWFrZVVpbnQoNSldKSwgLTEp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgwKSwgbWFrZVVpbnQoMyldKSwgMCk7Cit9CisKK3dobHNsVGVzdHMuaW50U2lt
cGxlTWF0aCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9ICJpbnQgZm9vKGludCB4
LCBpbnQgeSkgeyByZXR1cm4geCArIHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCAx
Mik7CisgICAgcHJvZ3JhbSA9ICJpbnQgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCAtIHk7
IH0iOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZUludCg3KSwgbWFrZUludCg1KV0pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNSksIG1ha2VJbnQo
NyldKSwgLTIpOworICAgIHByb2dyYW0gPSAiaW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJu
IHggKiB5OyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VJbnQoNyksIG1ha2VJbnQoNSldKSwgMzUpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KSwg
bWFrZUludCgtNSldKSwgLTM1KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQtbGl0
ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9pbnQt
bGl0ZXJhbC1jb21wYXJlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmRhZDY1OTNiNjEyN2E2
MmYyZTc0YzE4MDRiOTJmMmQzMDkxY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MyBAQAorCitQQVNTIHR3b0ludExpdGVyYWxzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvaW50LWxpdGVyYWwtY29tcGFyZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGY0MmU4MmViN2E5
YTZiYmRkODYwMzI0OTBkNTdmYTdlZTFjOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2ludC1saXRlcmFsLWNvbXBhcmUuaHRtbApAQCAtMCwwICsxLDI0IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5h
bWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3Qg
aGFybmVzcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy50
d29JbnRMaXRlcmFscyA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgYm9vbCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gNDIgPT0gNDI7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10pLCB0cnVlKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7
Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9sb2dpY2FsLW5lZ2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9sb2dpY2FsLW5lZ2F0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzk4MTQwNTMzZDQ1
Y2U0NTQzNjFkNTY2NWI4NzQ3YTI0MDUwMDNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2xvZ2ljYWwtbmVnYXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MyBAQAorCitQQVNTIGxvZ2ljYWxOZWdhdGlvbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2xvZ2ljYWwtbmVnYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIyMTQ1ZmU1ZDBlODBhZTlh
NDQwZDNkZWJkODc3YjcwMTgzNjY4NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9sb2dpY2FsLW5lZ2F0aW9uLmh0bWwKQEAgLTAsMCArMSwyMiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1l
b3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5MdmFsdWVzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLmxvZ2ljYWxOZWdhdGlvbiA9IGFzeW5jICgpID0+Cit7CisgICAg
bGV0IHByb2dyYW0gPSAiYm9vbCBmb28oYm9vbCB4KSB7IHJldHVybiAheDsgfSI7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJv
b2wodHJ1ZSldKSwgZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKGZhbHNlKV0pLCB0cnVlKTsKK30KKworcnVu
VGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1icmVhay1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL2xvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Jm
ODY5YTk3OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1icmVhay1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL2xvb3BzLWJyZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtYnJl
YWsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jODIzODJkYWMwZTE5MGEyYTI0OGM1NzNiNjRkMWQ1OGY2NTBm
YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLWJy
ZWFrLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRl
eE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkp
IHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBmb3Ig
KHVpbnQgaSA9IDA7IGkgPCAxMDsgKGkgPSBpICsgMSwgc2hhZGUgPSBzaGFkZSArIDEuMCkpIHsK
KyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHNoYWRlID0gc2hhZGUgKyAxLjA7CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9z
aXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBz
aGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisg
ICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0
Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAx
LCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBb
YXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAs
IGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzog
MCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRl
dmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOworCisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
MTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5k
aW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0
YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd0Js
YWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL2xvb3BzLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmODY5YTk3
OTZmMzU4NjViMjhjNmI2NWY4YjIwMmZiOWZkMjJlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJh
d0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2xvb3BzLWNvbnRpbnVlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtY29u
dGludWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2I0ZTkwMThlM2FkM2U0NDFiZjMzMjJiNWI5NDNlNmY2
MWE4YWFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3Bz
LWNvbnRpbnVlLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0
IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9vbCBiID0gdHJ1ZTsKKyAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGlmIChiKSB7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzaGFkZSA9IHNoYWRl
ICsgMS4wOworICAgIH0KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJl
c3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQg
ZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1Rh
cmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9
CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Cisg
ICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0
IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9
OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJs
ZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFM
TAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJp
YnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07
CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxv
YXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0
dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6
IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3Rh
Z2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBk
ZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBp
cGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVS
ZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4wOworCisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzdd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4w
OworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZm
ZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3Vy
Y2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBy
ZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHti
aW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3Vw
RGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3Jv
dXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0
Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2Us
IGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNv
bmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0
VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBj
b25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7
fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBj
b2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2
ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNv
bG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMt
ZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy1leHBlY3RlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtZXhwZWN0
ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9sb29wcy1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9sb29wcy1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZmQyODA1Y2I2MDgyNjNkYzkxOWVhMTM2NDcwMWM0N2JhNDMxYTAxCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIGRvV2hpbGUgCitQQVNTIHNpbXBsZVdoaWxlIAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbG9vcHMtc3BlYy10ZXN0cy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOGE5ODRkNTEyMDM0YWE4MTY2MzcwMjJhNTUzNzE0YzFiYTVkNDQwCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLXNwZWMtdGVzdHMuaHRt
bApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNl
dD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRl
c3QgbG9vcHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuZG9XaGlsZSA9
IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28xKGlu
dCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeSA9IDc7CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgeSA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IHdoaWxlICh4IDwgMTApOworICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0K
KyAgICAgICAgaW50IGZvbzIoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5ID0g
NzsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB5ID0gODsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gd2hpbGUgKHkgPT0gNyk7CisgICAgICAgICAgICBy
ZXR1cm4geTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vMyhpbnQgeCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgaWYgKHggPT0gMTEpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IDE1OworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c3VtID0gc3VtICsgeDsKKyAgICAgICAgICAgICAgICB4ID0geCArIDE7CisgICAgICAgICAgICB9
IHdoaWxlICh4IDwgMTMpOworICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAg
IGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
bzEiLCBbbWFrZUludCgxKV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtlSW50KDExKV0pLCA4KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFttYWtlSW50KDEp
XSksIDgpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28zIiwgW21ha2VJbnQoOSldKSwgMTkpOworfQorCit3aGxzbFRlc3RzLnNpbXBsZVdoaWxl
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhp
bnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHggPCAxMykKKyAgICAgICAgICAg
ICAgICB4ID0geCAqIDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDEpXSksIDE2KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvb3BzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJm
Yjc2NzVjMDZjN2Q4Yjk0OWQ3MDU5YTI5ZTUzNjQyOTJiOTI4ZAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb29wcy5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNo
YWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0
ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCks
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKwor
ICAgIGZvciAodWludCBpID0gMDsgaSA8IDEwOyBpID0gaSArIDEpIHsKKyAgICAgICAgc2hhZGUg
PSBzaGFkZSArIDAuMTsKKyAgICB9CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsK
KyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Zy
YWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAx
LjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRl
ciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAg
ICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTog
Im5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwg
YWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRl
Qml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25z
dCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZz
ZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1h
dDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1
dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmli
dXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBj
b25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFn
bWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0
YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2Uu
Y3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAu
MTsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjE7CisKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNF0gPSAwLjE7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5
XSA9IDAuMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291
cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZl
ciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJB
cnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAg
IHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1
ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRp
bmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJp
bmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBb
YmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2Fu
dmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7
ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29u
dGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0
IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwor
CisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAg
Y29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcs
IHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwg
Y2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51
bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBj
b21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmlu
aXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9
CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2
aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVh
cmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L2xvdHMtb2YtbG9jYWwtdmFyaWFibGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzA0MDc4MWE0YWVjN2JiMmMzZWM3MGU3YjUyZmYxOGZkY2U2YTI4ZQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlhYmxlcy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgbG90c09mTG9jYWxWYXJpYWJsZXMgCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9mLWxvY2FsLXZhcmlh
Ymxlcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2xvdHMtb2YtbG9jYWwtdmFyaWFi
bGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYxMDRiNDE2OTRmNTVhYzQ1YjlhODEwMmQxODE0NDI4ZjA4
Njk0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sb3RzLW9m
LWxvY2FsLXZhcmlhYmxlcy5odG1sCkBAIC0wLDAgKzEsMzcgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+Cis8dGl0bGU+TG90cyBvZiBsb2NhbCB2YXJpYWJsZXMuPC90aXRsZT4KKzxzY3Jp
cHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRl
c3RzID0ge307CisKK3dobHNsVGVzdHMubG90c09mTG9jYWxWYXJpYWJsZXMgPSBhc3luYyAoKSA9
PgoreworICAgIGxldCBzcmMgPSAiaW50IHN1bSgpIHtcbiI7CisgICAgc3JjICs9ICIgICAgaW50
IGkgPSAwO1xuIjsKKyAgICBsZXQgdGFyZ2V0ID0gMDsKKyAgICBjb25zdCBudW1WYXJzID0gNTA7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYXJzOyBpKyspIHsKKyAgICAgICAgc3JjICs9
IGAgICBpID0gJHtpfTtcbmA7CisgICAgICAgIHNyYyArPSBgICAgaW50IFYke2l9ID0gKGkgKyAz
KSAqIChpICsgMyk7XG5gOworICAgICAgICB0YXJnZXQgKz0gKGkgKyAzKSAqIChpICsgMyk7Cisg
ICAgfQorICAgIHNyYyArPSAiICAgIGludCByZXN1bHQgPSAwO1xuIjsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IG51bVZhcnM7IGkrKykgeworICAgICAgICBzcmMgKz0gYCAgICByZXN1bHQgKz0g
ViR7aX07XG5gOworICAgIH0KKyAgICBzcmMgKz0gIiAgICByZXR1cm4gcmVzdWx0O1xuIjsKKyAg
ICBzcmMgKz0gIn0iOworICAgIGxldCBwcm9ncmFtID0gc3JjOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJzdW0iLCBbXSksIHRhcmdldCk7Cit9CisK
K3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9sdmFsdWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9sdmFsdWVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDAyMjMx
YzRlNTQ3ZWIyZDUzY2VkMWY4NWI0MWMwMWUyMjc1ZTQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2x2YWx1ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBA
QAorCitQQVNTIGxWYWx1ZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9sdmFsdWVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbHZhbHVlcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJhNTk3MzczMjg1YzM2NTc2YmM2NDczZTgyZjAwMDA2YjUyODE2OTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbHZhbHVlcy5odG1sCkBAIC0w
LDAgKzEsMTA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYt
OD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPkx2YWx1ZXMu
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMubFZhbHVlcyA9IGFzeW5jICgp
ID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYo
eCsrKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBh
d2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYoKyt4KTsKKyAgICAg
ICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBhd2FpdCBjaGVja0Zh
aWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSAw
OworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9ICYoeCA9IDMpOworICAgICAgICAgICAgcmV0
dXJuICp5OworICAgICAgICB9CisgICAgYCk7IAorICAgIGF3YWl0IGNoZWNrRmFpbChgCisgICAg
ICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAg
ICAgICB0aHJlYWQgaW50KiB5ID0gJjM7CisgICAgICAgICAgICByZXR1cm4gKnk7CisgICAgICAg
IH0KKyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgaW50IGJhcihpbnQg
eCkgeworICAgICAgICAgICAgcmV0dXJuIHggKyAxOworICAgICAgICB9CisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgICAgICB0aHJl
YWQgaW50KiB5ID0gJmJhcigzKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQor
ICAgIGApOyAKKyAgICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHggPSAwOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9
ICYoNywgeCk7CisgICAgICAgICAgICByZXR1cm4gKnk7CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBhd2FpdCBjaGVja0ZhaWwoYAorICAgICAgICBlbnVtIERheXMgeworICAgICAgICAgICAgTW9u
ZGF5LAorICAgICAgICAgICAgVHVlc2RheQorICAgICAgICB9CisgICAgICAgIGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgICAgICB0aHJlYWQgaW50
KiB5ID0gJihEYXlzLk1vbmRheSk7CisgICAgICAgICAgICByZXR1cm4gKnk7CisgICAgICAgIH0K
KyAgICBgKTsgCisgICAgYXdhaXQgY2hlY2tGYWlsKGAKKyAgICAgICAgaW50IGZvbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRocmVhZCBib29sKiB5ID0gJih0cnVlICYmIGZhbHNlKTsKKyAg
ICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQorICAgIGApOyAKKyAgICBhd2FpdCBjaGVj
a0ZhaWwoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyZWFk
IGJvb2wqIHkgPSAmKCF0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiAqeTsKKyAgICAgICAgfQor
ICAgIGApOyAKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHggPSAzOworICAgICAgICAgICAgdGhyZWFkIGludCogeSA9
ICZ4OworICAgICAgICAgICAgcmV0dXJuICp5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzKTsK
K307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVz
dHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVm
LXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjNGNhNDkyMzY3OTgzN2JmMWI2
Y2UzNGI4ZTI0MzFjNThkNWM1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw1IEBACisKK1BBU1MgbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmIAorUEFTUyBtYWtlQXJyYXlS
ZWZGcm9tTG9jYWwgCitQQVNTIG1ha2VBcnJheVJlZkZyb21Qb2ludGVyIAorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWYtc3BlYy10ZXN0cy5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmLXNwZWMtdGVzdHMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZGRiZjQ1YTBkOGM1ZDJlYmVjODk5MmZhMTA3MzdkZTM1Y2Y4MWI0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVm
LXNwZWMtdGVzdHMuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48L3RpdGxlPgorPHNjcmlw
dCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVz
dHMgPSB7fTsKKword2hsc2xUZXN0cy5tYWtlQXJyYXlSZWZGcm9tQXJyYXlSZWYgPSBhc3luYyAo
KSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQg
YmFyKHRocmVhZCBpbnRbXSByZWYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlZlswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXoodGhyZWFkIGlu
dFtdIHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFyKEBwdHIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHggPSA0ODsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmF6KEB4
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMubWFrZUFycmF5
UmVmRnJvbUxvY2FsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgaW50IGJhcih0aHJlYWQgaW50W10gcmVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gcmVmWzBdOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgeCA9IDQ4OworICAgICAgICAgICAgcmV0dXJuIGJhcihAeCk7CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDQ4KTsKK30KKword2hsc2xUZXN0cy5tYWtlQXJyYXlSZWZGcm9tUG9p
bnRlciA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBi
YXIodGhyZWFkIGludFtdIHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlZlsw
XTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6KHRocmVhZCBpbnQqIHB0cikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGJhcihAcHRyKTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
Zm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSA0ODsKKyAgICAgICAgICAgIHJl
dHVybiBiYXooJngpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0OCk7Cit9CisKK3J1blRlc3Rz
KHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvbWFrZS1hcnJheS1yZWZlcmVuY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNl
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGIzYjNlYzcx
OTRmNWNlMGRlYWExYTBlN2IwOTE5ZTQ1OGRhYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL21ha2UtYXJyYXktcmVmZXJlbmNlLmh0bWwKQEAgLTAsMCArMSwx
ODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29u
c3Qgc2hhZGVyU291cmNlID0gYAorYm9vbCB0ZXN0MSgpIHsKKyAgICBpbnQgdmFsdWUgPSA0MjsK
KyAgICB0aHJlYWQgaW50W10gYXJyYXkgPSBAdmFsdWU7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAh
PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzBdICE9IDQyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzEyMDIxM10gIT0gMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXJyYXlbMF0gPSAxMzM3OworICAgIGlmICh2YWx1ZSAhPSAx
MzM3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCB0ZXN0MigpIHsKKyAgICBpbnQgdmFsdWUgPSA0MjsKKyAgICB0aHJlYWQgaW50KiBwdHIgPSAm
dmFsdWU7CisgICAgaWYgKCpwdHIgIT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHRocmVhZCBpbnRbXSBhcnJheSA9IEBwdHI7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzBdICE9IDQyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzEyMzc0MjE3XSAhPSAwKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgKnB0ciA9IDY2NjsKKyAgICBpZiAoKnB0ciAhPSA2NjYpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodmFsdWUgIT0gNjY2KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGFycmF5WzBdICE9IDY2NikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXJyYXlbMF0gPSA0MjQyOworICAgIGlmICgqcHRyICE9IDQyNDIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAodmFsdWUgIT0gNDI0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChhcnJheVswXSAhPSA0MjQyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGFycmF5Lmxlbmd0aCAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCB0ZXN0MygpIHsKKyAgICBpbnRbNDJdIHg7CisgICAgdGhyZWFkIGlu
dFs0Ml0qIGFycmF5UHRyID0gJng7CisgICAgaWYgKGFycmF5UHRyLT5sZW5ndGggIT0gNDIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHhbNDFdID0gNjY2OworICAgIGlmICgoKmFycmF5
UHRyKVs0MV0gIT0gNjY2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCgqYXJyYXlQ
dHIpWzBdICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHRocmVhZCBpbnRbXSBh
cnJheSA9IEB4OworICAgIGlmIChhcnJheS5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGFycmF5WzBdID0gMTMzNzsKKyAgICBpZiAoeFswXSAhPSAxMzM3KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCgqYXJyYXlQdHIpWzBdICE9IDEzMzcpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHRlc3Q0KCkg
eworICAgIHRocmVhZCBpbnQqIHB0ciA9IG51bGw7CisKKyAgICB0aHJlYWQgaW50W10gYXJyYXkg
PSBAcHRyOworICAgIGlmIChhcnJheS5sZW5ndGggIT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGFycmF5WzBdICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChhcnJheVsxMDAwMDBdICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21w
dXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJl
YWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBpZiAoIXRlc3QxKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghdGVzdDIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCF0ZXN0MygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRlc3Q0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
Y29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0
ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIi
fV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9T
UkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3Jp
cHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5
KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAg
IGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9Owor
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAs
IHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIu
c2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3Bh
dGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0Fy
cmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBsZXQg
cmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOwor
ICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgi
Iik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVy
LnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0Rldmlj
ZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0
aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7
Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL21hdHJpY2VzLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM1ODU1OTYyMzVjMmE0MThjMTRlMjc2MGNhZjlmNzAyMTFjZjkzZDgKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cmljZXMtc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgYnVpbHRpbk1hdHJpY2VzIAorUEFTUyBt
YXRyaXhNdWx0aXBsaWNhdGlvbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL21hdHJpY2VzLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9t
YXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZmMmJkOTk2OWJhYzgwMTMwYzBl
ZGFhMzZiZjljODg5NDMwOTBhYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9tYXRyaWNlcy1zcGVjLXRlc3RzLmh0bWwKQEAgLTAsMCArMSwyMDQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNz
LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmJ1aWx0aW5NYXRyaWNlcyA9
IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgZmxvYXQgZm9vKCkK
KyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyeDIgYTsKKyAgICAgICAgICAgIGFbMF1bMF0g
PSAxOworICAgICAgICAgICAgYVswXVsxXSA9IDI7CisgICAgICAgICAgICBhWzFdWzBdID0gMzsK
KyAgICAgICAgICAgIGFbMV1bMV0gPSA0OworICAgICAgICAgICAgcmV0dXJuIGFbMF1bMF07Cisg
ICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZs
b2F0MngzIGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsKKyAgICAgICAgICAgIGFbMF1bMV0g
PSAyOworICAgICAgICAgICAgYVswXVsyXSA9IDM7CisgICAgICAgICAgICBhWzFdWzBdID0gNDsK
KyAgICAgICAgICAgIGFbMV1bMV0gPSA1OworICAgICAgICAgICAgYVsxXVsyXSA9IDY7CisgICAg
ICAgICAgICByZXR1cm4gYVsxXVsyXTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28zKCkK
KyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQyeDIgYTsKKyAgICAgICAgICAgIHJldHVybiBh
WzBdWzBdOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9vNCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZsb2F0MngyIGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsKKyAgICAgICAgICAg
IGFbMF1bMV0gPSAyOworICAgICAgICAgICAgYVsxXVswXSA9IDM7CisgICAgICAgICAgICBhWzFd
WzFdID0gNDsKKyAgICAgICAgICAgIGZsb2F0MngyIGI7CisgICAgICAgICAgICBiWzBdWzBdID0g
NTsKKyAgICAgICAgICAgIGJbMF1bMV0gPSA2OworICAgICAgICAgICAgYlsxXVswXSA9IDc7Cisg
ICAgICAgICAgICBiWzFdWzFdID0gODsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IDI7ICsraSkgeworICAgICAgICAgICAgICAgIGZvciAodWludCBqID0gMDsgaiA8IDI7ICsraikg
eworICAgICAgICAgICAgICAgICAgICBhW2ldW2pdICs9IDQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgfQorICAg
ICAgICBib29sIGZvbzUoKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDJ4MiBhOworICAg
ICAgICAgICAgYVswXSA9IGZsb2F0MigxLCAyKTsKKyAgICAgICAgICAgIGFbMV0gPSBmbG9hdDIo
MywgNCk7CisgICAgICAgICAgICBmbG9hdDJ4MiBiOworICAgICAgICAgICAgYlswXVswXSA9IDE7
CisgICAgICAgICAgICBiWzBdWzFdID0gMjsKKyAgICAgICAgICAgIGJbMV1bMF0gPSAzOworICAg
ICAgICAgICAgYlsxXVsxXSA9IDQ7CisgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAg
ICB9CisgICAgICAgIGJvb2wgZm9vNigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0Mngy
IGE7CisgICAgICAgICAgICBhWzBdWzBdID0gMTsKKyAgICAgICAgICAgIGFbMF1bMV0gPSAyOwor
ICAgICAgICAgICAgYVsxXVswXSA9IDM7CisgICAgICAgICAgICBhWzFdWzFdID0gNDsKKyAgICAg
ICAgICAgIGZsb2F0MngyIGI7CisgICAgICAgICAgICBiWzBdWzBdID0gNTsKKyAgICAgICAgICAg
IGJbMF1bMV0gPSAxMDsKKyAgICAgICAgICAgIGJbMV1bMF0gPSAxODsKKyAgICAgICAgICAgIGJb
MV1bMV0gPSAyNDsKKyAgICAgICAgICAgIGFbMF0gKj0gNTsKKyAgICAgICAgICAgIGFbMV0gKj0g
NjsKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQg
Zm9vNygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0MngzIGEgPSBmbG9hdDJ4MyhmbG9h
dDMoMywgNCwgNSksIGZsb2F0Myg2LCA3LCA4KSk7CisgICAgICAgICAgICByZXR1cm4gYVswXVsy
XTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10pLCA2KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW10pLCAwKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb280
IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24o
cHJvZ3JhbSwgICJmb281IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb282IiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW10pLCA1KTsK
K307CisKK3dobHNsVGVzdHMubWF0cml4TXVsdGlwbGljYXRpb24gPSBhc3luYyAoKSA9PiB7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGZsb2F0Mng0IG11bHRpcGx5KGZsb2F0MngzIHgs
IGZsb2F0M3g0IHkpIHsKKyAgICAgICAgICAgIC8vIENvcGllZCBhbmQgcGFzdGVkIGZyb20gdGhl
IHN0YW5kYXJkIGxpYnJhcnkKKyAgICAgICAgICAgIGZsb2F0Mng0IHJlc3VsdDsKKyAgICAgICAg
ICAgIHJlc3VsdFswXVswXSA9IDA7CisgICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsw
XSAqIHlbMF1bMF07CisgICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsxXSAqIHlbMV1b
MF07CisgICAgICAgICAgICByZXN1bHRbMF1bMF0gKz0geFswXVsyXSAqIHlbMl1bMF07CisgICAg
ICAgICAgICByZXN1bHRbMF1bMV0gPSAwOworICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhb
MF1bMF0gKiB5WzBdWzFdOworICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMV0gKiB5
WzFdWzFdOworICAgICAgICAgICAgcmVzdWx0WzBdWzFdICs9IHhbMF1bMl0gKiB5WzJdWzFdOwor
ICAgICAgICAgICAgcmVzdWx0WzBdWzJdID0gMDsKKyAgICAgICAgICAgIHJlc3VsdFswXVsyXSAr
PSB4WzBdWzBdICogeVswXVsyXTsKKyAgICAgICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzFd
ICogeVsxXVsyXTsKKyAgICAgICAgICAgIHJlc3VsdFswXVsyXSArPSB4WzBdWzJdICogeVsyXVsy
XTsKKyAgICAgICAgICAgIHJlc3VsdFswXVszXSA9IDA7CisgICAgICAgICAgICByZXN1bHRbMF1b
M10gKz0geFswXVswXSAqIHlbMF1bM107CisgICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFsw
XVsxXSAqIHlbMV1bM107CisgICAgICAgICAgICByZXN1bHRbMF1bM10gKz0geFswXVsyXSAqIHlb
Ml1bM107CisgICAgICAgICAgICByZXN1bHRbMV1bMF0gPSAwOworICAgICAgICAgICAgcmVzdWx0
WzFdWzBdICs9IHhbMV1bMF0gKiB5WzBdWzBdOworICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9
IHhbMV1bMV0gKiB5WzFdWzBdOworICAgICAgICAgICAgcmVzdWx0WzFdWzBdICs9IHhbMV1bMl0g
KiB5WzJdWzBdOworICAgICAgICAgICAgcmVzdWx0WzFdWzFdID0gMDsKKyAgICAgICAgICAgIHJl
c3VsdFsxXVsxXSArPSB4WzFdWzBdICogeVswXVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFsxXVsx
XSArPSB4WzFdWzFdICogeVsxXVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFsxXVsxXSArPSB4WzFd
WzJdICogeVsyXVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFsxXVsyXSA9IDA7CisgICAgICAgICAg
ICByZXN1bHRbMV1bMl0gKz0geFsxXVswXSAqIHlbMF1bMl07CisgICAgICAgICAgICByZXN1bHRb
MV1bMl0gKz0geFsxXVsxXSAqIHlbMV1bMl07CisgICAgICAgICAgICByZXN1bHRbMV1bMl0gKz0g
eFsxXVsyXSAqIHlbMl1bMl07CisgICAgICAgICAgICByZXN1bHRbMV1bM10gPSAwOworICAgICAg
ICAgICAgcmVzdWx0WzFdWzNdICs9IHhbMV1bMF0gKiB5WzBdWzNdOworICAgICAgICAgICAgcmVz
dWx0WzFdWzNdICs9IHhbMV1bMV0gKiB5WzFdWzNdOworICAgICAgICAgICAgcmVzdWx0WzFdWzNd
ICs9IHhbMV1bMl0gKiB5WzJdWzNdOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgICAgICBmbG9hdDJ4MyBtYXRyaXgxKCkgeworICAgICAgICAgICAgZmxvYXQyeDMg
eDsKKyAgICAgICAgICAgIHhbMF1bMF0gPSAyOworICAgICAgICAgICAgeFswXVsxXSA9IDM7Cisg
ICAgICAgICAgICB4WzBdWzJdID0gNTsKKyAgICAgICAgICAgIHhbMV1bMF0gPSA3OworICAgICAg
ICAgICAgeFsxXVsxXSA9IDExOworICAgICAgICAgICAgeFsxXVsyXSA9IDEzOworICAgICAgICAg
ICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQzeDQgbWF0cml4MigpIHsKKyAg
ICAgICAgICAgIGZsb2F0M3g0IHk7CisgICAgICAgICAgICB5WzBdWzBdID0gMTc7CisgICAgICAg
ICAgICB5WzBdWzFdID0gMTk7CisgICAgICAgICAgICB5WzBdWzJdID0gMjM7CisgICAgICAgICAg
ICB5WzBdWzNdID0gMjk7CisgICAgICAgICAgICB5WzFdWzBdID0gMzE7CisgICAgICAgICAgICB5
WzFdWzFdID0gMzc7CisgICAgICAgICAgICB5WzFdWzJdID0gNDE7CisgICAgICAgICAgICB5WzFd
WzNdID0gNDM7CisgICAgICAgICAgICB5WzJdWzBdID0gNDc7CisgICAgICAgICAgICB5WzJdWzFd
ID0gNTM7CisgICAgICAgICAgICB5WzJdWzJdID0gNTk7CisgICAgICAgICAgICB5WzJdWzNdID0g
NjE7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28w
MCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlb
MF1bMF07CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMDEoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzBdWzFdOworICAgICAgICB9Cisg
ICAgICAgIGZsb2F0IGZvbzAyKCkgeworICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJp
eDEoKSwgbWF0cml4MigpKVswXVsyXTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28wMygp
IHsKKyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMF1b
M107CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMTAoKSB7CisgICAgICAgICAgICByZXR1
cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzBdOworICAgICAgICB9CisgICAg
ICAgIGZsb2F0IGZvbzExKCkgeworICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEo
KSwgbWF0cml4MigpKVsxXVsxXTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmb28xMigpIHsK
KyAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bMl07
CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZm9vMTMoKSB7CisgICAgICAgICAgICByZXR1cm4g
bXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzNdOworICAgICAgICB9CisgICAgYDsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28w
MCIsIFtdKSwgMTcgKiAyICsgMzEgKiAzICsgNDcgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMSIsIFtdKSwgMTkgKiAyICsgMzcg
KiAzICsgNTMgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9u
KHByb2dyYW0sICJmb28wMiIsIFtdKSwgMjMgKiAyICsgNDEgKiAzICsgNTkgKiA1KTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28wMyIsIFtd
KSwgMjkgKiAyICsgNDMgKiAzICsgNjEgKiA1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28xMCIsIFtdKSwgMTcgKiA3ICsgMzEgKiAxMSAr
IDQ3ICogMTMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEZsb2F0RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzExIiwgW10pLCAxOSAqIDcgKyAzNyAqIDExICsgNTMgKiAxMyk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsRmxvYXRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMTIiLCBbXSks
IDIzICogNyArIDQxICogMTEgKyA1OSAqIDEzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxGbG9hdEZ1bmN0aW9uKHByb2dyYW0sICJmb28xMyIsIFtdKSwgMjkgKiA3ICsgNDMgKiAxMSAr
IDYxICogMTMpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtMi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LTItZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LTItZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvbWF0cml4LTIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtMi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY0NTZmOTUzM2RkNWM3ZmU5Mjc2M2Q4YzFkZTE4MmViMzRlZDU3YzQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LTIuaHRtbApA
QCAtMCwwICsxLDE1NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitib29sIGFsbEVxdWFsKGZsb2F0NHg0IG1h
dCwgZmxvYXQgdmFsdWUpCit7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAx
KSB7CisgICAgICAgIGZvciAodWludCBqID0gMDsgaiA8IDQ7IGogPSBqICsgMSkgeworICAgICAg
ICAgICAgaWYgKG1hdFtpXVtqXSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsbCh0
aHJlYWQgZmxvYXQ0eDQqIG1hdCwgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQ0eDQgcmVzdWx0
OworICAgIGZvciAodWludCBpID0gMDsgaSA8IDQ7IGkgPSBpICsgMSkgeworICAgICAgICAgICAg
cmVzdWx0W2ldID0gZmxvYXQ0KHZhbHVlLCB2YWx1ZSwgdmFsdWUsIHZhbHVlKTsKKyAgICB9Cisg
ICAgKm1hdCA9IHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBmaWxsKHRocmVh
ZCBmbG9hdDQqIHZlYywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQ0IHJlc3VsdDsKKyAgICBm
b3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEpIHsKKyAgICAgICAgcmVzdWx0W2ldID0g
dmFsdWU7CisgICAgfQorICAgICp2ZWMgPSByZXN1bHQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgYWxsRXF1YWwoZmxvYXQ0IHZlYywgZmxvYXQgdmFsdWUpCit7CisgICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGlmICh2ZWNbaV0gIT0gdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlz
cGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0NHg0IG1hdDsKKyAgICBmaWxsKCZtYXQsIDEpOwor
ICAgIGlmICghYWxsRXF1YWwobWF0LCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQ0
IHZlYzsKKyAgICBmaWxsKCZ2ZWMsIDEpOworICAgIGlmICghYWxsRXF1YWwodmVjLCAxKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZmxvYXQ0IHZlYzIgPSBtdWwobWF0LCB2ZWMpOworICAgIGlm
ICghYWxsRXF1YWwodmVjMiwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0NHg0IG1h
dDIgPSBtdWwobWF0LCBtYXQpOworICAgIGlmICghYWxsRXF1YWwobWF0MiwgNCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1hdDIgPSBtdWwobWF0MiwgbWF0Mik7CisgICAgaWYgKCFhbGxFcXVh
bChtYXQyLCA2NCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJ1ZmZlclt1aW50KHRocmVhZElE
LngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsKK30KK2A7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3Jh
Z2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5l
KGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9y
ID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
YnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBi
dWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2Owor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5Wzdd
ID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVy
VXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVy
LCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291
cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xh
eW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFu
ZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIo
YnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRlUGFz
c0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0
ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBh
c3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5kaXNwYXRjaCg0LCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygp
OworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAg
ICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0
IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7
CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0
c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PSAyCisgICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAorICAgICAgICAmJiByZXN1bHRzRmxv
YXQzMkFycmF5WzJdID09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSA9PSA4
CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gPT0gNQorICAgICAgICAmJiByZXN1
bHRzRmxvYXQzMkFycmF5WzVdID09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2
XSA9PSA3CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gPT0gOCkKKyAgICAgICAg
dGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICBy
ZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Citn
ZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNl
KS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmlu
aXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvbWF0cml4LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4
YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQ
QVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtbWVtb3J5LWxheW91
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1s
YXlvdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFT
UyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1sYXlvdXQu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXgtbWVtb3J5LWxheW91dC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmViMDgxNDg1YzdiZDViMDJjNWI3MzRlNDBiMjIxNzJjY2QyOTYxN2YKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbWF0cml4LW1lbW9yeS1s
YXlvdXQuaHRtbApAQCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygx
LCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdDR4NFtdIGJ1
ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJ
RCkgeworICAgIGZsb2F0NHg0IHJlc3VsdDsKKyAgICByZXN1bHRbMF0gPSBmbG9hdDQoMSwgMiwg
MywgNCk7CisgICAgcmVzdWx0WzFdID0gZmxvYXQ0KDUsIDYsIDcsIDgpOworICAgIHJlc3VsdFsy
XSA9IGZsb2F0NCg5LCAxMCwgMTEsIDEyKTsKKyAgICByZXN1bHRbM10gPSBmbG9hdDQoMTMsIDE0
LCAxNSwgMTYpOworCisgICAgZmxvYXQ0eDQgbWF0ID0gYnVmZmVyWzBdOworCisgICAgaWYgKG1h
dFswXVswXSA9PSAwCisgICAgICAgICYmIG1hdFswXVsxXSA9PSAxCisgICAgICAgICYmIG1hdFsw
XVsyXSA9PSAyCisgICAgICAgICYmIG1hdFswXVszXSA9PSAzCisKKyAgICAgICAgJiYgbWF0WzFd
WzBdID09IDQKKyAgICAgICAgJiYgbWF0WzFdWzFdID09IDUKKyAgICAgICAgJiYgbWF0WzFdWzJd
ID09IDYKKyAgICAgICAgJiYgbWF0WzFdWzNdID09IDcKKworICAgICAgICAmJiBtYXRbMl1bMF0g
PT0gOAorICAgICAgICAmJiBtYXRbMl1bMV0gPT0gOQorICAgICAgICAmJiBtYXRbMl1bMl0gPT0g
MTAKKyAgICAgICAgJiYgbWF0WzJdWzNdID09IDExCisKKyAgICAgICAgJiYgbWF0WzNdWzBdID09
IDEyCisgICAgICAgICYmIG1hdFszXVsxXSA9PSAxMworICAgICAgICAmJiBtYXRbM11bMl0gPT0g
MTQKKyAgICAgICAgJiYgbWF0WzNdWzNdID09IDE1KSB7CisgICAgICAgIGJ1ZmZlclswXSA9IHJl
c3VsdDsKKyAgICB9Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVT
dGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
ID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAx
NjsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJh
eUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMV0gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDg7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gMTI7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gMTsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2
XSA9IDk7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTM7CisgICAgYnVmZmVyRmxvYXQz
MkFycmF5WzhdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbOV0gPSA2OworICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVsxMF0gPSAxMDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTQ7
CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5
WzEzXSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDExOworICAgIGJ1ZmZlckZs
b2F0MzJBcnJheVsxNV0gPSAxNTsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9S
QUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JF
QUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3Vs
dHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVy
OiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2Jp
bmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBE
ZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91
cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3Vw
KGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5
QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBj
b25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNz
KCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAg
IGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIu
bWFwUmVhZEFzeW5jKCk7CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJh
eVswXSA9PT0gMQorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09PSA1CisgICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gPT09IDkKKyAgICAgICAgJiYgcmVzdWx0c0Zs
b2F0MzJBcnJheVszXSA9PT0gMTMKKworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRd
ID09PSAyCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gPT09IDYKKyAgICAgICAg
JiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSA9PT0gMTAKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0
MzJBcnJheVs3XSA9PT0gMTQKKworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzhdID09
PSAzCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbOV0gPT09IDcKKyAgICAgICAgJiYg
cmVzdWx0c0Zsb2F0MzJBcnJheVsxMF0gPT09IDExCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMy
QXJyYXlbMTFdID09PSAxNQorCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTJdID09
PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTNdID09PSA4CisgICAgICAgICYm
IHJlc3VsdHNGbG9hdDMyQXJyYXlbMTRdID09PSAxMgorICAgICAgICAmJiByZXN1bHRzRmxvYXQz
MkFycmF5WzE1XSA9PT0gMTYpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAg
ICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQo
IiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgewor
ICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRy
aXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9tYXRyaXguaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kYzNiNjVjMjg2YjNkNTExOTA3YzhmOTc3YzZiNzcyOGRlMjE1MWQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL21hdHJpeC5odG1sCkBAIC0wLDAgKzEsMTY2
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0
IHNoYWRlclNvdXJjZSA9IGAKK2Jvb2wgYWxsRXF1YWwoZmxvYXQyeDMgbWF0LCBmbG9hdCB2YWx1
ZSkKK3sKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyOyBpID0gaSArIDEpIHsKKyAgICAgICAg
Zm9yICh1aW50IGogPSAwOyBqIDwgMzsgaiA9IGogKyAxKSB7CisgICAgICAgICAgICBpZiAobWF0
W2ldW2pdICE9IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworW251bXRocmVhZHMoMSwgMSwgMSldCitj
b21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rl
cih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBmbG9h
dDJ4MyBmb287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDApKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb28gPSBmb28gKyBmbG9hdDJ4MyhmbG9hdDMoMS4wLCAxLjAsIDEuMCksIGZsb2F0Mygx
LjAsIDEuMCwgMS4wKSk7CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDEpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb28gPSBmb28gKiBmbG9hdDJ4MyhmbG9hdDMoOC41LCA4LjUsIDguNSksIGZs
b2F0Myg4LjUsIDguNSwgOC41KSk7CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDguNSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyAtIGZsb2F0MngzKGZsb2F0Myg3LjUsIDcuNSwg
Ny41KSwgZmxvYXQzKDcuNSwgNy41LCA3LjUpKTsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgMSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZsb2F0MngzKGZsb2F0MygxLjAs
IDEuMCwgMS4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsKKyAgICBpZiAoIWFsbEVxdWFsKGZv
bywgMikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZvbzsKKyAgICBpZiAo
IWFsbEVxdWFsKGZvbywgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZv
bzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgOCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZs
b2F0MyBmb3VydHlUd287CisgICAgZm91cnR5VHdvLnggPSA0MjsKKyAgICBmb3VydHlUd28ueSA9
IDQyOworICAgIGZvdXJ0eVR3by56ID0gNDI7CisKKyAgICBmb29bMF0gPSBmb3VydHlUd287Cisg
ICAgZm9vWzFdID0gZm91cnR5VHdvOworICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvb1sxMzM3XSA9IGZvdXJ0eVR3bzsKKyAgICBpZiAoIWFsbEVx
dWFsKGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb29bMTAwMDAwMF0gPSBmb3Vy
dHlUd287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm91cnR5VHdvWzEzMzddID0gNTA7CisgICAgZm9vWzFdID0gZm91cnR5VHdvOworICAgIGlm
ICghYWxsRXF1YWwoZm9vLCA0MikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvdXJ0eVR3b1sx
MDAwMDAwXSA9IDUwOworICAgIGZvb1sxXSA9IGZvdXJ0eVR3bzsKKyAgICBpZiAoIWFsbEVxdWFs
KGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdDMgc2hvdWxkQmVaZXJvID0g
Zm9vWzEwMDAwMF07CisgICAgaWYgKHNob3VsZEJlWmVyby54ICE9IDAgfHwgc2hvdWxkQmVaZXJv
LnkgIT0gMCB8fCBzaG91bGRCZVplcm8ueiAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoZm91cnR5VHdvWzEwMDAwMDAwXSAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBidWZm
ZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Cit9
CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6
IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0
ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4OworCisgICAgY29uc3Qg
YnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7
CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlb
M10gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7CisgICAgYnVmZmVyRmxvYXQz
MkFycmF5WzVdID0gNjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OworICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVs3XSA9IDg7CisgICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RP
UkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9S
RUFEfTsKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1
bHRzQnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZl
cjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHti
aW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3Vw
RGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3Jv
dXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVuY29kZXIuY29w
eUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7CisgICAg
Y29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFz
cygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUp
OworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAg
ICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goNCwgMSwgMSk7CisgICAgY29tcHV0ZVBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVy
Lm1hcFJlYWRBc3luYygpOworICAgIGNvbnN0IHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAgaWYgKHJlc3VsdHNGbG9hdDMyQXJy
YXlbMF0gPT0gMgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09IDQKKyAgICAg
ICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSA9PSA2CisgICAgICAgICYmIHJlc3VsdHNGbG9h
dDMyQXJyYXlbM10gPT0gOAorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09IDUK
KyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSA9PSA2CisgICAgICAgICYmIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNl0gPT0gNworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5Wzdd
ID09IDgpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZh
aWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNz
ZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJl
c3Npb24tcnZhbHVlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbmVz
dGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNh
MjY1NTMyMWYzMzNhNTNmOWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbmVzdGVkLWRvdC1leHByZXNzaW9uLXJ2YWx1ZS1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUo
Y2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL25lc3RlZC1kb3QtZXhwcmVzc2lvbi1ydmFsdWUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJlc3Npb24tcnZhbHVlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmQ1ZjE4YzM0ZDIxZmFhNTFjZmFhMjc3Y2ExZjBjMTY4Yzc4YjRhNQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtZG90LWV4cHJl
c3Npb24tcnZhbHVlLmh0bWwKQEAgLTAsMCArMSwxNDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorCitz
dHJ1Y3QgQmFyIHsKKyAgICBmbG9hdCBzaGFkZTsKK30KK3N0cnVjdCBGb28geworICAgIEJhciBi
YXI7Cit9CisKK3N0cnVjdCBXcmFwcGVyIHsKKyAgICBGb28gZm9vOworfQorCitzdHJ1Y3QgVmVy
dGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgx
KSkgeworICAgIFdyYXBwZXIgd3JhcHBlcjsKKyAgICB3cmFwcGVyLmZvby5iYXIuc2hhZGUgPSBz
aGFkZTsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0
aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHdyYXBwZXIuZm9vLmJhci5zaGFkZTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hh
ZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNl
KSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3Rh
Z2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsK
KyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0
cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFj
ZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9y
bWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9
XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUg
PSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjog
MSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0g
W2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIw
LCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBd
OworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVgg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKKworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0
IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJj
ZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRp
bmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdy
b3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAg
Y29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmlu
ZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNl
LmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0p
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdX
aGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9uZXN0ZWQtbG9vcC1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjg2OWE5Nzk2ZjM1
ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdCbGFja1Nx
dWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQt
bG9vcC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL25lc3RlZC1sb29wLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzRiMTE4MTgyMzRmMTc3MTc4YzAzMDJjNzE1ZTg1YjBhOWUyMzA2NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9uZXN0ZWQtbG9vcC5odG1sCkBA
IC0wLDAgKzEsMTc1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAg
IGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVy
dGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7CisgICAgZm9yICh1aW50IGkgPSAw
OyBpIDwgMTA7IGkgPSBpICsgMSkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNoYWRlID0gMS4wOworICAgICAgICB9CisKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSB3aGlsZSAoKHNoYWRlID0gMS4wLCBmYWxzZSkpOworCisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlICsgMS4wLCBmYWxzZSkpOworCisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKChzaGFkZSA9IHNoYWRlIC0gMS4wLCBm
YWxzZSkpOworCisgICAgICAgIHdoaWxlICgoc2hhZGUgPSBzaGFkZSArIDEuMCwgdHJ1ZSkpIHsK
KyAgICAgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgLSAxLjAsIHRy
dWUpKSB7CisgICAgICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9z
aXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBz
aGFkZSwgMS4wKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisg
ICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0
Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAx
LCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBb
YXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAs
IGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzog
MCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRl
dmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOworCisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
MTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5k
aW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0
YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd0Js
YWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9udWxsLWFyZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
bnVsbC1hcmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyYTBjZjM5ZThhMGZlY2M4ZjMzNGFj
MTg2M2ExZTNkZjhjYTlmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvbnVsbC1hcmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHBhc3NO
dWxsVG9QdHJNb25vbW9ycGhpYyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL251bGwtYXJnLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1hcmcuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMWIyZWVhYjEyMGZlZGI0MmMwNzFmODc5YTRlN2E0MDc2MDU1ZmEzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJnLmh0bWwK
QEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9
dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0
IHN0cnVjdHMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMucGFzc051bGxU
b1B0ck1vbm9tb3JwaGljID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgaW50IGZvbyh0aHJlYWQgaW50KiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcHRyOworICAgICAgICB9CisgICAgICAgIGludCBiYXIoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZm9vKG51bGwpOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAwKTsKK30K
KworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJyYXktcmVmLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1hcnJheS1yZWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDljOTQ2
OTRjOGFmMTBkOWUwZmY5YjZjNGU4ZWFiNWE5ZmYzNTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtYXJyYXktcmVmLmh0bWwKQEAgLTAsMCArMSw2NCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBu
YW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IGxvb3BzLjwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qg
d2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLmRlcmVmZXJlbmNlRGVmYXVsdE51bGxBcnJh
eVJlZiA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJlYWQgaW50W10gcDsKKyAgICAgICAgICAg
IHJldHVybiBwWzBdOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKK30KKword2hsc2xUZXN0
cy5kZWZhdWx0SW5pdGlhbGl6ZWROdWxsQXJyYXlSZWZJbnRMaXRlcmFsID0gYXN5bmMgKCkgPT4K
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBwWzBd
OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAwKTsKK30KKword2hsc2xUZXN0cy5wYXNzTnVsbFRv
UHRyTW9ub21vcnBoaWNBcnJheVJlZiA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIGludCBmb28odGhyZWFkIGludFtdIHB0cikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHB0clswdV07CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CisgICAgICAgIH0KKyAgICBgOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBb
XSksIDApOworfQorCit3aGxzbFRlc3RzLmxvYWROdWxsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBh
d2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgc2luayh0aHJlYWQg
aW50KiB4KSB7IH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBzaW5rKCpudWxsKTsgfQorICAg
ICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtZGVyZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL251bGwtZGVyZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZh
ZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVs
bC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9udWxsLWRlcmVmZXJlbmNlLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1kZXJlZmVyZW5jZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzMGE3
ZWM1ODM4NmQzYjM1YmI2MjdhMjBmZTEzZDhhZDYzODJkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvbnVsbC1kZXJlZmVyZW5jZS5odG1sCkBAIC0wLDAgKzEs
MTI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Nv
bnN0IHNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gdGhyZWFkIGludCo7CitGb28gZ2V0
TnVsbFB0cigpCit7CisgICAgcmV0dXJuIG51bGw7Cit9CisKK3N0cnVjdCBYWVogeworICAgIGZs
b2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6OworfQorCitbbnVtdGhyZWFkcygyLCAx
LCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6
IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgewor
ICAgIEZvbyBwdHIgPSBudWxsOworICAgICpwdHIgPSA0MjsKKyAgICAqZ2V0TnVsbFB0cigpID0g
NDI7CisgICAgaWYgKCpwdHIgPT0gMCkgeworICAgICAgICBpZiAocHRyID09IGdldE51bGxQdHIo
KSkgeworICAgICAgICAgICAgaWYgKCpnZXROdWxsUHRyKCkgPT0gMCkgeworICAgICAgICAgICAg
ICAgIHRocmVhZCBYWVoqIHh5elB0ciA9IG51bGw7CisgICAgICAgICAgICAgICAgWFlaIHh5ejsK
KyAgICAgICAgICAgICAgICB4eXoueCA9IDE7CisgICAgICAgICAgICAgICAgeHl6LnkgPSAxOwor
ICAgICAgICAgICAgICAgIHh5ei56ID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoeHl6LnogPT0g
MS4wICYmIHh5ei55ID09IDEuMCAmJiB4eXoueiA9PSAxLjApIHsKKyAgICAgICAgICAgICAgICAg
ICAgKnh5elB0ciA9IHh5ejsKKyAgICAgICAgICAgICAgICAgICAgeHl6ID0gKnh5elB0cjsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHh5ei56ID09IDAuMCAmJiB4eXoueSA9PSAwLjAgJiYgeHl6
LnogPT0gMC4wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJipnZXROdWxsUHRyKCkg
PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmKigmKmdldE51bGxQ
dHIoKSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJb
dWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5n
OiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRl
U3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICog
ODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJh
eUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1Owor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZd
ID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVC
dWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIs
IDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdh
aXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBjb25zdCByZXN1bHRzRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChy
ZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDIKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVsxXSA9PSA0CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gPT0gNgorICAgICAg
ICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzNdID09IDgKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0
MzJBcnJheVs0XSA9PSA1CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gPT0gNgor
ICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzZdID09IDcKKyAgICAgICAgJiYgcmVzdWx0
c0Zsb2F0MzJBcnJheVs3XSA9PSA4KQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNl
CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30K
K3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5j
dGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFp
bGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
b29iLWFjY2Vzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb29iLWFj
Y2Vzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3
ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL29vYi1hY2Nlc3MuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9vb2ItYWNjZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZiMjYyOTQ2YWM4M2RlMDUw
OTlkMGU0MmRmYThjZTUwODMwMzViNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9vb2ItYWNjZXNzLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitbbnVtdGhyZWFkcygyLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlz
cGF0Y2hUaHJlYWRJRCkgeworICAgIGJ1ZmZlclsxMzM3XSA9IDAuMDsKKyAgICBidWZmZXJbNDI0
MjQyNDJdID0gMC4wOworICAgIGlmIChidWZmZXJbMTAwMDAwXSA9PSAwLjApCisgICAgICAgIGJ1
ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsK
K30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0
eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6
IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBjb25z
dCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJ
VEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZl
ckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0g
MjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5T
VE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0g
e2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRH
cm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5j
b3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAg
ICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQ
YXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGlu
ZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZm
ZXIubWFwUmVhZEFzeW5jKCk7CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0MzJB
cnJheVswXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gPT0gNAorICAg
ICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzJdID09IDYKKyAgICAgICAgJiYgcmVzdWx0c0Zs
b2F0MzJBcnJheVszXSA9PSA4CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gPT0g
NQorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzVdID09IDYKKyAgICAgICAgJiYgcmVz
dWx0c0Zsb2F0MzJBcnJheVs2XSA9PSA3CisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlb
N10gPT0gOCkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0
RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7
CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBh
c3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL29wZXJhdG9yLW92ZXJs
b2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9vcGVyYXRvci1vdmVy
bG9hZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQwZjNkMTdlNmJiMWI5ODAwMDExYTgzZmE0
OTAxYzIwZWNhZTM1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9vcGVyYXRvci1vdmVybG9hZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1Mg
b3BlcmF0b3JXaXRob3V0VW5pbmZlcnJhYmxlVHlwZVZhcmlhYmxlIAorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9vcGVyYXRvci1vdmVybG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3ZmNl
YzY4MzNkZjJiZWEwMzNmMGNkZjU3YWRlZjFjM2Y3ZmE2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvb3BlcmF0b3Itb3ZlcmxvYWQuaHRtbApAQCAtMCwwICsx
LDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxt
ZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPk9wZXJhdG9yKyBvdmVy
bG9hZC48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5vcGVyYXRvcldpdGhv
dXRVbmluZmVycmFibGVUeXBlVmFyaWFibGUgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dy
YW0gPSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAg
IH0KKyAgICAgICAgRm9vIG9wZXJhdG9yKyhGb28gYSwgRm9vIGIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQueCA9IGEueCArIGIueDsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBhOworICAgICAgICAgICAgYS54ID0gNjQ1OworICAg
ICAgICAgICAgRm9vIGI7CisgICAgICAgICAgICBiLnggPSAtMzU7CisgICAgICAgICAgICByZXR1
cm4gKGEgKyBiKS54OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA2NDUgLSAzNSk7Cit9CisKK3J1
blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvb3ZlcmxvYWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL292ZXJsb2FkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGI2MTA2YjA4
NjRlNTZkNjNhM2E1NzA0MWY0NmZmZGI2MTBmNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJsb2FkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAK
KworUEFTUyBpbnRPdmVybG9hZFJlc29sdXRpb24gCitQQVNTIGludE92ZXJsb2FkUmVzb2x1dGlv
blJldmVyc2VPcmRlciAKK1BBU1Mgbm90RXF1YWxzT3ZlcmxvYWQgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9vdmVybG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL292ZXJsb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U1NDcyYmIyYTRkZTE2N2U5MTdlYThl
NjlkYjFlMTM5M2Q2ZWNiMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9vdmVybG9hZC5odG1sCkBAIC0wLDAgKzEsNDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0i
bG9uZyI+Cis8dGl0bGU+T3ZlcmxvYWQuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10
ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNs
VGVzdHMuaW50T3ZlcmxvYWRSZXNvbHV0aW9uID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICAgICAgaW50
IGZvbyh1aW50KSB7IHJldHVybiAyOyB9CisgICAgICAgIGludCBmb28oZmxvYXQpIHsgcmV0dXJu
IDM7IH0KKyAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7IH0KKyAgICBgOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSks
IDEpOworfQorCit3aGxzbFRlc3RzLmludE92ZXJsb2FkUmVzb2x1dGlvblJldmVyc2VPcmRlciA9
IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oZmxv
YXQpIHsgcmV0dXJuIDM7IH0KKyAgICAgICAgaW50IGZvbyh1aW50KSB7IHJldHVybiAyOyB9Cisg
ICAgICAgIGludCBmb28oaW50KSB7IHJldHVybiAxOyB9CisgICAgICAgIGludCBiYXIoKSB7IHJl
dHVybiBmb28oNDIpOyB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10pLCAxKTsKK30KKword2hsc2xUZXN0cy5ub3RFcXVh
bHNPdmVybG9hZCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KEZvbywgRm9vKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGApOworfQorCitydW5UZXN0
cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zODY0MDA5NWY3MzFlZjczYWFjZTllMzY4YWExMDYyYTYxZDBiYjc2Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1Mgb3ZlcnJpZGVTdWJzY3JpcHRTdHJ1Y3Qg
CitQQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kRG9TdG9yZXMgCitQQVNTIG92ZXJyaWRl
U3Vic2NyaXB0U3RydWN0QW5kVXNlUG9pbnRlcnMgCitQQVNTIG92ZXJyaWRlU3Vic2NyaXB0U3Ry
dWN0QW5kVXNlUG9pbnRlcnNJbmNvcnJlY3RseSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL292ZXJyaWRlLXN1YnNjcmlwdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxZjdhYWM3NWRiNDg0
MjhlZTJiYjIwMjY3ZjU4YzI0YzlkYjU2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvb3ZlcnJpZGUtc3Vic2NyaXB0Lmh0bWwKQEAgLTAsMCArMSwxMjggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBvdmVycmlkZSBzdWJzY3Jp
cHRzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLm92ZXJyaWRlU3Vic2Ny
aXB0U3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
c3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIGludCB5OworICAg
ICAgICB9CisgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywg
dWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCisgICAg
ICAgICAgICAgICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBG
b28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA0OTg7CisgICAgICAgICAgICBmb28ueSA9IDE5
OworICAgICAgICAgICAgcmV0dXJuIGZvb1swXSArIGZvb1sxXSAqIDM7CisgICAgICAgIH0KKyAg
ICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSksIDQ5OCArIDE5ICogMyk7Cit9CisKK3dobHNsVGVzdHMub3ZlcnJpZGVTdWJzY3Jp
cHRTdHJ1Y3RBbmREb1N0b3JlcyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBg
CisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBp
bnQgeTsKKyAgICAgICAgfQorICAgICAgICB0aHJlYWQgaW50KiBvcGVyYXRvciZbXSh0aHJlYWQg
Rm9vKiBmb28sIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9
PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvb1swXSA9IDQ5ODsKKyAgICAgICAgICAg
IGZvb1sxXSA9IDE5OworICAgICAgICAgICAgcmV0dXJuIGZvby54ICsgZm9vLnk7CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDQ5OCArIDE5KTsKK30KKword2hsc2xUZXN0cy5vdmVycmlkZVN1YnNj
cmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAg
ICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yJltdKHRo
cmVhZCBGb28qIGZvbywgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICBp
ZiAoaW5kZXggPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGludCBiYXIodGhyZWFkIEZvbyog
Zm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKCpmb28pWzBdICsgKCpmb28pWzFd
OworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBG
b28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA0OTg7CisgICAgICAgICAgICBmb28ueSA9IDE5
OworICAgICAgICAgICAgcmV0dXJuIGJhcigmZm9vKTsKKyAgICAgICAgfQorICAgIGA7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwg
NDk4ICsgMTkpOworfQorCit3aGxzbFRlc3RzLm92ZXJyaWRlU3Vic2NyaXB0U3RydWN0QW5kVXNl
UG9pbnRlcnNJbmNvcnJlY3RseSA9IGFzeW5jICgpID0+Cit7CisgICAgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgICAgICBpbnQgeDsK
KyAgICAgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocmVh
ZCBpbnQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGZvbywgdWludCBpbmRleCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICZmb28tPng7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT55OworICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGJhcih0aHJlYWQgRm9vKiBmb28p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvb1swXSArIGZvb1sxXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBmb28oKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICAgICAgZm9vLnggPSA0OTg7CisgICAg
ICAgICAgICAgICAgZm9vLnkgPSAxOTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFyKCZmb28p
OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7
Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3BsdXMtZXF1YWxzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9w
bHVzLWVxdWFscy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZmMDljYzY1ZjYyMTcxOTk1ZDZk
ZTU4ZjYwODUzMjI5MjY1MzFjYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9wbHVzLWVxdWFscy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1Mg
cGx1c0VxdWFscyAKK1BBU1MgcGx1c0VxdWFsc1Jlc3VsdCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3BsdXMtZXF1YWxzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvcGx1cy1lcXVhbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmY1ZWNiNDE0NjI5NThiZDg3NTk5
Y2NiODUyMThjODk1ZTFmMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3BsdXMtZXF1YWxzLmh0bWwKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250
ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IG92ZXJyaWRlIHN1YnNjcmlwdHMuPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxz
bFRlc3RzID0ge307CisKK3dobHNsVGVzdHMucGx1c0VxdWFscyA9IGFzeW5jICgpID0+Cit7Cisg
ICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHggKz0gNDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAg
IGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOworfQorCit3aGxzbFRlc3RzLnBsdXNFcXVh
bHNSZXN1bHQgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBp
bnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geCArPSA0MjsKKyAg
ICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIpOworfQorCitydW5UZXN0
cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvcG9pbnRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9wb2ludGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcyYzVkOGFjNTQ4MjhiMGJhZDgwMTA5MDNlMzUxYTNkYTcyNWUwMzYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9pbnRlci1zcGVjLXRlc3RzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBwb2ludGVyVG9Qb2ludGVyIAorUEFT
UyBwb2ludGVyVG9NZW1iZXIgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9wb2ludGVyLXNwZWMtdGVzdHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb2lu
dGVyLXNwZWMtdGVzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmJiMjk3YzgzODk5ZGM3ZjI2Njk1NWYx
YjJkYmNkNjYyOWQ4YTU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3BvaW50ZXItc3BlYy10ZXN0cy5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0
bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29u
c3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLnBvaW50ZXJUb1BvaW50ZXIgPSBhc3lu
YyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB0aHJlYWQgaW50KiBwID0gJng7
CisgICAgICAgICAgICB0aHJlYWQgaW50KiogcHAgPSAmcDsKKyAgICAgICAgICAgIGludCp0aHJl
YWQqdGhyZWFkIHFxID0gcHA7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAg
ICAgIHggPSA0MjsKKyAgICAgICAgICAgICpwID0gNzY7CisgICAgICAgICAgICByZXN1bHQgKz0g
eDsKKyAgICAgICAgICAgICoqcHAgPSAzOTsKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAg
ICAgICAgICAgKipxcSA9IDgzOworICAgICAgICAgICAgcmVzdWx0ICs9IHg7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgYDs7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNzYgKyAzOSArIDgzKTsK
K30KKword2hsc2xUZXN0cy5wb2ludGVyVG9NZW1iZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZsb2F0MyB4OworICAgICAgICAgICAgICAgIHRocmVh
ZCBmbG9hdCogeSA9ICZ4WzFdOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZsb2F0M3gzIHg7CisgICAgICAgICAgICAgICAgdGhy
ZWFkIGZsb2F0MyogeSA9ICZ4WzFdOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKwor
cnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb3N0Zml4LXByZWZpeC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3NWJkZjEwZjYxYjRlODNlMWEyNjRjYjdjOGE2ZjZhNTk0MWM0OWQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcG9zdGZpeC1wcmVmaXgtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTYgQEAKKworUEFTUyBwcmVmaXhQbHVzUGx1cyAKK1BBU1MgcHJlZml4
UGx1c1BsdXNSZXN1bHQgCitQQVNTIHBvc3RmaXhQbHVzUGx1cyAKK1BBU1MgcG9zdGZpeFBsdXNQ
bHVzUmVzdWx0IAorUEFTUyBwcmVmaXhNaW51c01pbnVzIAorUEFTUyBwcmVmaXhNaW51c01pbnVz
UmVzdWx0IAorUEFTUyBwb3N0Zml4TWludXNNaW51cyAKK1BBU1MgcG9zdGZpeE1pbnVzTWludXNS
ZXN1bHQgCitQQVNTIHBsdXNFcXVhbHMgCitQQVNTIHBsdXNFcXVhbHNSZXN1bHQgCitQQVNTIG1p
bnVzRXF1YWxzIAorUEFTUyBtaW51c0VxdWFsc1Jlc3VsdCAKK1BBU1MgdGltZXNFcXVhbHMgCitQ
QVNTIHRpbWVzRXF1YWxzUmVzdWx0IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvcG9zdGZpeC1wcmVmaXguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9wb3N0
Zml4LXByZWZpeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4OGRjZjY0OGFlMjUwODViNzRkODY4ZWZhZjJl
MzE1MzAwNTI3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
cG9zdGZpeC1wcmVmaXguaHRtbApAQCAtMCwwICsxLDE3MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50
PSJsb25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLnByZWZpeFBsdXNQbHVzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKyt4OworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBgOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg2NCldKSwgNjUpOworfQorCit3aGxzbFRlc3RzLnByZWZpeFBsdXNQbHVzUmVzdWx0ID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICsreDsKKyAgICAgICAgfQorICAgIGA7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDY0KV0pLCA2NSk7Cit9CisKK3dobHNsVGVzdHMucG9zdGZpeFBsdXNQbHVzID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgeworICAgICAgICAgICAgeCsrOworICAgICAgICAgICAgcmV0dXJuIHg7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjUpOworfQorCit3aGxzbFRlc3RzLnBv
c3RmaXhQbHVzUGx1c1Jlc3VsdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBg
CisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4
Kys7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2NCldKSwgNjQpOworfQorCit3aGxzbFRl
c3RzLnByZWZpeE1pbnVzTWludXMgPSBhc3luYyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0g
YAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICAtLXg7Cisg
ICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2
Myk7Cit9CisKK3dobHNsVGVzdHMucHJlZml4TWludXNNaW51c1Jlc3VsdCA9IGFzeW5jICgpID0+
Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAtLXg7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg2
NCldKSwgNjMpOworfQorCit3aGxzbFRlc3RzLnBvc3RmaXhNaW51c01pbnVzID0gYXN5bmMgKCkg
PT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAg
ICAgeworICAgICAgICAgICAgeC0tOworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0K
KyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCg2NCldKSwgNjMpOworfQorCit3aGxzbFRlc3RzLnBvc3RmaXhNaW51
c01pbnVzUmVzdWx0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHgtLTsKKyAg
ICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDY0KV0pLCA2NCk7Cit9CisKK3dobHNsVGVzdHMucGx1
c0VxdWFscyA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGlu
dCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggKz0gNDI7CisgICAgICAgICAg
ICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSldKSwgMzg1ICsgNDIp
OworfQorCit3aGxzbFRlc3RzLnBsdXNFcXVhbHNSZXN1bHQgPSBhc3luYyAoKSA9PgoreworICAg
IGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4geCArPSA0MjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDM4NSld
KSwgMzg1ICsgNDIpOworfQorCit3aGxzbFRlc3RzLm1pbnVzRXF1YWxzID0gYXN5bmMgKCkgPT4g
eworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7
CisgICAgICAgICAgICB4IC09IDQyOworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0K
KyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbbWFrZUludCgzODUpXSksIDM4NSAtIDQyKTsKK30KKword2hsc2xUZXN0cy5taW51
c0VxdWFsc1Jlc3VsdCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAg
ICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHggLT0gNDI7
CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgzODUpXSksIDM4NSAtIDQyKTsKK30KKword2hs
c2xUZXN0cy50aW1lc0VxdWFscyA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgeCAqPSA0MjsK
KyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMzg1KV0p
LCAzODUgKiA0Mik7Cit9CisKK3dobHNsVGVzdHMudGltZXNFcXVhbHNSZXN1bHQgPSBhc3luYyAo
KSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4ICo9IDQyOworICAgICAgICB9CisgICAgYDsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQoMzg1KV0pLCAzODUgKiA0Mik7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVh
ZC1tb2RpZnktd3JpdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Jl
YWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0
NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUg
QEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdy
aXRlLWhpZ2gtem9tYmllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
cmVhZC1tb2RpZnktd3JpdGUtaGlnaC16b21iaWVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRlLWhpZ2gtem9tYmll
cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS1oaWdoLXpvbWJpZXMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lN2E3NTYxM2RjODVmNjIyMDFhNTJlZDQwYzMzMzE5ZTI5NGU0MDQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlYWQtbW9kaWZ5LXdyaXRl
LWhpZ2gtem9tYmllcy5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorYm9vbCBm
aWxsKHRocmVhZCBmbG9hdDR4NCogbWF0LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBmbG9hdDR4NCBy
ZXN1bHQ7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7CisgICAgICAg
ICAgICByZXN1bHRbaV0gPSBmbG9hdDQodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpOworICAg
IH0KKyAgICAqbWF0ID0gcmVzdWx0OworICAgIHJldHVybiB0cnVlOworfQorCitbbnVtdGhyZWFk
cygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1
ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJ
RCkgeworICAgIGZsb2F0NHg0IG1hdDsKKyAgICBmaWxsKCZtYXQsIDQpOworCisgICAgZmxvYXQ0
IHZlYzsKKyAgICB2ZWNbMF0gKz0gbWF0WzBdWzBdICsgbWF0WzBdWzFdICsgbWF0WzNdWzJdOwor
CisgICAgZmxvYXQgdmFsdWUgPSA0MjsKKyAgICB2YWx1ZSArPSB2ZWNbMF07CisKKyAgICBtYXRb
MF1bMF0gKz0gKG1hdFswXVswXSArPSAodmFsdWUgKz0gbWF0WzBdWzBdKSk7CisKKyAgICBidWZm
ZXJbdWludCh0aHJlYWRJRC54KV0gPSBtYXRbMF1bMF07Cit9CitgOworCithc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJj
b21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1
ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiAxOworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3Qg
cmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIs
IHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihi
dWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3Qg
cmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsK
KyAgICBjb25zdCByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRz
QXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzRmxvYXQzMkFycmF5WzBdID09IDY2KQorICAg
ICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOwor
ICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChk
ZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1tb2RpZnktd3JpdGUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZWFkLW1vZGlmeS13cml0ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY3ZjFiMTFmYjMxYTExZmJmMThkYjc5ZDlhM2E3MDUzOTU3MGQ4YTAKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVhZC1tb2RpZnktd3JpdGUuaHRtbApAQCAt
MCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1
dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCkp
IHsKKyAgICBidWZmZXJbMF0gPSAxOworICAgIGJ1ZmZlclsxXSA9IGJ1ZmZlclswXSsrOworCisg
ICAgYnVmZmVyWzJdID0gMTsKKyAgICBidWZmZXJbM10gPSArK2J1ZmZlclsyXTsKKworICAgIGJ1
ZmZlcls0XSA9IDE7CisgICAgYnVmZmVyWzRdICs9IDU7CisKKyAgICBidWZmZXJbNV0gPSAxOwor
ICAgIGJ1ZmZlcls1XSAqPSA3OworCisgICAgaW50IHRvdGFsID0gMTQ7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAxMDsgaSArPSAyKSB7CisgICAgICAgIHRvdGFsICs9IGk7CisgICAgfQorICAg
IGJ1ZmZlcls2XSA9IHRvdGFsOworCisgICAgdG90YWwgPSAxNDsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgdG90YWwgKz0gaTsKKyAgICB9CisgICAgYnVmZmVy
WzddID0gdG90YWw7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBj
b25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9S
QUdFIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5k
aW5nID0ge2J1ZmZlcjogYnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5n
ID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2Jp
bmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIg
PSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCBjb21wdXRl
UGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0
ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNv
bnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICBjb25zdCByZXN1bHRzID0gbmV3IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAg
ICBpZiAocmVzdWx0c1swXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNbMV0gPT0gMQorICAgICAg
ICAmJiByZXN1bHRzWzJdID09IDIKKyAgICAgICAgJiYgcmVzdWx0c1szXSA9PSAyCisgICAgICAg
ICYmIHJlc3VsdHNbNF0gPT0gNgorICAgICAgICAmJiByZXN1bHRzWzVdID09IDcKKyAgICAgICAg
JiYgcmVzdWx0c1s2XSA9PSAzNAorICAgICAgICAmJiByZXN1bHRzWzddID09IDU5KQorICAgICAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAg
IGJ1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9yZWN1cnNpdmUtc3RydWN0cy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRlYjUzNDhkMDMzYzAzNDg4OGUxYmIxMDM3ZmNkNGUxMDNkM2ExOTkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIG11dHVhbGx5UmVjdXJzaXZlU3RydWN0
IAorUEFTUyBtdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdFdpdGhQb2ludGVyc0Jyb2tlbiAKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmVjdXJzaXZlLXN0cnVjdHMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MmYwOGQ0YWU5OThjNWFhOGIxNmU2YjI1MDEwNDdjZmJjODM0ZjBhCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JlY3Vyc2l2ZS1zdHJ1Y3RzLmh0bWwK
QEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9
dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0
IGxvb3BzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRlc3RzLm11dHVhbGx5UmVj
dXJzaXZlU3RydWN0ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgICAgIEJhciBiYXI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgICAg
ICBGb28gZm9vOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3do
bHNsVGVzdHMubXV0dWFsbHlSZWN1cnNpdmVTdHJ1Y3RXaXRoUG9pbnRlcnNCcm9rZW4gPSBhc3lu
YyAoKSA9PgoreworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAg
ICAgICAgICAgIHRocmVhZCBCYXIqIGJhcjsKKyAgICAgICAgICAgIGludCBmb287CisgICAgICAg
IH0KKyAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAgICB0aHJlYWQgRm9vKiBmb287Cisg
ICAgICAgICAgICBpbnQgYmFyOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgQmFyIGJhcjsKKyAgICAgICAg
ICAgIGZvby5mb28gPSA1NjQ7CisgICAgICAgICAgICBiYXIuYmFyID0gNTM7CisgICAgICAgICAg
ICByZXR1cm4gZm9vLmJhci0+YmFyIC0gYmFyLmZvby0+Zm9vOworICAgICAgICB9CisgICAgYDsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10pLCAwKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JldHVybi1sb2NhbC12YXJp
YWJsZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3JldHVybi1sb2Nh
bC12YXJpYWJsZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNTNhMjY1NTMyMWYzMzNhNTNm
OWNkMjFhZmYwM2RiMzNkOGUyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvcmV0dXJuLWxvY2FsLXZhcmlhYmxlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0
dXJuLWxvY2FsLXZhcmlhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJu
LWxvY2FsLXZhcmlhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMzZTM1NjdiNjhjNmQ2Y2VkNDYzZjc3
NjdjYTZhMzhmMTg1NTBlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9yZXR1cm4tbG9jYWwtdmFyaWFibGUuaHRtbApAQCAtMCwwICsxLDE0MCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJT
b3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKworZmxvYXQgY29w
eShmbG9hdCB2KSB7CisgICAgZmxvYXQgbG9jYWwgPSB2OworICAgIHJldHVybiBsb2NhbDsKK30K
KwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1
bHQ7CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUg
PSBjb3B5KHNoYWRlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQg
MCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsK
KworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCith
c3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9k
dWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNv
bnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0
ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAg
ICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwg
Y29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUw
ID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRy
aWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9
OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAg
Y29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVy
dGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZv
cm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
MERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzldID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBz
aXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291
cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xh
eW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsK
KyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1
bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWlu
KHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hh
aW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91
dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVk
ID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMg
PSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBs
b2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAg
IGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBh
c3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9
OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5k
ZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQ
aXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdy
b3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVy
cygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0
LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3Qg
Y29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRR
dWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVu
KGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZXR1cm4tc3BlYy10ZXN0cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLXNwZWMtdGVzdHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjZGU3YmFlMzFiNzZjMDQ4NjIwNDMwZGU2NzRlZTZiYWM3
NGM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJu
LXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKKworUEFTUyByZXR1cm5J
ZiAKK1BBU1MgcmV0dXJuUmVmZXJlbmNlVG9TYW1lUGFyYW1ldGVyIAorUEFTUyByZXR1cm5SZWZl
cmVuY2VUb1BhcmFtZXRlcldpdGhEaWZmZXJlbnRGdW5jdGlvbnMgCitQQVNTIHJldHVyblJlZmVy
ZW5jZVRvUGFyYW1ldGVyIAorUEFTUyByZXR1cm5SZWZlcmVuY2VUb0xvY2FsVmFyaWFibGVXaXRo
TmVzdGluZyAKK1BBU1MgcmV0dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlIAorUEFTUyByZXR1
cm5JbnRMaXRlcmFsVWludCAKK1BBU1MgcmV0dXJuSW50TGl0ZXJhbEZsb2F0IAorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLXNwZWMtdGVzdHMuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9yZXR1cm4tc3BlYy10ZXN0cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUxMmMzMDlmYzdhNjFkYzE0M2YwMGY5OGZlMWU5MjAxNmE2ZjQyY2IKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcmV0dXJuLXNwZWMtdGVzdHMuaHRtbApAQCAt
MCwwICsxLDIzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRm
LTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRo
ZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0
LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVz
dHMucmV0dXJuSWYgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAg
ICBgCisgICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGludCB5ID0gNjsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgYCk7CisKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAg
ICAgIGludCBmb28oaW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHkg
PSA2OworICAgICAgICAgICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
eSA9IDg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBgKTsKKwor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbyhpbnQg
eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgeSA9IDY7CisgICAgICAgICAg
ICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAgICAgICAgICB5ID0gODsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGApOworCisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5
ID0gNjsKKyAgICAgICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ODsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDEwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMyldKSwgMTApOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dCg0KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNildKSwgMTApOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg3KV0pLCA4KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoOCldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg5KV0pLCAxMCk7CisK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oaW50
IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAg
ICAgICAgIGlmICh4ID09IDcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDEwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cisg
ICAgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgaWYgKHggPT0gNykgeworICAgICAgICAgICAg
ICAgIHJldHVybiA4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5ID0g
OTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAg
YDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoMyldKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDQpXSksIDkpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg1KV0pLCA5
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoNildKSwgOSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDgpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg4KV0pLCA5
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoOSldKSwgOSk7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGludCB5ID0gNjsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiA4OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAxMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIDExOworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHkgPSA2OworICAgICAgICAgICAgICAgIGlmICh4ID09IDcpCisg
ICAgICAgICAgICAgICAgICAgIGludCB5ID0gODsKKyAgICAgICAgICAgICAgICByZXR1cm4geTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9OworCit3aGxzbFRlc3RzLnJldHVyblJlZmVy
ZW5jZVRvU2FtZVBhcmFtZXRlciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwbHVzKGJh
cig1KSwgYmFyKDcpKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwbHVzKHRocmVhZCBpbnQq
IHgsIHRocmVhZCBpbnQqIHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqeCArICp5
OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKyAgICBgOworCisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMTQpOwor
fTsKKword2hsc2xUZXN0cy5yZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlcldpdGhEaWZmZXJlbnRG
dW5jdGlvbnMgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGlu
dCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcigxMCkgKyAqYmF6KDIw
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcihpbnQgeCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICZ4OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGlu
dCogYmF6KGludCB5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJnk7CisgICAgICAg
IH0KKyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgMzApOworfTsKKword2hsc2xUZXN0cy5yZXR1cm5SZWZlcmVuY2VU
b1BhcmFtZXRlciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAg
aW50IGZvbyhib29sIGNvbmRpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpi
YXIoY29uZGl0aW9uLCAxLCAyKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJh
cihib29sIGNvbmRpdGlvbiwgaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uID8gJmEgOiAmYjsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29s
KHRydWUpXSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZUJvb2woZmFsc2UpXSksIDIpOworfTsKKword2hsc2xUZXN0cy5y
ZXR1cm5SZWZlcmVuY2VUb0xvY2FsVmFyaWFibGVXaXRoTmVzdGluZyA9IGFzeW5jICgpID0+IHsK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqYmFyKCkgKyAqYmF6KCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJl
YWQgaW50KiBiYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDIwOworICAgICAg
ICAgICAgcmV0dXJuICZhOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmF6KCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IGEgPSAyMjsKKyAgICAgICAgICAgIHJldHVybiAm
YTsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLnJldHVy
blJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZSA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3Jh
bSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
YmFyKCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXIoKQorICAgICAgICB7
CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAgICAgcmV0dXJuICZhOworICAgICAg
ICB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3dobHNsVGVzdHMucmV0dXJuSW50TGl0ZXJh
bFVpbnQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSAidWludCBmb28oKSB7IHJl
dHVybiA0MjsgfSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3dobHNsVGVzdHMucmV0dXJuSW50TGl0ZXJh
bEZsb2F0ID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gImZsb2F0IGZvbygpIHsg
cmV0dXJuIDQyOyB9IjsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxGbG9hdEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOwor
PC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2V0dGVyLXNwZWMtdGVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NldHRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMWYyZDZjMzQxYWI1
MGI2NmYyYjlhZTc4NDI3YTcyNzFiMDY4OThhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NldHRlci1zcGVjLXRlc3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDggQEAKKworUEFTUyBzZXR0ZXJXaXRoTWF0Y2hlZFR5cGUgCitQQVNTIHNldHRlcldpdGhOb0dl
dHRlck92ZXJsb2FkIAorUEFTUyBzZXR0ZXJXaXRoTm9HZXR0ZXJPdmVybG9hZEZpeGVkIAorUEFT
UyByZWN1cnNpdmVTZXR0ZXJzIAorUEFTUyBsb25lU2V0dGVyIAorUEFTUyBsb25lU2V0dGVyUG9p
bnRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NldHRlci1zcGVj
LXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2V0dGVyLXNwZWMtdGVzdHMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NjAwZDZhN2M4MWNkNDRkODI0OTQ3MTEyZjYwNzU0NzllYWQ2NDlm
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NldHRlci1zcGVj
LXRlc3RzLmh0bWwKQEAgLTAsMCArMSwxMzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
Cis8dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRl
c3RzLnNldHRlcldpdGhNYXRjaGVkVHlwZSA9IGFzeW5jICgpID0+Cit7CisgICAgY29uc3QgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IG9wZXJhdG9yLmZvbyhpbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiA1OworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci5mb289KGlu
dCwgaW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICB9Cisg
ICAgICAgIGludCBmb28oKSB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIHguZm9v
ID0gNDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFy
KCkgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICByZXR1cm4geC5mb287CisgICAg
ICAgIH0KKyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNTQzKTsKKyAgICAvL2Fzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSksIDUpOworfQorCit3aGxzbFRlc3RzLnNl
dHRlcldpdGhOb0dldHRlck92ZXJsb2FkID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVj
a0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAg
ICBzdHJ1Y3QgQmFyIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbyhGb28pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDUzNDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEJhciBvcGVyYXRvci5mb289KEJhciwgaW50KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBCYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cisg
ICAgICAgIAorfQorCit3aGxzbFRlc3RzLnNldHRlcldpdGhOb0dldHRlck92ZXJsb2FkRml4ZWQg
PSBhc3luYyAoKSA9PgoreworICAgIGNvbnN0IHByb2dyYW0gPWAKKyAgICAgICAgc3RydWN0IEJh
ciB7IH0KKyAgICAgICAgaW50IG9wZXJhdG9yLmZvbyhCYXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiA1MzQ7CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9yLmZvbz0oQmFy
LCBpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXIoKTsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgZm9vKCkgeworICAgICAgICAgICAgQmFyIGJhcjsKKyAgICAgICAgICAgIHJl
dHVybiBiYXIuZm9vOworICAgICAgICB9CisgICAgICAgIGludCBiYXIoKSB7CisgICAgICAgICAg
ICBCYXIgYmFyOworICAgICAgICAgICAgYmFyLmZvbyA9IDUyOworICAgICAgICAgICAgcmV0dXJu
IGJhci5mb287CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDUzNCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdKSwgNTM0KTsKK30KKwor
d2hsc2xUZXN0cy5yZWN1cnNpdmVTZXR0ZXJzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAg
ICAgICAgIGludCB5OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXIgeworICAgICAgICAg
ICAgaW50IGE7CisgICAgICAgICAgICBpbnQgYjsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3Bl
cmF0b3IuYyhCYXIgYmFyKSB7IHJldHVybiBiYXIuYTsgfQorICAgICAgICBCYXIgb3BlcmF0b3Iu
YmFyKEZvbyBmb28pIHsgQmFyIGI7IGIuYSA9IGZvby54OyBiLmIgPSBmb28ueTsgcmV0dXJuIGI7
IH0KKyAgICAgICAgQmFyIG9wZXJhdG9yLmM9KEJhciBiYXIsIGludCBuZXd2YWwpIHsgYmFyLmEg
PSBuZXd2YWw7IHJldHVybiBiYXI7IH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLmJhcj0oRm9vIGZv
bywgQmFyIG5ld3ZhbCkgeyBmb28ueCA9IG5ld3ZhbC5hOyBmb28ueSA9IG5ld3ZhbC5iOyByZXR1
cm4gZm9vOyB9CisgICAgICAgIGludCBmKCkgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAg
ICAgICAgIGZvby54ID0gZm9vLnkgPSAzOworICAgICAgICAgICAgZm9vLmJhci5jID0gODsKKyAg
ICAgICAgICAgIHJldHVybiBmb28ueCoxMCArIGZvby55OworICAgICAgICB9CisgICAgYDsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZiIsIFtdKSwg
ODMpOworfQorCit3aGxzbFRlc3RzLmxvbmVTZXR0ZXIgPSBhc3luYyAoKSA9PgoreworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZvbz0o
aW50LCBpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQorCit3aGxzbFRlc3RzLmxvbmVT
ZXR0ZXJQb2ludGVyID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHRocmVhZCBpbnQqIG9wZXJhdG9yLmZvbz0odGhyZWFkIGludCog
cHRyLCBpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQorCitydW5UZXN0cyh3aGxzbFRl
c3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NpbXBsZS1hcnJheXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NpbXBsZS1hcnJheXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZm
NTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBA
CitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtYXJyYXlzLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFkZmY5MTgyOTYzOTI5ZjExMGVmZGJiYWUwNDk5NTdkOWU4YTNkN2UKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLWFycmF5cy5odG1sCkBAIC0w
LDAgKzEsMTIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZvaWQgZmlsbCh0aHJlYWQgaW50W10gYXJyYXks
IGludCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGFycmF5W2ldID0gdmFsdWU7CisgICAgfQorfQorCitbbnVtdGhyZWFkcygx
LCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIg
OiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsK
KyAgICBpbnRbNDJdIGFycmF5OworICAgIGlmIChhcnJheS5sZW5ndGggIT0gNDIpCisgICAgICAg
IHJldHVybjsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhcnJheVswXSA9IDUxNzsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNTE3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0aHJlYWQgaW50W10gYXJyYXlQdHIgPSBAYXJyYXk7CisgICAgaWYgKGFy
cmF5UHRyLmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50WzQyXSBhcnJh
eTI7CisgICAgYXJyYXkyID0gYXJyYXk7CisgICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoYXJyYXkyWzBdICE9IDUxNykKKyAgICAgICAgcmV0dXJu
OworCisgICAgZmlsbChhcnJheVB0ciwgMTMzNyk7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwg
YXJyYXlQdHIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5UHRyW2ldICE9IDEzMzcp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhcnJheVtpXSAhPSAxMzM3KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhcnJheTJbMF0gIT0gNTE3KQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVy
bjsKKyAgICBmb3IgKHVpbnQgaSA9IDE7IGkgPCBhcnJheTIubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgaWYgKGFycmF5MltpXSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5n
OiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRl
U3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7
CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0
IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVC
dWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIs
IDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAs
IGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdh
aXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJy
YXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRz
SW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQor
ICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7
CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Np
bXBsZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIyNzljOThl
NGM3NGMwYjhjYzA2NjZkMzNkYTg3YmQ4MTc3NTBlOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtZ2V0dGVyLXNldHRlci1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw0IEBACisKK1BBU1Mgc2ltcGxlR2V0dGVyIAorUEFTUyBzaW1wbGVTZXR0ZXIgCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtZ2V0dGVyLXNldHRl
ci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS1nZXR0ZXItc2V0dGVyLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWNjMjYyMmJiYTcwMGZhZjNmNDlkNmIxZDQ2NzJjMzA2MGM5Nzc2Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtZ2V0dGVy
LXNldHRlci5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
Cis8dGl0bGU+VGVzdCB0aGUgV0hMU0wgdGVzdCBoYXJuZXNzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLnNpbXBsZUdldHRlciA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueCA9IDc4MDQ7Cisg
ICAgICAgICAgICByZXR1cm4gZm9vLnk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDc4MDQpOwor
fTsKKword2hsc2xUZXN0cy5zaW1wbGVTZXR0ZXIgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHBy
b2dyYW0gPSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvci55PShG
b28gZm9vLCBpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvby54ID0gdmFsdWU7
CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9vLnkgPSA3ODA0
OworICAgICAgICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3ODA0
KTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zaW1wbGUtdGVzdHMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNiNzY2M2QwNjlkNGQ1N2RkOWI5MzA1YjA2Yzg4YjQzM2NkOGY2NDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDcgQEAKKworUEFTUyBzaW1wbGVVbnJlYWNoYWJsZUNvZGUgCitQ
QVNTIHNpbXBsZU5vUmV0dXJuIAorUEFTUyBzaW1wbGVSZWN1cnNpdmVTdHJ1Y3QgCitQQVNTIHNp
bXBsZVJlY3Vyc2lvbiAKK1BBU1Mgc2ltcGxlUmVjdXJzaW9uMiAKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NpbXBsZS10ZXN0cy5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NpbXBsZS10ZXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMzcxM2M1MTdlOGU2MWJi
NDhhNDA2ZDg0ZGVkZTNlNWFiMWIyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2ltcGxlLXRlc3RzLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0
IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citj
b25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuc2ltcGxlVW5yZWFjaGFibGVDb2Rl
ID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisK
K3dobHNsVGVzdHMuc2ltcGxlTm9SZXR1cm4gPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hl
Y2tGYWlsKCJpbnQgZm9vKCkgeyB9Iik7Cit9CisKK3dobHNsVGVzdHMuc2ltcGxlUmVjdXJzaXZl
U3RydWN0ID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgYCk7Cit9CisKK3dobHNsVGVzdHMuc2ltcGxlUmVjdXJzaW9uID0g
YXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAg
ICAgdm9pZCBmb28oaW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9vKHgp
OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy5zaW1wbGVSZWN1
cnNpb24yID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IGJhcihpbnQgeCkgeworICAgICAgICAgICAgICAgIGZvbyh4KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQg
Zm9vKGludCB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvbyhiYXIoeCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8
L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
aW1wbGUtd2hpbGUtbG9vcC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzY2UwMjhiNDA0MmU3
OWRhOTJhNWFkN2YyNTRlN2I5YzFjMjhkODMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MyBAQAorCitQQVNTIHNpbXBsZVdoaWxlIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zaW1wbGUtd2hpbGUtbG9vcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyY2VhY2U4NTNmYjJiMGZiMmY4
NmEwZmNlZWVkZDljOGM2ZjU4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2ltcGxlLXdoaWxlLWxvb3AuaHRtbApAQCAtMCwwICsxLDI3IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3QgdGhlIFdITFNMIHRlc3QgaGFybmVzcy48
L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5zaW1wbGVXaGlsZSA9IGFzeW5j
ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAg
ICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHggPCAxMykKKyAgICAgICAgICAgICAgICB4ID0g
eCAqIDI7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDEpXSksIDE2KTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yNzJjMWNhYmUwN2I2MDI0ZjllYjc1ZDNlNjg5MTAxYzA4MWJiMmVmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLW51bGwtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIHN0b3JlTnVsbCAKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLW51bGwuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y0NGIzMmM1ZWQ2ZGU3
NmYyNWE5ZDA3NzQzYTdhN2JjYzE2MWNkYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdG9yZS1udWxsLmh0bWwKQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0
IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHN0cnVjdHMuPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3Rz
ID0ge307CisKK3dobHNsVGVzdHMuc3RvcmVOdWxsID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHZvaWQgZm9vKCkgeyAqbnVsbCA9
IDQyOyB9CisgICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0
PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RvcmUt
dG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3N0b3JlLXRvLXByb3BlcnR5LXVwZGF0ZXMtcHJvcGVybHktZXhwZWN0ZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N0b3JlLXRvLXBy
b3BlcnR5LXVwZGF0ZXMtcHJvcGVybHktZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFy
ZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zdG9yZS10by1w
cm9wZXJ0eS11cGRhdGVzLXByb3Blcmx5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJseS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlNGQ1
NWM1MTVhNjcxNmFlNTQzODlmYWUzMTBkZjhjZmU2Mjc2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RvcmUtdG8tcHJvcGVydHktdXBkYXRlcy1wcm9wZXJs
eS5odG1sCkBAIC0wLDAgKzEsMTU1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBpbnQgeDsKKyAgICBmbG9h
dCB5OworICAgIGludCB6OworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBCYXIgYmFyOworICAgIEJh
ciBiYXIyOworfQorCit0aHJlYWQgRm9vKiBwdHIoKSB7CisgICAgRm9vIGxvY2FsOworICAgIHJl
dHVybiAmbG9jYWw7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAg
ICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgdGhyZWFkIEZvbyogcCA9IHB0cigpOworICAgIHAt
PmJhcjIueSA9IDEuMDsKKyAgICBmbG9hdCB2YWx1ZSA9IHAtPmJhcjIueTsKKworICAgIHJlc3Vs
dC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHZhbHVlOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0
IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0
KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRl
dmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kg
PSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9u
dEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBb
e2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6
IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0
YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAs
IGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtz
aGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25z
dCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0
MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlu
cHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6
IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRp
bmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9
XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExh
eW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0
ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5w
dXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6
ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZm
ZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9
IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAo
KTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVB
c3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0
MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZs
b2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNv
bnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07Cisg
ICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVy
QmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRH
cm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmlu
ZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qg
c3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5E
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJl
bnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJl
LmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmlj
ZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBn
OiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2ht
ZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xl
YXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5k
R3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRl
eEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihk
ZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9u
KCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdHJ1Y3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MjBlZTFiMjg1
ODQ2YzhhNmZlMmZjZjQ0NWNhNjNmY2RhN2RhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKwor
UEFTUyBlbXB0eVN0cnVjdCAKK1BBU1Mgc2V0dGluZ0FuQXJyYXlJbnNpZGVBU3RydWN0IAorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0Lmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc3RydWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxMDdjOGRlMWNiNDMx
YzBkOTc2MmUzOTA2NGY2ODRhMWY5YTgxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zdHJ1Y3QuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNv
bnRlbnQ9ImxvbmciPgorPHRpdGxlPlRlc3Qgc3RydWN0cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9
ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7
fTsKKword2hsc2xUZXN0cy5lbXB0eVN0cnVjdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHBy
b2dyYW0gPSBgCisgICAgICAgIHN0cnVjdCBUaGluZ3kgeyB9CisgICAgICAgIGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICBUaGluZ3kgdGhpbmd5OworICAgICAgICAgICAgcmV0dXJu
IDQ2OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Nik7Cit9OworCit3aGxzbFRlc3RzLnNldHRp
bmdBbkFycmF5SW5zaWRlQVN0cnVjdCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50WzFdIGFycmF5OworICAg
ICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9v
OworICAgICAgICAgICAgdGhyZWFkIEZvbyogYmFyID0gJmZvbzsKKyAgICAgICAgICAgIGJhci0+
YXJyYXlbMF0gPSAyMTsKKyAgICAgICAgICAgIHJldHVybiBmb28uYXJyYXlbMF07CisgICAgICAg
IH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDIxKTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3Jp
cHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3dpdGNo
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zd2l0Y2gtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNmM2JmNTEzYzY5ZmM2YTYzZmM4MzEyNGYzMWJiODNkZmU0NTEzMDEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc3dpdGNoLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBzd2l0Y2hCcmVhayAKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3N3aXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3N3aXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0NzA2MWIxNWEwOGVjNTNlMTE0YTY3
Mjc4ZDY2Y2M0ZmUxYTA2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc3dpdGNoLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJs
b25nIj4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0i
anMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9
OworCit3aGxzbFRlc3RzLnN3aXRjaEJyZWFrID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgIGNh
c2UgNzY3OgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAyNzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgNjk6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDc2
MjQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSA0OTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICBgOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludCg3NjcpXSksIDI3KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoNjkpXSksIDc2MjQpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKV0pLCA0
OSk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRlc3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnktc3BlYy10ZXN0LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MmI4ODY0ZjExMDE1ZjJmNGM1ZTZhN2IwZjA4NTFkOWEyN2M3
NDcxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnkt
c3BlYy10ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyB0ZXJuYXJ5RXhw
cmVzc2lvbiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnkt
c3BlYy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVybmFyeS1zcGVjLXRl
c3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40OTBhYTgzOGU3NDNkNjgwMmZkMDJiYWIzMDhiMWJhNzk3NWZh
YzQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Rlcm5hcnkt
c3BlYy10ZXN0Lmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KKzx0aXRsZT5UZXN0IGludCBiaXQgbWF0aC48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKwor
d2hsc2xUZXN0cy50ZXJuYXJ5RXhwcmVzc2lvbiA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHggPCAzID8gNCA6IDU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcihpbnQgeCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHggPCAxMCA/IDExIDogeCA8IDEyID8gMTQg
OiAxNTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6KGludCB4KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gMyA8IDQgPyB4IDogNTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50
KDc2NyldKSwgNSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KDIpXSksIDQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbbWFrZUludCg4KV0pLCAxMSk7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtl
SW50KDkpXSksIDExKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiYmFyIiwgW21ha2VJbnQoMTApXSksIDE0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW21ha2VJbnQoMTEpXSksIDE0KTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwg
W21ha2VJbnQoMTIpXSksIDE1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiYmFyIiwgW21ha2VJbnQoMTMpXSksIDE1KTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW21ha2VJbnQoMTQpXSks
IDE0KTsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBm
b28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAg
ICAgICg0IDwgNSA/IHggOiA3KSA9IDg7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAg
IGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgaW50IHk7
CisgICAgICAgICAgICAgICAgKDAgPCAxID8geCA6IHkpID0gNDI7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHg7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNoZWNrRmFp
bCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgaW50IHk7CisgICAgICAgICAgICAg
ICAgdGhyZWFkIGludCogeiA9ICYoMCA8IDEgPyB4IDogeSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuICp6OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBmb28oKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAgIGludCB5OworICAgICAgICAgICAgICAg
IHRocmVhZCBpbnRbXSB6ID0gQCgwIDwgMSA/IHggOiB5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKno7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgZmxvYXQgeTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gNCA8IDUgPyB4IDogeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNCA8IDUgPyA2IDogNy4wOworICAgICAg
ICAgICAgfQorICAgICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXN0LWhh
cm5lc3MtdGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGVzdC1o
YXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwNzU3N2Q1MDRkOTZkNzdkYmM1
NjIzMTQ0OTE2MWUwNTJlMTVjNjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvdGVzdC1oYXJuZXNzLXRlc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAK
KworUEFTUyBSZXR1cm4gYSBsaXRlcmFsIG9mIHR5cGUgYm9vbC4gCitQQVNTIFJldHVybiBhbiBl
eHBlY3RlZCBmbG9hdDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVl
LiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4g
ZXhwZWN0ZWQgZmxvYXQgdmFsdWUuIAorUEFTUyBVcGxvYWQgYW5kIHJldHVybiBhIGJvb2wgdmFs
dWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0IHZhbHVlLiAKK1BBU1MgUmV0dXJu
IGFuIGV4cGVjdGVkIGludCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3RlZCB1aW50IHZh
bHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0IHZhbHVlLiAKK1BBU1MgVXBsb2Fk
IG1hbnkgYm9vbCB2YWx1ZXMgYW5kIHJldHVybiBhIGNhbGN1bGF0ZWQgcmVzdWx0LiAKK1BBU1Mg
UmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0NCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3Rl
ZCBpbnQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgdWludCB2YWx1ZS4gCitQQVNT
IFJldHVybiBhbiBleHBlY3RlZCBmbG9hdCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBlY3Rl
ZCBmbG9hdDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgaW50IHZhbHVlLiAKK1BB
U1MgUmV0dXJuIGFuIGV4cGVjdGVkIHVpbnQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0
ZWQgZmxvYXQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0IHZhbHVlLiAK
K1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGludCB2YWx1ZS4gCitQQVNTIFJldHVybiBhbiBleHBl
Y3RlZCB1aW50IHZhbHVlLiAKK1BBU1MgUmV0dXJuIGFuIGV4cGVjdGVkIGZsb2F0IHZhbHVlLiAK
K1BBU1MgVXBsb2FkIGFuZCBjYWxjdWxhdGUgYSByZXN1bHQgZnJvbSB2YXJpZWQgYXJndW1lbnQg
dHlwZXMuIAorUEFTUyBTdG9yZSBpbnRvIGEgZmxvYXQ0W10uIAorUEFTUyBVcGxvYWQgYSBpbnRb
XSBhbmQgc3RvcmUgaW50byBhIGludFtdLiAKK1BBU1MgVXBsb2FkIGEgZmxvYXQ0eDRbXSBhbmQg
c3RvcmUgaW50byBhIGZsb2F0NHg0W10uIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0
eDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0eDQgdmFsdWUuIAorUEFT
UyBSZXR1cm4gYW4gZXhwZWN0ZWQgZmxvYXQ0eDQgdmFsdWUuIAorUEFTUyBSZXR1cm4gYW4gZXhw
ZWN0ZWQgZmxvYXQ0eDQgdmFsdWUuIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvdGVzdC1oYXJuZXNzLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90
ZXN0LWhhcm5lc3MtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1MjkxNDYyMDcyZWIyMmY1NjliZjYz
ZTNiZjZiYTc5NTc2ZTVkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvdGVzdC1oYXJuZXNzLXRlc3QuaHRtbApAQCAtMCwwICsxLDI2NyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0
IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBXSExTTCB0ZXN0IGhhcm5lc3MuPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Citjb25zdCBlcHNpbG9uID0gMC4wMDAxOworCisvLyBGSVhNRTogQWRkICJ1Y2hhciIg
YmFjayBpbiB3aGVuIG9wZXJhdG9yKyh1Y2hhciwgdWNoYXIpIGlzIGF2YWlsYWJsZS4KK2NvbnN0
IG51bWVyaWNTY2FsYXJUeXBlcyA9IFsiaW50IiwgInVpbnQiLCAiZmxvYXQiXTsKKworY29uc3Qg
bnVtZXJpY1NjYWxhckZ1bmNzID0geworICAgICJpbnQiOiBjYWxsSW50RnVuY3Rpb24sCisgICAg
InVjaGFyIjogY2FsbFVjaGFyRnVuY3Rpb24sCisgICAgInVpbnQiOiBjYWxsVWludEZ1bmN0aW9u
LAorICAgICJmbG9hdCI6IGNhbGxGbG9hdEZ1bmN0aW9uCit9OworCitjb25zdCBzY2FsYXJBcmdN
YWtlcnMgPSB7CisgICAgImJvb2wiOiBtYWtlQm9vbCwKKyAgICAiaW50IjogbWFrZUludCwKKyAg
ICAidWNoYXIiOiBtYWtlVWNoYXIsCisgICAgInVpbnQiOiBtYWtlVWludCwKKyAgICAiZmxvYXQi
OiBtYWtlRmxvYXQKK307CisKK2NvbnN0IGFycmF5VHlwZUxlbmd0aHMgPSB7CisgICAgImZsb2F0
NCI6IDQsCisgICAgImZsb2F0NHg0IjogMTYKK307CisKK2NvbnN0IGFycmF5RnVuY3MgPSB7Cisg
ICAgImZsb2F0NCI6IGNhbGxGbG9hdDRGdW5jdGlvbiwKKyAgICAiZmxvYXQ0eDQiOiBjYWxsRmxv
YXQ0eDRGdW5jdGlvbiwKK307CisKK2NvbnN0IGFycmF5QXJnTWFrZXJzID0geworICAgICJmbG9h
dDQiOiBtYWtlRmxvYXQ0LAorICAgICJmbG9hdDR4NCI6IG1ha2VGbG9hdDR4NAorfTsKKworY29u
c3QgZmxvYXQ0eDRleHBlY3RlZCA9IFswLCA0LCA4LCAxMiwgMSwgNSwgOSwgMTMsIDIsIDYsIDEw
LCAxNCwgMywgNywgMTEsIDE1XTsKK2NvbnN0IGZsb2F0NHg0Q29sdW1uRXhwZWN0ZWQgPSBbMCwg
MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNV07Citjb25z
dCBmbG9hdDRleHBlY3RlZCA9IFswLCAxLCAyLCAzXTsKKworbGV0IHdobHNsVGVzdHMgPSB7fTsK
Kword2hsc2xUZXN0cy5saXRlcmFscyA9ICgpID0+IHsKKyAgICBjaGVja0Jvb2xzKCJSZXR1cm4g
YSBsaXRlcmFsIG9mIHR5cGUgYm9vbC4iLCAicmV0dXJuIHRydWU7Iik7CisgICAgY2hlY2tBcnJh
eXMoImZsb2F0NCIsICJyZXR1cm4gZmxvYXQ0KDAsIDEsIDIsIDMpOyIsIFtdLCBmbG9hdDRleHBl
Y3RlZCk7CisgICAgY2hlY2tOdW1lcmljU2NhbGFycygicmV0dXJuIDQyOyIsIFtdLCA0Mik7Cit9
OworCit3aGxzbFRlc3RzLnNpbmdsZUFyZ3VtZW50ID0gKCkgPT4geworICAgIGNoZWNrQm9vbHMo
IlVwbG9hZCBhbmQgcmV0dXJuIGEgYm9vbCB2YWx1ZS4iLCAicmV0dXJuIGluMDsiLCBbdHJ1ZV0p
OworICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCAicmV0dXJuIGluMDsiLCBbZmxvYXQ0ZXhwZWN0
ZWRdLCBmbG9hdDRleHBlY3RlZCk7CisgICAgY2hlY2tOdW1lcmljU2NhbGFycygicmV0dXJuIGlu
MDsiLCBbNDJdLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLm1hbnlBcmd1bWVudHMgPSAoKSA9PiB7
CisgICAgY2hlY2tCb29scygiVXBsb2FkIG1hbnkgYm9vbCB2YWx1ZXMgYW5kIHJldHVybiBhIGNh
bGN1bGF0ZWQgcmVzdWx0LiIsCisgICAgICAgICJyZXR1cm4gaW4wICYgaW4xICYgaW4yICYgaW4z
ICYgaW40ICYgaW41ICYgaW42ICYgaW43OyIsCisgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlLCB0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7CisKKyAgICBsZXQgYm9keSA9ICJyZXR1cm4g
ZmxvYXQ0KGluMC54LCBpbjEueSwgaW4yLnosIGluMy53KTsiCisgICAgbGV0IGFyZ3MgPSBbXTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgYXJncy5wdXNoKGZsb2F0
NGV4cGVjdGVkKTsKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0IiwgYm9keSwgYXJncywgZmxvYXQ0
ZXhwZWN0ZWQpOworCisgICAgYm9keSA9IGByZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsg
aW40ICsgaW41ICsgaW42ICsgaW43O2A7CisgICAgY2hlY2tOdW1lcmljU2NhbGFycyhib2R5LCBb
MCwgMSwgMiwgMywgNCwgNSwgNiwgN10sIDI4KTsKK307CisKK3dobHNsVGVzdHMuYnVmZmVyc1dp
dGhPbmVWYWx1ZSA9ICgpID0+IHsKKyAgICBjb25zdCBib2R5ID0gYHJldHVybiBpbjBbMF07YAor
ICAgIGNoZWNrQXJyYXlzKCJmbG9hdDQiLCBib2R5LCBbW2Zsb2F0NGV4cGVjdGVkXV0sIGZsb2F0
NGV4cGVjdGVkKTsKKyAgICBjaGVja051bWVyaWNTY2FsYXJzKGJvZHksIFtbNDJdXSwgNDIpOwor
fTsKKword2hsc2xUZXN0cy5tdWx0aXBsZUJ1ZmZlckFyZ3VtZW50cyA9ICgpID0+IHsKKyAgICBs
ZXQgYm9keSA9IGAKKyAgICBmbG9hdCB4ID0gaW4wWzBdLnggKyBpbjBbMV0ueCArIGluMFsyXS54
ICsgaW4xLnggKyBpbjJbMF0ueDsKKyAgICBmbG9hdCB5ID0gaW4wWzBdLnkgKyBpbjBbMV0ueSAr
IGluMFsyXS55ICsgaW4xLnkgKyBpbjJbMF0ueTsKKyAgICBmbG9hdCB6ID0gaW4wWzBdLnogKyBp
bjBbMV0ueiArIGluMFsyXS56ICsgaW4xLnogKyBpbjJbMF0uejsKKyAgICBmbG9hdCB3ID0gaW4w
WzBdLncgKyBpbjBbMV0udyArIGluMFsyXS53ICsgaW4xLncgKyBpbjJbMF0udzsKKworICAgIHJl
dHVybiBmbG9hdDQoeCwgeSwgeiwgdyk7YDsKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0IiwgYm9k
eSwgW1tmbG9hdDRleHBlY3RlZCwgZmxvYXQ0ZXhwZWN0ZWQsIGZsb2F0NGV4cGVjdGVkXSwgZmxv
YXQ0ZXhwZWN0ZWQsIFtmbG9hdDRleHBlY3RlZF1dLCBbMCwgNSwgMTAsIDE1XSk7CisKKyAgICBi
b2R5ID0gYHJldHVybiBpbjBbMF0gKyBpbjBbMV0gKyBpbjBbMl0gKyBpbjEgKyBpbjJbMF07YDsK
KyAgICBjaGVja051bWVyaWNTY2FsYXJzKGJvZHksIFtbMCwgMSwgMl0sIDMsIFs0XV0sIDEwKTsK
K307CisKK3dobHNsVGVzdHMubXVsdGlwbGVBcmd1bWVudFR5cGVzID0gKCkgPT4geworICAgIGNv
bnN0IHNyYyA9IGBmbG9hdCB0ZXN0KGludCBpLCB1Y2hhciBjLCBmbG9hdDQgZjQsIGRldmljZSB1
aW50W10gdSwgZGV2aWNlIGZsb2F0W10gZnMpCisgICAgeworICAgICAgICByZXR1cm4gZmxvYXQo
aSkgKyBmbG9hdChjKSArIGY0LnggKyBmNC55ICsgZjQueiArIGY0LncgKyBmbG9hdCh1WzBdKSAr
IGZzWzBdICsgZnNbMV07CisgICAgfWA7CisgICAgY29uc3QgaSA9IG1ha2VJbnQoMSk7CisgICAg
Y29uc3QgYyA9IG1ha2VVY2hhcigyKTsKKyAgICBjb25zdCBmNCA9IG1ha2VGbG9hdDQoWzQsIDUs
IDYsIDddKTsKKyAgICBjb25zdCB1ID0gbWFrZVVpbnQoWzNdKTsKKyAgICBjb25zdCBmcyA9IG1h
a2VGbG9hdChbOCwgOV0pOworICAgIHdlYkdQVVByb21pc2VUZXN0KCgpID0+IHsKKyAgICAgICAg
cmV0dXJuIGNhbGxGbG9hdEZ1bmN0aW9uKHNyYywgInRlc3QiLCBbaSwgYywgZjQsIHUsIGZzXSku
dGhlbihyZXN1bHQgPT4geworICAgICAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocmVzdWx0
LCA0NSwgZXBzaWxvbiwgIlRlc3QgcmV0dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAg
IH0pOworICAgIH0sICJVcGxvYWQgYW5kIGNhbGN1bGF0ZSBhIHJlc3VsdCBmcm9tIHZhcmllZCBh
cmd1bWVudCB0eXBlcy4iKTsKK307CisKK3dobHNsVGVzdHMuYnVmZmVyU3RvcmVzID0gKCkgPT4g
eworICAgIGxldCBzcmMgPSBgdm9pZCB0ZXN0KGRldmljZSBmbG9hdDRbXSBvdXQpIHsKKyAgICAg
ICAgb3V0WzBdID0gZmxvYXQ0KDAsIDEsIDIsIDMpOworICAgIH1gOworICAgIGNvbnN0IGZsb2F0
NE91dCA9IG1ha2VGbG9hdDQoW1swLCAwLCAwLCAwXV0pOworICAgIGNhbGxWb2lkRnVuY3Rpb24o
c3JjLCAidGVzdCIsIGZsb2F0NE91dCk7CisKKyAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7
CisgICAgICAgIHJldHVybiBmbG9hdDRPdXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVm
ZmVyID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJy
YXlCdWZmZXIpOworICAgICAgICAgICAgZm9yIChsZXQgaTsgaSA8IDQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtpXSwgaSwgIlRlc3Qgc3RvcmVk
IGV4cGVjdGVkIHZhbHVlcy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwg
IlN0b3JlIGludG8gYSBmbG9hdDRbXS4iKTsKKworICAgIHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNl
IGludFtdIGluLCBkZXZpY2UgaW50W10gb3V0KSB7CisgICAgICAgIGZvciAodWludCBpID0gMDsg
aSA8IDU7IGkgPSBpICsgMSkKKyAgICAgICAgICAgIG91dFtpXSA9IGluW2ldOworICAgIH1gOwor
ICAgIGNvbnN0IGFycmF5ID0gWzAsIDEsIDIsIDMsIDRdOworICAgIGNvbnN0IGlucHV0ID0gbWFr
ZUludChhcnJheSk7CisgICAgY29uc3Qgb3V0cHV0ID0gbWFrZUludChbMCwgMCwgMCwgMCwgMF0p
OworICAgIGNhbGxWb2lkRnVuY3Rpb24oc3JjLCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7CisK
KyAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9PiB7CisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0
QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVmZmVyID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJl
c3VsdCA9IG5ldyBVaW50MzJBcnJheShhcnJheUJ1ZmZlcik7CisgICAgICAgICAgICBhc3NlcnRf
YXJyYXlfZXF1YWxzKGFycmF5LCByZXN1bHQsICJUZXN0IHN0b3JlZCBleHBlY3RlZCB2YWx1ZXMu
Iik7CisgICAgICAgIH0pOworICAgIH0sICJVcGxvYWQgYSBpbnRbXSBhbmQgc3RvcmUgaW50byBh
IGludFtdLiIpOworfTsKKword2hsc2xUZXN0cy5mbG9hdDR4NHRlc3RzID0gKCkgPT4geworICAg
IGNvbnN0IHNyYyA9IGB2b2lkIHRlc3QoZGV2aWNlIGZsb2F0NHg0W10gaW4sIGRldmljZSBmbG9h
dDR4NFtdIG91dCkgeworICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBpID0gaSArIDEp
CisgICAgICAgICAgICBvdXRbaV0gPSBpbltpXTsKKyAgICB9YDsKKyAgICBjb25zdCBpbnB1dCA9
IG1ha2VGbG9hdDR4NChbZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZCwgZmxvYXQ0
eDRleHBlY3RlZCwgZmxvYXQ0eDRleHBlY3RlZF0pOworICAgIGNvbnN0IG91dHB1dCA9IG1ha2VG
bG9hdDR4NChuZXcgQXJyYXkoNjQpLmZpbGwoMCkpOworICAgIGNhbGxWb2lkRnVuY3Rpb24oc3Jj
LCAidGVzdCIsIFtpbnB1dCwgb3V0cHV0XSk7CisKKyAgICB3ZWJHUFVQcm9taXNlVGVzdCgoKSA9
PiB7CisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0QXJyYXlCdWZmZXIoKS50aGVuKGFycmF5QnVm
ZmVyID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoYXJy
YXlCdWZmZXIpOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opCisgICAgICAgICAgICAg
ICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtpICogMTYgKyBqXSwgZmxvYXQ0eDRl
eHBlY3RlZFtqXSwgZXBzaWxvbiwgIlRlc3Qgc3RvcmVkIGV4cGVjdGVkIHZhbHVlcy4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwgIlVwbG9hZCBhIGZsb2F0NHg0W10gYW5k
IHN0b3JlIGludG8gYSBmbG9hdDR4NFtdLiIpOworCisgICAgY2hlY2tBcnJheXMoImZsb2F0NHg0
IiwgInJldHVybiBmbG9hdDR4NChmbG9hdDQoMCwgMSwgMiwgMyksIGZsb2F0NCg0LCA1LCA2LCA3
KSwgZmxvYXQ0KDgsIDksIDEwLCAxMSksIGZsb2F0NCgxMiwgMTMsIDE0LCAxNSkpOyIsIFtdLCBm
bG9hdDR4NGV4cGVjdGVkKTsKKyAgICBjaGVja0FycmF5cygiZmxvYXQ0eDQiLCAicmV0dXJuIGlu
MDsiLCBbZmxvYXQ0eDRleHBlY3RlZF0sIGZsb2F0NHg0ZXhwZWN0ZWQpOworICAgIGxldCBtdWx0
aXBsZTR4NGFyZ3MgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAg
ICAgICAgY29uc3QgYXJnID0gbmV3IEFycmF5KDE2KTsKKyAgICAgICAgYXJnLmZpbGwoMCk7Cisg
ICAgICAgIGFyZ1tpXSA9IGk7CisgICAgICAgIG11bHRpcGxlNHg0YXJncy5wdXNoKGFyZyk7Cisg
ICAgfQorICAgIGNoZWNrQXJyYXlzKCJmbG9hdDR4NCIsICJyZXR1cm4gaW4wICsgaW4xICsgaW4y
ICsgaW4zICsgaW40ICsgaW41ICsgaW42ICsgaW43ICsgaW44ICsgaW45ICsgaW4xMCArIGluMTEg
KyBpbjEyICsgaW4xMyArIGluMTQgKyBpbjE1OyIsIG11bHRpcGxlNHg0YXJncywgZmxvYXQ0eDRD
b2x1bW5FeHBlY3RlZCk7CisgICAgY2hlY2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBpbjBb
MF07IiwgW1tmbG9hdDR4NGV4cGVjdGVkXV0sIGZsb2F0NHg0ZXhwZWN0ZWQpOworfTsKKword2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCAoKSA9PiB7CisgICAgdHJ5IHsKKyAgICAgICAg
Zm9yIChjb25zdCBuYW1lIGluIHdobHNsVGVzdHMpIHsKKyAgICAgICAgICAgIGlmICghbmFtZS5z
dGFydHNXaXRoKCJfIikpCisgICAgICAgICAgICAgICAgd2hsc2xUZXN0c1tuYW1lXSgpOworICAg
ICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgCisgICAgICAg
IHRocm93IGU7CisgICAgfQorfSk7CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgKi8KKworY29uc3Qg
Y2hlY2tOdW1lcmljU2NhbGFycyA9IChib2R5LCBhcmdWYWx1ZXMsIGV4cGVjdGVkKSA9PiB7Cisg
ICAgbGV0IGZ1bmN0aW9ucyA9IFtdOworICAgIGxldCBzcmMgPSAiIjsKKyAgICBmb3IgKGxldCB0
eXBlIG9mIG51bWVyaWNTY2FsYXJUeXBlcykgeworICAgICAgICBsZXQgbmFtZSwgdmFsdWVzOwor
ICAgICAgICBbc3JjLCBuYW1lLCB2YWx1ZXNdID0gYXBwZW5kU2NhbGFyRnVuY3Rpb25Ub1NvdXJj
ZShzcmMsIHR5cGUsIGJvZHksIGFyZ1ZhbHVlcyk7CisgICAgICAgIGZ1bmN0aW9ucy5wdXNoKHsg
dHlwZTogdHlwZSwgbmFtZTogbmFtZSwgYXJnczogdmFsdWVzLCBleHBlY3RlZDogZXhwZWN0ZWQg
fSk7CisgICAgfQorCisgICAgZm9yIChjb25zdCBmIG9mIGZ1bmN0aW9ucykgeworICAgICAgICBj
b25zdCBjYWxsRnVuYyA9IG51bWVyaWNTY2FsYXJGdW5jc1tmLnR5cGVdOworICAgICAgICB3ZWJH
UFVQcm9taXNlVGVzdChhc3luYyAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gY2FsbEZ1bmMo
c3JjLCBmLm5hbWUsIGYuYXJncykudGhlbihyZXN1bHQgPT4geworICAgICAgICAgICAgICAgIGFz
c2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdCwgZi5leHBlY3RlZCwgZXBzaWxvbiwgIlRlc3QgcmV0
dXJuZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgYFJl
dHVybiBhbiBleHBlY3RlZCAke2YudHlwZX0gdmFsdWUuYCk7CisgICAgfQorfTsKKworY29uc3Qg
Y2hlY2tCb29scyA9IChtc2cgPSAiUmV0dXJuIGFuIGV4cGVjdGVkIGJvb2wgdmFsdWUuIiwgYm9k
eSwgYXJnVmFsdWVzID0gW10sIGV4cGVjdGVkID0gdHJ1ZSkgPT4geworICAgIGNvbnN0IFtzcmMs
IG5hbWUsIHZhbHVlc10gPSBhcHBlbmRTY2FsYXJGdW5jdGlvblRvU291cmNlKCIiLCAiYm9vbCIs
IGJvZHksIGFyZ1ZhbHVlcyk7IAorCisgICAgd2ViR1BVUHJvbWlzZVRlc3QoYXN5bmMgKCkgPT4g
eworICAgICAgICByZXR1cm4gY2FsbEJvb2xGdW5jdGlvbihzcmMsIG5hbWUsIHZhbHVlcykudGhl
bihyZXN1bHQgPT4geworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXN1bHQsIGV4cGVjdGVk
LCAiVGVzdCByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICAgICAgfSwgZSA9PiB7Cisg
ICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV2ViR1BVVW5zdXBwb3J0ZWRFcnJvcikpCisg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSk7CisgICAgfSwgbXNnKTsKK307CisK
K2NvbnN0IGNoZWNrQXJyYXlzID0gKHR5cGUsIGJvZHksIGFyZ1ZhbHVlcyA9IFtdLCBleHBlY3Rl
ZCkgPT4geworICAgIGxldCBpbnB1dEFyZ3MgPSBbXTsKKyAgICBsZXQgdmFsdWVzID0gW107Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdWYWx1ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
Ly8gU3VwcG9ydCBhcnJheXMgb2YgZmxvYXQ0LCBpbmNsdWRpbmcgb25lIHdpdGggYSBzaW5nbGUg
ZmxvYXQ0LgorICAgICAgICBjb25zdCB0b3RhbExlbmd0aCA9IGFyZ1ZhbHVlc1tpXS5mbGF0KCku
bGVuZ3RoOworICAgICAgICBjb25zdCBpc0J1ZmZlciA9IGFyZ1ZhbHVlc1tpXS5sZW5ndGggPT09
IDEgfHwgdG90YWxMZW5ndGggPiBhcnJheVR5cGVMZW5ndGhzW3R5cGVdOworICAgICAgICBpbnB1
dEFyZ3MucHVzaChgJHtpc0J1ZmZlciA/ICJkZXZpY2UgIiA6ICIifSR7dHlwZX0ke2lzQnVmZmVy
ID8gIltdIiA6ICIifSBpbiR7aX1gKTsKKyAgICAgICAgdmFsdWVzLnB1c2goYXJyYXlBcmdNYWtl
cnNbdHlwZV0oYXJnVmFsdWVzW2ldKSk7CisgICAgfQorCisgICAgY29uc3Qgc3JjID0gYCR7dHlw
ZX0gJHt0eXBlfVRlc3QoJHtpbnB1dEFyZ3Muam9pbigiLCAiKX0pIHsgJHtib2R5fSB9CisgICAg
YDsKKworICAgIHdlYkdQVVByb21pc2VUZXN0KGFzeW5jICgpID0+IHsKKyAgICAgICAgcmV0dXJu
IGFycmF5RnVuY3NbdHlwZV0oc3JjLCBgJHt0eXBlfVRlc3RgLCB2YWx1ZXMpLnRoZW4ocmVzdWx0
ID0+IHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlUeXBlTGVuZ3Roc1t0
eXBlXTsgKytpKQorICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKHJlc3VsdFtp
XSwgZXhwZWN0ZWRbaV0sIGVwc2lsb24sICJUZXN0IHJldHVybmVkIGV4cGVjdGVkIHZhbHVlLiIp
OworICAgICAgICB9KTsKKyAgICB9LCBgUmV0dXJuIGFuIGV4cGVjdGVkICR7dHlwZX0gdmFsdWUu
YCk7Cit9CisKK2NvbnN0IGFwcGVuZFNjYWxhckZ1bmN0aW9uVG9Tb3VyY2UgPSAoc3JjLCB0eXBl
LCBib2R5LCBhcmdWYWx1ZXMpID0+IHsKKyAgICBjb25zdCBuYW1lID0gYCR7dHlwZX1UZXN0YDsK
KworICAgIGxldCBpbnB1dEFyZ3MgPSBbXTsKKyAgICBsZXQgdmFsdWVzID0gW107CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBhcmdWYWx1ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
aXNCdWZmZXIgPSBBcnJheS5pc0FycmF5KGFyZ1ZhbHVlc1tpXSk7CisgICAgICAgIGlucHV0QXJn
cy5wdXNoKGAke2lzQnVmZmVyID8gImRldmljZSAiIDogIiJ9JHt0eXBlfSR7aXNCdWZmZXIgPyAi
W10iIDogIiJ9IGluJHtpfWApOworICAgICAgICB2YWx1ZXMucHVzaChzY2FsYXJBcmdNYWtlcnNb
dHlwZV0oYXJnVmFsdWVzW2ldKSk7CisgICAgfQorCisgICAgc3JjICs9IGAke3R5cGV9ICR7bmFt
ZX0oJHtpbnB1dEFyZ3Muam9pbigiLCAiKX0pIHsgJHtib2R5fSB9CisgICAgYDsKKyAgICAKKyAg
ICByZXR1cm4gW3NyYywgbmFtZSwgdmFsdWVzXTsKK307Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1nZXRkaW1lbnNpb25z
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1nZXRkaW1l
bnNpb25zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRk
MjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3RleHR1cmVzLWdldGRpbWVuc2lvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAor
UEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtZ2V0ZGltZW5z
aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLWdldGRpbWVuc2lv
bnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xOWYxMmY4YTFmMzZmYmE4ZTkzZDNhNzFhYmMwN2ZmNDAyNjIx
Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVz
LWdldGRpbWVuc2lvbnMuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10
aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoVGV4dHVyZTJEPGZs
b2F0ND4gdGhlVGV4dHVyZSA6IHJlZ2lzdGVyKHQwKSwgZGV2aWNlIHVpbnRbXSB0aGVCdWZmZXIg
OiByZWdpc3Rlcih1MSkpIHsKKyAgICB1aW50IHdpZHRoOworICAgIHVpbnQgaGVpZ2h0OworICAg
IHVpbnQgbnVtYmVyT2ZMZXZlbHM7CisgICAgR2V0RGltZW5zaW9ucyh0aGVUZXh0dXJlLCAwLCAm
d2lkdGgsICZoZWlnaHQsICZudW1iZXJPZkxldmVscyk7CisgICAgdGhlQnVmZmVyWzBdID0gd2lk
dGg7CisgICAgdGhlQnVmZmVyWzFdID0gaGVpZ2h0OworICAgIHRoZUJ1ZmZlclsyXSA9IG51bWJl
ck9mTGV2ZWxzOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic2FtcGxlZC10ZXh0dXJlIn0sIHtiaW5kaW5nOiAxLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2Us
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB0ZXh0dXJlRGVzY3JpcHRvciA9IHtzaXplOiB7d2lkdGg6IDIsIGhlaWdodDog
MiwgZGVwdGg6IDF9LCBmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgdXNhZ2U6IEdQVVRleHR1cmVVc2Fn
ZS5TQU1QTEVEfTsKKyAgICBjb25zdCB0ZXh0dXJlID0gZGV2aWNlLmNyZWF0ZVRleHR1cmUodGV4
dHVyZURlc2NyaXB0b3IpOworICAgIGNvbnN0IHRleHR1cmVWaWV3ID0gdGV4dHVyZS5jcmVhdGVE
ZWZhdWx0VmlldygpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZTogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAzLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1bHRz
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZTog
VWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAzfTsKKyAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5ncyA9IFt7YmluZGluZzogMCwgcmVzb3VyY2U6IHRleHR1cmVWaWV3fSwge2JpbmRpbmc6
IDEsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfV07CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3Jp
cHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IGJpbmRHcm91cEJpbmRp
bmdzfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRH
cm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIg
PSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNw
YXRjaCgxLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNB
cnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgY29u
c3QgcmVzdWx0c1VpbnQzMkFycmF5ID0gbmV3IFVpbnQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZl
cik7CisgICAgaWYgKHJlc3VsdHNVaW50MzJBcnJheVswXSA9PSAyCisgICAgICAgICYmIHJlc3Vs
dHNVaW50MzJBcnJheVsxXSA9PSAyCisgICAgICAgICYmIHJlc3VsdHNVaW50MzJBcnJheVsyXSA9
PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAg
ICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2Vk
KCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC1leHBl
Y3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLWxvYWQtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhl
MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVz
LWxvYWQtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90ZXh0dXJlcy1sb2FkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNGZlMGZj
ODRlOWQ0MjY3NzhjMjgxMTZiZWUyYWYzYTRhYjZmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvdGV4dHVyZXMtbG9hZC5odG1sCkBAIC0wLDAgKzEsMTQzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0
IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoVGV4dHVyZTJEPGZsb2F0ND4g
dGhlVGV4dHVyZSA6IHJlZ2lzdGVyKHQwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIExv
YWQodGhlVGV4dHVyZSwgaW50MigwLCAwKSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRl
dmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kg
PSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9u
dEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBb
e2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6
IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0
YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwg
YXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBd
OworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAg
ICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6
IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzYW1wbGVkLXRleHR1cmUifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0
YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRl
LCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3Vu
dDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUg
PSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgdGV4dHVyZURh
dGFCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogMiAqIDIsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkMgfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih0ZXh0dXJlRGF0YUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHRl
eHR1cmVEYXRhQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB0ZXh0dXJlRGF0YUJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5ID0gbmV3
IFVpbnQ4QXJyYXkodGV4dHVyZURhdGFCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdGV4dHVyZURh
dGFCdWZmZXJVaW50OEFycmF5WzBdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhB
cnJheVsxXSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMl0gPSAyNTU7
CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzNdID0gMjU1OworICAgIHRleHR1cmVE
YXRhQnVmZmVyVWludDhBcnJheVs0XSA9IDEyODsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4
QXJyYXlbNV0gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzZdID0gMTI4
OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs3XSA9IDI1NTsKKyAgICB0ZXh0dXJl
RGF0YUJ1ZmZlclVpbnQ4QXJyYXlbOF0gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50
OEFycmF5WzldID0gMTI4OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVsxMF0gPSAx
Mjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzExXSA9IDI1NTsKKyAgICB0ZXh0
dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTJdID0gMTI4OworICAgIHRleHR1cmVEYXRhQnVmZmVy
VWludDhBcnJheVsxM10gPSAxMjg7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzE0
XSA9IDEyODsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTVdID0gMjU1OworICAg
IHRleHR1cmVEYXRhQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCB0ZXh0dXJlRGVzY3JpcHRv
ciA9IHtzaXplOiB7d2lkdGg6IDIsIGhlaWdodDogMiwgZGVwdGg6IDF9LCBmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgdXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5TQU1QTEVEIHwgR1BVVGV4dHVyZVVzYWdl
LlRSQU5TRkVSX0RTVH07CisgICAgY29uc3QgdGV4dHVyZSA9IGRldmljZS5jcmVhdGVUZXh0dXJl
KHRleHR1cmVEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB0ZXh0dXJlVmlldyA9IHRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmdzID0gW3tiaW5k
aW5nOiAwLCByZXNvdXJjZTogdGV4dHVyZVZpZXd9XTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNj
cmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogYmluZEdyb3VwQmlu
ZGluZ3N9OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmlu
ZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKwor
ICAgIGNvbnN0IGJ1ZmZlckNvcHlWaWV3ID0ge2J1ZmZlcjogdGV4dHVyZURhdGFCdWZmZXIsIHJv
d1BpdGNoOiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIsIGltYWdlSGVpZ2h0
OiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAyfTsKKyAgICBjb25zdCB0
ZXh0dXJlQ29weVZpZXcgPSB7dGV4dHVyZTogdGV4dHVyZX07CisgICAgY29uc3QgY29weVNpemUg
PSB7d2lkdGg6IDIsIGhlaWdodDogMiwgZGVwdGg6IDF9OworICAgIGNvbW1hbmRFbmNvZGVyLmNv
cHlCdWZmZXJUb1RleHR1cmUoYnVmZmVyQ29weVZpZXcsIHRleHR1cmVDb3B5VmlldywgY29weVNp
emUpOworCisgICAgY29uc3QgY2xlYXJDb2xvciA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsK
KyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJl
VmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3Rv
cmUiLCBjbGVhckNvbG9yfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51
bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBj
b21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmlu
aXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0
YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1do
aXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC90ZXh0dXJlcy1zYW1wbGUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC90ZXh0dXJlcy1zYW1wbGUtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2
NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1cmVzLXNhbXBsZS1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3RleHR1cmVzLXNhbXBsZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3RleHR1
cmVzLXNhbXBsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzNDVlNDc3MDRmZjFhMGFlZGU0NGIyNjFjNjA2
MDliYWRkOWU2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
dGV4dHVyZXMtc2FtcGxlLmh0bWwKQEAgLTAsMCArMSwxNDYgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAor
dmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
KSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK2ZyYWdtZW50IGZs
b2F0NCBmcmFnbWVudFNoYWRlcihUZXh0dXJlMkQ8ZmxvYXQ0PiB0aGVUZXh0dXJlIDogcmVnaXN0
ZXIodDApLCBzYW1wbGVyIHRoZVNhbXBsZXIgOiByZWdpc3RlcihzMSkpIDogU1ZfVGFyZ2V0IDAg
eworICAgIHJldHVybiBTYW1wbGUodGhlVGV4dHVyZSwgdGhlU2FtcGxlciwgZmxvYXQyKDAuNSwg
MC41KSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
fTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmli
dXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElu
cHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5
cGU6ICJzYW1wbGVkLXRleHR1cmUifSwge2JpbmRpbmc6IDEsIHZpc2liaWxpdHk6IDcsIHR5cGU6
ICJzYW1wbGVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
MERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAo
KTsKKworICAgIGNvbnN0IHRleHR1cmVEYXRhQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBVaW50
OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDIgKiAyLCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB0
ZXh0dXJlRGF0YUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodGV4dHVyZURhdGFCdWZmZXJE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCB0ZXh0dXJlRGF0YUJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgdGV4dHVyZURhdGFCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHRleHR1cmVE
YXRhQnVmZmVyVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KHRleHR1cmVEYXRhQnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVswXSA9IDI1NTsKKyAg
ICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMV0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFC
dWZmZXJVaW50OEFycmF5WzJdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJh
eVszXSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbNF0gPSAyNTU7Cisg
ICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzVdID0gMjU1OworICAgIHRleHR1cmVEYXRh
QnVmZmVyVWludDhBcnJheVs2XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJy
YXlbN10gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzhdID0gMjU1Owor
ICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhBcnJheVs5XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0
YUJ1ZmZlclVpbnQ4QXJyYXlbMTBdID0gMjU1OworICAgIHRleHR1cmVEYXRhQnVmZmVyVWludDhB
cnJheVsxMV0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJVaW50OEFycmF5WzEyXSA9IDI1
NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlclVpbnQ4QXJyYXlbMTNdID0gMjU1OworICAgIHRleHR1
cmVEYXRhQnVmZmVyVWludDhBcnJheVsxNF0gPSAyNTU7CisgICAgdGV4dHVyZURhdGFCdWZmZXJV
aW50OEFycmF5WzE1XSA9IDI1NTsKKyAgICB0ZXh0dXJlRGF0YUJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSB7c2l6ZToge3dpZHRoOiAyLCBoZWlnaHQ6IDIs
IGRlcHRoOiAxfSwgZm9ybWF0OiAicmdiYTh1bm9ybSIsIHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2Uu
U0FNUExFRCB8IEdQVVRleHR1cmVVc2FnZS5UUkFOU0ZFUl9EU1R9OworICAgIGNvbnN0IHRleHR1
cmUgPSBkZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dGV4dHVyZVZpZXcgPSB0ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBz
YW1wbGVyRGVzY3JpcHRvciA9IHttYWdGaWx0ZXI6ICJsaW5lYXIiLCBtaW5GaWx0ZXI6ICJsaW5l
YXIifTsKKyAgICBjb25zdCBzYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoc2FtcGxlckRl
c2NyaXB0b3IpOworCisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZ3MgPSBbe2JpbmRpbmc6IDAs
IHJlc291cmNlOiB0ZXh0dXJlVmlld30sIHtiaW5kaW5nOiAxLCByZXNvdXJjZTogc2FtcGxlcn1d
OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlv
dXQsIGJpbmRpbmdzOiBiaW5kR3JvdXBCaW5kaW5nc307CisgICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQorCisgICAgY29uc3QgYnVmZmVyQ29weVZpZXcgPSB7YnVm
ZmVyOiB0ZXh0dXJlRGF0YUJ1ZmZlciwgcm93UGl0Y2g6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA0ICogMiwgaW1hZ2VIZWlnaHQ6IFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogMiAqIDJ9OworICAgIGNvbnN0IHRleHR1cmVDb3B5VmlldyA9IHt0ZXh0dXJlOiB0ZXh0
dXJlfTsKKyAgICBjb25zdCBjb3B5U2l6ZSA9IHt3aWR0aDogMiwgaGVpZ2h0OiAyLCBkZXB0aDog
MX07CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShidWZmZXJDb3B5Vmll
dywgdGV4dHVyZUNvcHlWaWV3LCBjb3B5U2l6ZSk7CisKKyAgICBjb25zdCBjbGVhckNvbG9yID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3J9XTsKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3Jp
cHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBj
b25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBi
aW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3Zl
cnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwg
MCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRC
dWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9
LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNpb25hbC1hcnJheS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdHdvLWRpbWVuc2lvbmFsLWFy
cmF5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdm
OGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3R3by1kaW1lbnNpb25hbC1hcnJheS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNT
IAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90d28tZGltZW5zaW9uYWwtYXJyYXku
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90d28tZGltZW5zaW9uYWwtYXJyYXkuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jZGEzNTliNmM4ZjIxMWNiMDg5MTU2YjdiZGFlMWU5NzhmZWE0YjIzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R3by1kaW1lbnNpb25h
bC1hcnJheS5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZvaWQgZmlsbCh0
aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0WzEwXSB2YWx1ZSkgeworICAgIGZvciAodWlu
dCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGFycmF5W2ld
ID0gdmFsdWU7CisgICAgfQorfQorCit2b2lkIGZpbGwodGhyZWFkIGZsb2F0W10gYXJyYXksIGZs
b2F0IHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpID0g
aSArIDEpIHsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKK2Jvb2wgY29u
dGFpbnModGhyZWFkIGZsb2F0WzEwXVtdIGFycmF5LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAo
dWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGZvciAo
dWludCBqID0gMDsgaiA8IGFycmF5W2pdLmxlbmd0aDsgaiA9IGogKyAxKSB7CisgICAgICAgICAg
ICBpZiAoYXJyYXlbaV1bal0gIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIGNvbnRhaW5z
KHRocmVhZCBmbG9hdFtdIGFycmF5LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0g
MDsgaSA8IGFycmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGlmIChhcnJheVtpXSAh
PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFk
ZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDog
U1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0WzEwXVs1XSBhcnJheTsKKyAgICBpZiAo
YXJyYXkubGVuZ3RoICE9IDUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNvbnRhaW5zKEBh
cnJheSwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGZsb2F0WzEwXSB2YWx1ZTsKKyAgICAg
ICAgZmlsbChAdmFsdWUsIGZsb2F0KGkpKTsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAg
ICB9CisKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgPSBpICsgMSkg
eworICAgICAgICBmbG9hdFsxMF0gdmFsdWUgPSBhcnJheVtpXTsKKyAgICAgICAgaWYgKCFjb250
YWlucyhAdmFsdWUsIGZsb2F0KGkpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBidWZmZXJbMF0gPSAxOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewor
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKwor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGlu
ZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0
ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAx
OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25z
dCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBi
aW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29t
bWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBj
b21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVy
LCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5l
KGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgw
LCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsK
KyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3
YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgbGV0IHJlc3VsdHNJbnQzMkFy
cmF5ID0gbmV3IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0
c0ludDMyQXJyYXlbMF0gPT09IDEpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UK
KyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90
eXBlLW1pc21hdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90eXBl
LW1pc21hdGNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTc4Njg1YmQwY2MzNThlM2M4YzU1
NWUwMWVjZGY3MmFhODYyNTdmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3R5cGUtbWlzbWF0Y2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorCitQQVNT
IHR5cGVNaXNtYXRjaFJldHVybiAKK1BBU1MgdHlwZU1pc21hdGNoVmFyaWFibGVEZWNsIAorUEFT
UyB0eXBlTWlzbWF0Y2hBc3NpZ25tZW50IAorUEFTUyB0eXBlTWlzbWF0Y2hSZXR1cm5QYXJhbSAK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3R5cGUtbWlzbWF0Y2guaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90eXBlLW1pc21hdGNoLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWFlZDI0NDNjNmQ5M2QyYmUzYmFiOWY3NjJjNmI2ZGJhYjk0NDg5OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC90eXBlLW1pc21hdGNoLmh0bWwKQEAgLTAs
MCArMSw2MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+
Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBX
SExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0
cy50eXBlTWlzbWF0Y2hSZXR1cm4gPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFp
bCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDEwLjU7CisgICAgICAgICAgICB9CisgICAgICAgIGApOworfQor
Cit3aGxzbFRlc3RzLnR5cGVNaXNtYXRjaFZhcmlhYmxlRGVjbCA9IGFzeW5jICgpID0+Cit7Cisg
ICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbyh1aW50
IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHkgPSB4OworICAgICAgICAg
ICAgfQorICAgICAgICBgKTsKK30KKword2hsc2xUZXN0cy50eXBlTWlzbWF0Y2hBc3NpZ25tZW50
ID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAg
ICAgICAgIHZvaWQgZm9vKHVpbnQgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnQgeTsKKyAgICAgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7
Cit9CisKK3dobHNsVGVzdHMudHlwZU1pc21hdGNoUmV0dXJuUGFyYW0gPSBhc3luYyAoKSA9Pgor
eworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbyh1
aW50IHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAg
ICAgICB9CisgICAgICAgIGApOworfQorCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKworPC9zY3Jp
cHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdWludC1i
aXR3aXNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJpdHdp
c2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjZDY4NGY1MzU5MTE1YjA0NDI2NTIzZWU2NmRl
OTIwNDc4ZjBmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
dWludC1iaXR3aXNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyB1aW50Qml0
QW5kIAorUEFTUyB1aW50Qml0T3IgCitQQVNTIHVpbnRCaXRYb3IgCitQQVNTIHVpbnRCaXROb3Qg
CitQQVNTIHVpbnRMU2hpZnQgCitQQVNTIHVpbnRSU2hpZnQgCitQQVNTIHVpbnRTaW1wbGVNYXRo
IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdWludC1iaXR3aXNlLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdWludC1iaXR3aXNlLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGY1OTEzOTlhZGE2ZjFjNTQ2YTk2ZDM1Y2JhZTNjODRhYTc3YjVjNgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91aW50LWJpdHdpc2UuaHRtbApAQCAtMCww
ICsxLDEwOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+
Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IHRoZSBX
SExTTCB0ZXN0IGhhcm5lc3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3do
bHNsVGVzdHMudWludEJpdEFuZCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhICYgYjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMSksIG1ha2VVaW50
KDcpXSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KSwgbWFrZVVpbnQoNDIpXSksIDQyKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludChNYXRoLnBvdygyLCAzMikgLSAxKSwgbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gNyld
KSwgNDI5NDk2NzI4OSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoMCksIG1ha2VVaW50KDg1NzMyKV0pLCAwKTsKK30K
Kword2hsc2xUZXN0cy51aW50Qml0T3IgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYSB8IGI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDEpLCBtYWtl
VWludCg3KV0pLCA3KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCg2NTUzNSksIG1ha2VVaW50KDQyKV0pLCA2NTUzNSk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1ha2VVaW50KE1hdGgucG93KDIsIDMy
KSAgLSA3KV0pLCA0Mjk0OTY3Mjk1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFrZVVpbnQoODU3MzIpXSks
IDg1NzMyKTsKK30KKword2hsc2xUZXN0cy51aW50Qml0WG9yID0gYXN5bmMgKCkgPT4geworICAg
IGxldCBwcm9ncmFtID0gYAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9CisgICAgYDsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludCgxKSwgbWFrZVVpbnQoNyldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
VWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBtYWtlVWludCg0
MildKSwgNjU0OTMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIsIDMyKSAtIDEpLCBtYWtlVWludChN
YXRoLnBvdygyLCAzMikgLSA3KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxV
aW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFrZVVpbnQoODU3MzIp
XSksIDg1NzMyKTsKK30KKword2hsc2xUZXN0cy51aW50Qml0Tm90ID0gYXN5bmMgKCkgPT4geyAK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgdWludCBmb28odWludCBhKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDEp
XSksIDQyOTQ5NjcyOTQpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDY1NTM1KV0pLCA0Mjk0OTAxNzYwKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludChNYXRoLnBvdygyLCAzMikgLSAxKV0pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKV0pLCA0Mjk0OTY3
Mjk1KTsKK30KKword2hsc2xUZXN0cy51aW50TFNoaWZ0ID0gYXN5bmMgKCkgPT4geworICAgIGxl
dCBwcm9ncmFtID0gYAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVp
bnQoMSksIG1ha2VVaW50KDcpXSksIDEyOCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
VWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBtYWtlVWludCgy
KV0pLCAyNjIxNDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KE1hdGgucG93KDIsIDMyKSAtIDEpLCBtYWtlVWludCg1
KV0pLCA0Mjk0OTY3MjY0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgwKSwgbWFrZVVpbnQoMyldKSwgMCk7Cit9Owor
Cit3aGxzbFRlc3RzLnVpbnRSU2hpZnQgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYSA+PiBiOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludCgxKSwgbWFr
ZVVpbnQoNyldKSwgMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNjU1MzUpLCBtYWtlVWludCgyKV0pLCAxNjM4Myk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZVVpbnQoTWF0aC5wb3coMiwgMzIpIC0gMSksIG1ha2VVaW50KDUpXSksIDEzNDIxNzcy
Nyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbbWFrZVVpbnQoMCksIG1ha2VVaW50KDMpXSksIDApOworfTsKKword2hsc2xUZXN0cy51
aW50U2ltcGxlTWF0aCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9ICJ1aW50IGZv
byh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCArIHk7IH0iOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVaW50KDcpLCBtYWtl
VWludCg1KV0pLCAxMik7CisKKyAgICBwcm9ncmFtID0gInVpbnQgZm9vKHVpbnQgeCwgdWludCB5
KSB7IHJldHVybiB4IC0geTsgfSI7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQoNyksIG1ha2VVaW50KDUpXSksIDIpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VVaW50KDUpLCBtYWtlVWludCg3KV0pLCA0Mjk0OTY3Mjk0KTsKKworICAgIHByb2dyYW0g
PSAidWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggKiB5OyB9IjsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWlu
dCg3KSwgbWFrZVVpbnQoNSldKSwgMzUpOworCisgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3Jr
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5NjAyCisgICAgLy8g
cHJvZ3JhbSA9ICJ1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCAvIHk7IH0iOwor
ICAgIC8vIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VVaW50KDcpLCBtYWtlVWludCgyKV0pLCAzKTsKK30KKworcnVuVGVzdHMod2hsc2xU
ZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3VzZS11bmRlZmluZWQtdmFyaWFibGUtMi1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlh
YmxlLTItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12YXJpYWJsZS0yLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12YXJpYWJsZS0yLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGJlODUyZjM5OWU5YWRiMDUwMTc4NDkwNjI1YzkxYjA4NWIwMmI5ZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLTIu
aHRtbApAQCAtMCwwICsxLDQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK1tudW10aHJlYWRzKDEsIDEsIDEp
XQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAg
ZmxvYXQ0IHZlYyA9IGZsb2F0NCh4LHgseCx4KTsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RB
ZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNl
KCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRl
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVy
In07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBb
e2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07Cisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0g
e2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0
ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKK30KKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNE
ZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihm
dW5jdGlvbigpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFz
c2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVmaW5lZC12
YXJpYWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdXNlLXVuZGVm
aW5lZC12YXJpYWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVl
YjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC91c2UtdW5kZWZpbmVkLXZhcmlhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3VzZS11bmRlZmlu
ZWQtdmFyaWFibGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91c2UtdW5kZWZpbmVk
LXZhcmlhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWE3Y2Q2MjM2NTc1NDlhMzhjOTY1YWFjYWRhOWRh
YjcwNTFhMzUzMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC91
c2UtdW5kZWZpbmVkLXZhcmlhYmxlLmh0bWwKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlz
cGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0IGZvbzsKKyAgICBpZiAoZm9vKSB7CisgICAgICAg
IHggPSB4ICsgMTsKKyAgICB9Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOwor
ICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3Rh
Z2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7
Cit9CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1
bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBm
aW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUtc2hhZG93aW5nLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC92YXJpYWJsZS1zaGFkb3dpbmctZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFkZWU1YjU4OWI0N2M4NWFiMmE0ODA1OTFmMDc3NzIxZmVlMDI5ODEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUtc2hh
ZG93aW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyB2YXJpYWJsZVNoYWRv
d2luZyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3ZhcmlhYmxlLXNo
YWRvd2luZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3ZhcmlhYmxlLXNoYWRvd2lu
Zy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNlYzFhNDM1ZGNmMTA1ZWZiNWY2ZTYyMTBmNzM2ZWE2MDE3Zjcy
ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvdmFyaWFibGUt
c2hhZG93aW5nLmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KKzx0aXRsZT5UZXN0IHByZWZpeC9wb3N0Zml4LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owor
Cit3aGxzbFRlc3RzLnZhcmlhYmxlU2hhZG93aW5nID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCB5OworICAgICAgICAgICAgaW50IHggPSA3OworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGludCB4ID0gODsKKyAgICAgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA4KTsKKworICAgIHBy
b2dyYW0gPSBgCisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
eTsKKyAgICAgICAgICAgIGludCB4ID0gNzsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbnQgeCA9IDg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB5ID0geDsKKyAgICAgICAg
ICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA3KTsKK30KKworcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC92ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC92ZWN0b3Itc3ludGF4LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDBlZDA5
YWY5OTIwMzgwMmI2MzkxNmM2YTU2ODAxYTc0NTZkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3ZlY3Rvci1zeW50YXgtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMyBAQAorCitQQVNTIHZlY3RvclR5cGVTeW50YXggCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC92ZWN0b3Itc3ludGF4Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvdmVjdG9yLXN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMTVmMzkyYjFkZjlmMjc3Zjg5
ODBlOTNkYjQ2NWE4YzI5OTlkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvdmVjdG9yLXN5bnRheC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIg
Y29udGVudD0ibG9uZyI+Cis8dGl0bGU+VGVzdCBzdHJ1Y3RzLjwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0ianMvd2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9
IHt9OworCit3aGxzbFRlc3RzLnZlY3RvclR5cGVTeW50YXggPSBhc3luYyAoKSA9PgoreworICAg
IGxldCBwcm9ncmFtID0gYAorICAgICAgICBpbnQgZm9vMigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludDIgeDsKKyAgICAgICAgICAgIHZlY3RvcjxpbnQsIDI+IHogPSBpbnQyKDMsIDQpOwor
ICAgICAgICAgICAgeCA9IHo7CisgICAgICAgICAgICByZXR1cm4geC55OworICAgICAgICB9CisK
KyAgICAgICAgaW50IGZvbzMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQzIHg7CisgICAg
ICAgICAgICB2ZWN0b3I8aW50LCAzPiB6ID0gaW50MygzLCA0LCA1KTsKKyAgICAgICAgICAgIHgg
PSB6OworICAgICAgICAgICAgcmV0dXJuIHguejsKKyAgICAgICAgfQorCisgICAgICAgIGludCBm
b280KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50NCB4OworICAgICAgICAgICAgdmVjdG9y
PGludCw0PiB6ID0gaW50NCgzLCA0LCA1LCA2KTsKKyAgICAgICAgICAgIHggPSB6OworICAgICAg
ICAgICAgcmV0dXJuIHgudzsKKyAgICAgICAgfWA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFtdKSwgNCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSksIDUpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW10p
LCA2KTsKKworICAgIHByb2dyYW0gPSBgCisgICAgICAgIHR5cGVkZWYgaSA9IGludDsKKyAgICAg
ICAgaW50IGZvbzIoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQyIHg7CisgICAgICAgICAg
ICB2ZWN0b3I8aSwgMj4geiA9IGludDIoMywgNCk7CisgICAgICAgICAgICB4ID0gejsKKyAgICAg
ICAgICAgIHJldHVybiB4Lnk7CisgICAgICAgIH1gOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbXSksIDQpOworfQorcnVuVGVzdHMo
d2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNiZjg2OWE5Nzk2ZjM1ODY1YjI4YzZiNjVmOGIyMDJmYjlmZDIyZTYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5o
dG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFz
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtYnJlYWsuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC93aGlsZS1sb29wLWJyZWFrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkwNjMwM2EyOGI1ZjQ0YmEx
OGJkYmMzNDRkODRmZDg4MTk5YzA5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC93aGlsZS1sb29wLWJyZWFrLmh0bWwKQEAgLTAsMCArMSwxNDYgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1Zf
UG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBW
ZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAg
Ym9vbCBiID0gdHJ1ZTsKKyAgICB1aW50IGkgPSAwOworICAgIHdoaWxlIChpIDwgMTApIHsKKyAg
ICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNo
YWRlID0gc2hhZGUgKyAxLjA7CisgICAgICAgIGkgPSBpICsgMTsKKyAgICB9CisKKyAgICByZXN1
bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0
NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChk
ZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7
c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29u
c3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBp
bnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
aW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIi
fV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRv
cik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0g
PSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBj
b25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9Owor
ICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZl
ckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5k
R3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJp
bmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Cisg
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmlu
ZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlv
bihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0
aW9uKCkgeworICAgIGRyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3doaWxlLWxvb3AtY29udGludWUtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUzYTI2NTUzMjFmMzMzYTUzZjljZDIxYWZmMDNkYjMzZDhl
MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3doaWxlLWxv
b3AtY29udGludWUtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93aGlsZS1sb29wLWNvbnRpbnVlLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFlN2RiOWFiM2UyYTM5NzIyMTc5ZjIwMWI0ZjZhNzgzNjBmOWU5ZTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hpbGUtbG9vcC1jb250aW51
ZS5odG1sCkBAIC0wLDAgKzEsMTQ1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7
CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7CisgICAgdWludCBp
ID0gMDsKKyAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAwLjEsIGkgPCAxMCkpIHsKKyAgICAg
ICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGkgPSBpICsgMTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIHNoYWRlID0gMC4wOworICAgIH0KKworICAgIHJlc3VsdC5w
b3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNo
YWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNo
YWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmlj
ZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07
CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAi
dHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZh
Y2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zv
cm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1
fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRl
ID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFk
ZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBh
dHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9
IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlu
cHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdz
OiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07
CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91
dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ig
PSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJp
emF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQs
IHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIw
Lm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzRdID0gMC4xOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAu
MTsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMTsKKworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4xOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsK
KworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAg
Y29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmlu
ZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91
cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dh
cENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBj
b25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRU
ZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNy
ZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5j
cmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAw
LCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50
OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIi
LCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9
IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCBy
ZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQ
YXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVy
UGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3Jv
dXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1
ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvd2hsc2wuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC93aGxzbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3Y2EwZGQzYmJhZjhjZDEwMTMxMmIwOGVhNzljOGNl
ODFmODZjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hs
c2wuaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0
IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IGkgOiBh
dHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKwor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0
aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CitgOworCitjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0g
e3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBhdHRyaWJ1
dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCJ9OworICAgIGNvbnN0IGlu
cHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29u
c3QgaW5wdXQxID0ge3N0cmlkZTogNCwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMV19OworICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDAsIGlucHV0MV07CisgICAgY29uc3QgdmVydGV4SW5wdXQg
PSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTog
InVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdy
b3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICog
NCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4
QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9
IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1
ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Nl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjAu
dW5tYXAoKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjEgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIxLm1hcFdy
aXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjFG
bG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOworICAgIHZlcnRleEJ1ZmZl
cjFGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsKKworICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWlu
RGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBz
d2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJl
KCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURl
ZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAx
LCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRw
dXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9y
ZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xv
ckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVz
Y3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxp
bmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjAs
IHZlcnRleEJ1ZmZlcjFdLCBbMCwgMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30s
IGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd3JvbmctYXJndW1lbnQtbGVuZ3RoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5n
dGgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyY2UzNjk0NTgxOTg1N2FmZTFkMDQxNzM0ZGMw
ZDFlMTUxMmIyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
d3JvbmctYXJndW1lbnQtbGVuZ3RoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIxIEBACisKK1BB
U1MgYml0QW5kV3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgYml0Tm90V3JvbmdBcmd1bWVudExl
bmd0aCAKK1BBU1MgYml0T3JXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBiaXRYb3JXcm9uZ0Fy
Z3VtZW50TGVuZ3RoIAorUEFTUyBkZWNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBkaXZpZGVX
cm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBkb3RPcGVyYXRvclNldHRlcldyb25nQXJndW1lbnRM
ZW5ndGggCitQQVNTIGRvdE9wZXJhdG9yV3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgZ3JlYXRl
ckVxdWFsV3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgZ3JlYXRlcldyb25nQXJndW1lbnRMZW5n
dGggCitQQVNTIGluY1dyb25nQXJndW1lbnRMZW5ndGggCitQQVNTIGluZGV4T3BlcmF0b3JTZXR0
ZXJXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBpbmRleE9wZXJhdG9yV3JvbmdBcmd1bWVudExl
bmd0aCAKK1BBU1MgbFNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgbWludXNXcm9uZ0Fy
Z3VtZW50TGVuZ3RoIAorUEFTUyBtb2R1bG9Xcm9uZ0FyZ3VtZW50TGVuZ3RoIAorUEFTUyBwbHVz
V3JvbmdBcmd1bWVudExlbmd0aCAKK1BBU1MgclNoaWZ0V3JvbmdBcmd1bWVudExlbmd0aCAKK1BB
U1MgdGltZXNXcm9uZ0FyZ3VtZW50TGVuZ3RoIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvd3JvbmctYXJndW1lbnQtbGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvd3JvbmctYXJndW1lbnQtbGVuZ3RoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVjNDE5MWIx
MGY1YzBhYWVjY2JmZjU2NDVkNDMzY2ZlNjI3NWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC93cm9uZy1hcmd1bWVudC1sZW5ndGguaHRtbApAQCAtMCwwICsx
LDM2NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8
bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5UZXN0IGludCBiaXQg
bWF0aC48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5iaXRBbmRXcm9uZ0Fy
Z3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAg
ICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0
b3ImKEZvbykgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0
IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAg
ICAgICAgIGludCBvcGVyYXRvciYoRm9vKSB7IHJldHVybiA1MzQ7IH0KKyAgICAgICAgYCk7Cisg
ICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3Ry
dWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvciYoRm9vLCBGb28sIEZvbykgeyBy
ZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5iaXROb3RX
cm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcn4oKSB7IHJldHVybiAzMjsgfQor
ICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yfihGb28s
IEZvbykgeyByZXR1cm4gNTM0OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVz
dHMuYml0T3JXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBj
aGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAg
ICAgICBpbnQgb3BlcmF0b3J8KCkgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAg
IAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZv
byB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcnwoRm9vKSB7IHJldHVybiA1MzQ7IH0KKyAg
ICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcnwoRm9vLCBG
b28sIEZvbykgeyByZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xU
ZXN0cy5iaXRYb3JXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcl4oKSB7IHJl
dHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAor
ICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9w
ZXJhdG9yXihGb28pIHsgcmV0dXJuIDUzNDsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAg
YXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yXihGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQor
ICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmRlY1dyb25nQXJndW1lbnRMZW5n
dGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yLS0oKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAg
ICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1
Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yLS0oRm9vLCBGb28pIHsgcmV0dXJu
IDc2OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMuZGl2aWRlV3JvbmdB
cmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3IvKCkgeyByZXR1cm4gMzI7IH0KKyAgICAg
ICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvci8oRm9vKSB7IHJl
dHVybiA1MzQ7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBv
cGVyYXRvci8oRm9vLCBGb28sIEZvbykgeyByZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAg
ICAgIAorfQord2hsc2xUZXN0cy5kb3RPcGVyYXRvclNldHRlcldyb25nQXJndW1lbnRMZW5ndGgg
PSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIEZvbyBvcGVyYXRvci5mb289KCkgeyBy
ZXR1cm4gNDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIEZvbyBv
cGVyYXRvci5mb289KEZvbykgeyByZXR1cm4gNDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7
IH0KKyAgICAgICAgICAgIEZvbyBvcGVyYXRvci5mb289KEZvbywgaW50LCBpbnQpIHsgcmV0dXJu
IDQyOyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMuZG90T3BlcmF0b3JX
cm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvci5mb28oKSB7IHJldHVybiA0Mjsg
fQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yLmZv
byhGb28sIGludCkgeyByZXR1cm4gNDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hs
c2xUZXN0cy5ncmVhdGVyRXF1YWxXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sK
KyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I+PSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0
IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I+PShGb28pIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7
CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I+PShGb28sIEZvbywgRm9v
KSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMu
Z3JlYXRlcldyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj4oKSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisg
ICAgICAgIGAKKyAgICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPihGb28pIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAg
IGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0K
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I+KEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIHRydWU7
IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5pbmNXcm9uZ0FyZ3VtZW50
TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIGludCBvcGVyYXRvcisrKCkgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7
CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
c3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcisrKEZvbywgRm9vKSB7IHJl
dHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLmluZGV4T3Bl
cmF0b3JTZXR0ZXJXcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2Fp
dCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdPSgpIHsg
cmV0dXJuIDQyOyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdPShpbnQpIHsgcmV0dXJuIDQy
OyB9CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcltdPShpbnQsIGludCkgeyByZXR1cm4gNDI7IH0K
KyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yW109KGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4g
NDI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5pbmRleE9wZXJhdG9y
V3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3JbXSgpIHsgcmV0dXJuIDQyOyB9
CisgICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAK
KyAgICAgICAgICAgIGludCBvcGVyYXRvcltdKGludCkgeyByZXR1cm4gNDI7IH0KKyAgICAgICAg
YCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAg
ICAgaW50IG9wZXJhdG9yW10oaW50LCBpbnQsIGludCkgeyByZXR1cm4gNDI7IH0KKyAgICAgICAg
YCk7CisgICAgICAgIAorfQord2hsc2xUZXN0cy5sU2hpZnRXcm9uZ0FyZ3VtZW50TGVuZ3RoID0g
YXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAg
ICAgIGludCBvcGVyYXRvcjw8KCkgeyByZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAg
IAorICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZv
byB7IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcjw8KEZvbykgeyByZXR1cm4gNTM0OyB9Cisg
ICAgICAgIGApOworICAgICAgICAKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAg
ICAgICAgICAgIHN0cnVjdCBGb28geyB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3I8PChGb28s
IEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxz
bFRlc3RzLm1pbnVzV3JvbmdBcmd1bWVudExlbmd0aCA9IGFzeW5jICgpID0+Cit7CisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgb3BlcmF0b3ItKCkgeyBy
ZXR1cm4gMzI7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAorICAgIGF3YWl0IGNoZWNrRmFpbCgK
KyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7IH0KKyAgICAgICAgICAgIGludCBv
cGVyYXRvci0oRm9vLCBGb28sIEZvbykgeyByZXR1cm4gNzY7IH0KKyAgICAgICAgYCk7CisgICAg
ICAgIAorfQord2hsc2xUZXN0cy5tb2R1bG9Xcm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkg
PT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBv
cGVyYXRvciUoKSB7IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdh
aXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAg
ICAgICAgICAgaW50IG9wZXJhdG9yJShGb28pIHsgcmV0dXJuIDUzNDsgfQorICAgICAgICBgKTsK
KyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAgICBz
dHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yJShGb28sIEZvbywgRm9vKSB7
IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxzbFRlc3RzLnBsdXNX
cm9uZ0FyZ3VtZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwo
CisgICAgICAgIGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcisoKSB7IHJldHVybiAzMjsgfQor
ICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisg
ICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yKyhGb28s
IEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9Cit3aGxz
bFRlc3RzLnJTaGlmdFdyb25nQXJndW1lbnRMZW5ndGggPSBhc3luYyAoKSA9PgoreworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yPj4oKSB7
IHJldHVybiAzMjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50
IG9wZXJhdG9yPj4oRm9vKSB7IHJldHVybiA1MzQ7IH0KKyAgICAgICAgYCk7CisgICAgICAgIAor
ICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgc3RydWN0IEZvbyB7
IH0KKyAgICAgICAgICAgIGludCBvcGVyYXRvcj4+KEZvbywgRm9vLCBGb28pIHsgcmV0dXJuIDc2
OyB9CisgICAgICAgIGApOworICAgICAgICAKK30KK3dobHNsVGVzdHMudGltZXNXcm9uZ0FyZ3Vt
ZW50TGVuZ3RoID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvciooKSB7IHJldHVybiAzMjsgfQorICAgICAgICBg
KTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBgCisgICAgICAgICAg
ICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJhdG9yKihGb28pIHsgcmV0dXJu
IDUzNDsgfQorICAgICAgICBgKTsKKyAgICAgICAgCisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAg
ICAgICBgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vIHsgfQorICAgICAgICAgICAgaW50IG9wZXJh
dG9yKihGb28sIEZvbywgRm9vKSB7IHJldHVybiA3NjsgfQorICAgICAgICBgKTsKKyAgICAgICAg
Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3dyb25nLXR5cGVzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNTUxOGYxYjU5ZDY0NjJmYTY2NTdiMTU1NzJhNDI4YjhkNTFjYWM3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3dyb25nLXR5cGVzLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDggQEAKKworUEFTUyBkZWNXcm9uZ1R5cGVzIAorUEFTUyBpbmNXcm9uZ1R5
cGVzIAorUEFTUyBncmVhdGVyVGhhbldyb25nUmV0dXJuVHlwZSAKK1BBU1MgZ3JlYXRlckVxdWFs
V3JvbmdSZXR1cm5UeXBlIAorUEFTUyBpbmRleFNldHRlcldpdGhNaXNtYXRjaGVkVHlwZSAKK1BB
U1Mgc2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvd3JvbmctdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC93
cm9uZy10eXBlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlMWExNjE2OTI5YWIzYjFhYjFhOGQ4MzY1MWRk
ZWM1ZjhhNzc1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
d3JvbmctdHlwZXMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9Imxv
bmciPgorPHRpdGxlPlRlc3QgaW50IGJpdCBtYXRoLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMv
d2hsc2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owor
Cit3aGxzbFRlc3RzLmRlY1dyb25nVHlwZXMgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yLS0oZmxvYXQpIHsg
cmV0dXJuIDMyOyB9CisgICAgICAgIGApOworICAgICAgICAKK30KKword2hsc2xUZXN0cy5pbmNX
cm9uZ1R5cGVzID0gYXN5bmMgKCkgPT4KK3sKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAg
IGAKKyAgICAgICAgICAgIGludCBvcGVyYXRvcisrKGZsb2F0KSB7IHJldHVybiAzMjsgfQorICAg
ICAgICBgKTsKKyAgICAgICAgCit9CisKK3dobHNsVGVzdHMuZ3JlYXRlclRoYW5Xcm9uZ1JldHVy
blR5cGUgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAor
ICAgICAgICAgICAgaW50IG9wZXJhdG9yPihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9
CisgICAgICAgIGApOworICAgICAgICAKK30KKword2hsc2xUZXN0cy5ncmVhdGVyRXF1YWxXcm9u
Z1JldHVyblR5cGUgPSBhc3luYyAoKSA9PgoreworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAg
ICAgYAorICAgICAgICAgICAgaW50IG9wZXJhdG9yPj0oaW50IGEsIGludCBiKSB7IHJldHVybiBh
ICsgYjsgfQorICAgICAgICBgKTsKKyAgICAgICAgCit9CisKK3dobHNsVGVzdHMuaW5kZXhTZXR0
ZXJXaXRoTWlzbWF0Y2hlZFR5cGUgPSBhc3luYyAoKSA9PgoreworICAgIGNoZWNrRmFpbCgKKyAg
ICAgICAgYAorICAgICAgICAgICAgZmxvYXQgb3BlcmF0b3JbXShpbnQsIHVpbnQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDUuNDM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpbnQgb3BlcmF0b3JbXT0oaW50LCB1aW50LCBpbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDU0MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9
CisKK3dobHNsVGVzdHMuc2V0dGVyV2l0aE1pc21hdGNoZWRUeXBlID0gYXN5bmMgKCkgPT4KK3sK
KyAgICBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGZsb2F0IG9wZXJhdG9yLmZv
byhpbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDUuNDM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpbnQgb3BlcmF0b3IuZm9vPShpbnQsIGludCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNTQzOworICAgICAgICAgICAgfQorICAg
ICAgICBgKTsKK30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFs
dWVzLTItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRp
YWxpemUtdmFsdWVzLTItZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY4NjlhOTc5NmYzNTg2
NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ZHJhd0JsYWNrU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwZTlkODNkYmNi
MzZiMmY1ODBjZjY5ZjdiYThkNzBlMjI4Y2QzMDcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwKQEAgLTAsMCAr
MSwxNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJq
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0
IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7
Cit9CisKK3N0cnVjdCBCYXIgeworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgeTE7CisgICAgZmxv
YXQgeTI7CisgICAgZmxvYXQgeTM7CisgICAgZmxvYXQgeTQ7CisgICAgZmxvYXQgeTU7CisgICAg
ZmxvYXQgeTY7CisgICAgZmxvYXQgeTc7CisgICAgZmxvYXQgeTg7CisgICAgZmxvYXQgeTk7Cisg
ICAgZmxvYXQgeTEwOworICAgIGZsb2F0IHkxMTsKKyAgICBmbG9hdCB5MTI7CisgICAgZmxvYXQg
eTEzOworICAgIGZsb2F0IHkxNDsKKyAgICBmbG9hdCB5MTU7CisgICAgZmxvYXQgeTE2OworICAg
IGZsb2F0IHkxNzsKKyAgICBmbG9hdCB5MTg7CisgICAgZmxvYXQgeTE5OworICAgIGZsb2F0IHky
MDsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91
dCByZXN1bHQ7CisKKyAgICBCYXIgYmFyOworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247CisgICAgcmVzdWx0LnNoYWRlID0gYmFyLnkyMDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNo
YWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVu
dFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlw
IjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxs
TW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVu
b3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xv
cldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
LCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
KyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdC
bGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1ZXMtZXhwZWN0ZWQuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zYmY4NjlhOTc5NmYzNTg2NWIyOGM2YjY1ZjhiMjAyZmI5ZmQyMmU2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3plcm8taW5pdGlhbGl6ZS12YWx1
ZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdCbGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC96ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVlcy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmExMjU2OGZhY2MxMmUzODA5MjY5OTNjNmU0MjQ1NjU1ODc2ZTdlOTIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvemVyby1pbml0aWFsaXplLXZhbHVl
cy5odG1sCkBAIC0wLDAgKzEsMTQ1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCit0aHJlYWQgZmxvYXQqIHB0cigpIHsKKyAgICBmbG9hdCBs
b2NhbDsKKyAgICByZXR1cm4gJmxvY2FsOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIHRocmVhZCBmbG9hdCogcCA9
IHB0cigpOworICAgICpwID0gMS4wOworICAgIGZsb2F0IHZhbHVlID0gKnB0cigpOyAvLyBjYWxs
aW5nIHB0cigpIHplcm8gaW5pdGlhbGl6ZXMuCisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3Np
dGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSB2YWx1ZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNo
YWRlLCAxLjApOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVu
dFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlw
IjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxs
TW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVu
b3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xv
cldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
LCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEs
IGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFth
dHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwg
YXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
KyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0
XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VC
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29k
ZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVy
XSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdC
bGFja1NxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="commit-queue"
          id="390043"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>