<?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>199142</bug_id>
          
          <creation_ts>2019-06-23 22:02:09 -0700</creation_ts>
          <short_desc>[WHLSL] Compiles should be asynchronous</short_desc>
          <delta_ts>2020-05-05 00:42:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1547254</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-23 22:02:09 -0700</bug_when>
    <thetext>Eventually, all of WebGPU should be asynchronous, but until we can get there, we can make shader compiles asynchronous. This involves two pieces: making the WHLSL compiler execute on another thread, and making the Metal shader compiler execute on another thread.

Because the MSL shader compiler involves the MTLDevice, and I don&apos;t think MTLDevices are thread safe, we probably have to start that compilation from the main thread. We can&apos;t wrap all accesses to the MTLDevice in a mutex because we can&apos;t wrap CAMetalLayer&apos;s internal uses of the MTLDevice.

Therefore, the flow probably has to work like this:
1. Kick off an asynchronous task to run the WHLSL compiler
2. When the WHLSL compiler is done, kick off a task back to the main loop to start the Metal shader compiler
3. From the main thread, use the asynchronous flavor of the Metal shader compiler.
4. In the completion callback, kick off another task back to the main thread to mark the compile as completed.

setPipeline() requires knowing the results of this compilation. However, it can&apos;t simply block on the results of the asynchronous operation, because that would cause a deadlock if it occurs during step 2 above. (The main thread can&apos;t start the MSL compiler because it&apos;s being blocked by setPipeline() waiting on the results of the MSL compiler.) Instead, the internals of setPipeline() will probably have to see whether we&apos;re in step 2 or step 4, and if we&apos;re in step 2, block until the WHLSL compiler is complete, and then synchronously invoke the Metal compiler. Then, when step 3 executes, it should detect that the MSL compiler has already been invoked, and return early. We can do something similar for step 4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547255</commentid>
    <comment_count>1</comment_count>
      <attachid>372730</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-23 22:03:40 -0700</bug_when>
    <thetext>Created attachment 372730
Use the asynchronous flavor of the MSL compiler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547256</commentid>
    <comment_count>2</comment_count>
      <attachid>372731</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-23 22:04:15 -0700</bug_when>
    <thetext>Created attachment 372731
Wrap each use of MTLDevice in a mutex</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547257</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-23 22:09:26 -0700</bug_when>
    <thetext>Making the WHLSL compiler asynchronous is important if we want to move the standard library to a standalone file in WebCore&apos;s bundle. We don&apos;t want to do synchronous IO on the main thread, so doing it on another thread is important.

Because we can block the main thread on the results of this asynchronous IO, this isn&apos;t a full solution, but having an asynchronous compile makes it at least possible to not block.

Eventually, a better solution would be to move the entire WebGPU implementation to another thread (sort of like a GPU process architecture, except executing in a thread instead of a process).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649054</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-05 00:42:36 -0700</bug_when>
    <thetext>WHLSL is no longer relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372730</attachid>
            <date>2019-06-23 22:03:40 -0700</date>
            <delta_ts>2019-06-23 22:03:40 -0700</delta_ts>
            <desc>Use the asynchronous flavor of the MSL compiler</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>7192</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDEyYWI1NzQxZTQxYzA4NGU4NjE4MDYyYTFjZGNiNTM0ZTgwM2I1M2MKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBTdW4gSnVuIDIz
IDE3OjI4OjAzIDIwMTkgLTA3MDAKCiAgICBXSVAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUmVuZGVyUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQaXBlbGluZS5oCmluZGV4IDZlMTY1
MzJhOTVkLi4zNThkYWVjMDkwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBpcGVsaW5lLmgKQEAgLTI4LDEwICsyOCwxMyBA
QAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJHUFVSZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IuaCIKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKICNpZiBVU0UoTUVUQUwpCiBP
QkpDX1BST1RPQ09MKE1UTERlcHRoU3RlbmNpbFN0YXRlKTsKQEAgLTQ1LDI2ICs0OCwzOSBAQCBj
bGFzcyBHUFVEZXZpY2U7CiB1c2luZyBQbGF0Zm9ybVJlbmRlclBpcGVsaW5lID0gTVRMUmVuZGVy
UGlwZWxpbmVTdGF0ZTsKIHVzaW5nIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmVTbWFydFB0ciA9IFJl
dGFpblB0cjxNVExSZW5kZXJQaXBlbGluZVN0YXRlPjsKIAotY2xhc3MgR1BVUmVuZGVyUGlwZWxp
bmUgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVSZW5kZXJQaXBlbGluZT4geworY2xhc3MgR1BVUmVu
ZGVyUGlwZWxpbmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R1BVUmVuZGVyUGlwZWxp
bmU+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEdQVVJlbmRlclBpcGVsaW5lPiB0cnlD
cmVhdGUoY29uc3QgR1BVRGV2aWNlJiwgY29uc3QgR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
Jik7CiAKICNpZiBVU0UoTUVUQUwpCiAgICAgTVRMRGVwdGhTdGVuY2lsU3RhdGUgKmRlcHRoU3Rl
bmNpbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aFN0ZW5jaWxTdGF0ZS5nZXQoKTsgfQog
I2VuZGlmCi0gICAgUGxhdGZvcm1SZW5kZXJQaXBlbGluZSogcGxhdGZvcm1SZW5kZXJQaXBlbGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1SZW5kZXJQaXBlbGluZS5nZXQoKTsgfQorICAg
IFBsYXRmb3JtUmVuZGVyUGlwZWxpbmUqIHBsYXRmb3JtUmVuZGVyUGlwZWxpbmUoKSBjb25zdDsK
ICAgICBHUFVQcmltaXRpdmVUb3BvbG9neSBwcmltaXRpdmVUb3BvbG9neSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVG9wb2xvZ3k7IH0KICAgICBPcHRpb25hbDxHUFVJbmRleEZvcm1hdD4g
aW5kZXhGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4Rm9ybWF0OyB9CiAKKyAgICBlbnVt
IGNsYXNzIENvbXBpbGVTdGF0dXMgeworICAgICAgICBDb21waWxpbmcsCisgICAgICAgIFN1Y2Nl
ZWRlZCwKKyAgICAgICAgRmFpbGVkCisgICAgfTsKKworICAgIENvbXBpbGVTdGF0dXMgY29tcGls
ZVN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZVN0YXR1czsgfQorCisgICAgdm9pZCBz
ZXRQbGF0Zm9ybVJlbmRlclBpcGVsaW5lKFBsYXRmb3JtUmVuZGVyUGlwZWxpbmVTbWFydFB0ciYm
KTsKKwogcHJpdmF0ZToKICNpZiBVU0UoTUVUQUwpCi0gICAgR1BVUmVuZGVyUGlwZWxpbmUoUmV0
YWluUHRyPE1UTERlcHRoU3RlbmNpbFN0YXRlPiYmLCBQbGF0Zm9ybVJlbmRlclBpcGVsaW5lU21h
cnRQdHImJiwgR1BVUHJpbWl0aXZlVG9wb2xvZ3ksIE9wdGlvbmFsPEdQVUluZGV4Rm9ybWF0Pik7
CisgICAgR1BVUmVuZGVyUGlwZWxpbmUoUmV0YWluUHRyPE1UTERlcHRoU3RlbmNpbFN0YXRlPiYm
LCBHUFVQcmltaXRpdmVUb3BvbG9neSwgT3B0aW9uYWw8R1BVSW5kZXhGb3JtYXQ+KTsKIAogICAg
IFJldGFpblB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gbV9kZXB0aFN0ZW5jaWxTdGF0ZTsKICNl
bmRpZiAvLyBVU0UoTUVUQUwpCiAgICAgUGxhdGZvcm1SZW5kZXJQaXBlbGluZVNtYXJ0UHRyIG1f
cGxhdGZvcm1SZW5kZXJQaXBlbGluZTsKICAgICBHUFVQcmltaXRpdmVUb3BvbG9neSBtX3ByaW1p
dGl2ZVRvcG9sb2d5OwogICAgIE9wdGlvbmFsPEdQVUluZGV4Rm9ybWF0PiBtX2luZGV4Rm9ybWF0
OworICAgIENvbXBpbGVTdGF0dXMgbV9jb21waWxlU3RhdHVzIHsgQ29tcGlsZVN0YXR1czo6Q29t
cGlsaW5nIH07CisgICAgbXV0YWJsZSBMb2NrIHBsYXRmb3JtUmVuZGVyUGlwZWxpbmVBbmRTdGF0
dXNMb2NrOworICAgIG11dGFibGUgQ29uZGl0aW9uIHBsYXRmb3JtUmVuZGVyUGlwZWxpbmVBbmRT
dGF0dXNDb25kaXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlw
ZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCmluZGV4IGY1NjY2MWQ2YzI4Li4yM2E1ZjkyNzI5
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29h
L0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KQEAgLTM5LDYgKzM5
LDcgQEAKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CisjaW1wb3J0IDx3
dGYvTG9ja2VyLmg+CiAjaW1wb3J0IDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW1wb3J0IDx3dGYvT3B0
aW9uYWwuaD4KIApAQCAtNDg2LDI5ICs0ODcsMjkgQEAgc3RhdGljIFJldGFpblB0cjxNVExSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3I+IGNvbnZlcnRSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IoY28K
ICAgICByZXR1cm4gbXRsRGVzY3JpcHRvcjsKIH0KIAotc3RhdGljIFJldGFpblB0cjxNVExSZW5k
ZXJQaXBlbGluZVN0YXRlPiB0cnlDcmVhdGVNdGxSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnN0IGNo
YXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBjb25zdCBHUFVEZXZpY2UmIGRldmljZSkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorc3RhdGljIGJvb2wgdHJ5Q3JlYXRlTXRsUmVuZGVyUGlwZWxpbmVTdGF0ZShjb25zdCBj
aGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIFQmJiBjYWxsYmFjaykKIHsK
ICAgICBpZiAoIWRldmljZS5wbGF0Zm9ybURldmljZSgpKSB7CiAgICAgICAgIExPRyhXZWJHUFUs
ICJHUFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZSgpOiBJbnZhbGlkIEdQVURldmljZSEiKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICBhdXRvIG10bERlc2NyaXB0b3IgPSBjb252ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
KGZ1bmN0aW9uTmFtZSwgZGVzY3JpcHRvciwgZGV2aWNlKTsKICAgICBpZiAoIW10bERlc2NyaXB0
b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBSZXRhaW5QdHI8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4gcGlwZWxpbmU7CiAKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAg
ICBwaXBlbGluZSA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld1JlbmRlclBp
cGVsaW5lU3RhdGVXaXRoRGVzY3JpcHRvcjptdGxEZXNjcmlwdG9yLmdldCgpIGVycm9yOiZlcnJv
cl0pOwotICAgIGlmICghcGlwZWxpbmUpCi0gICAgICAgIExPRyhXZWJHUFUsICIlczogJXMhIiwg
ZnVuY3Rpb25OYW1lLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nKTsKKyAg
ICBbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3UmVuZGVyUGlwZWxpbmVTdGF0ZVdpdGhEZXNj
cmlwdG9yOm10bERlc2NyaXB0b3IuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZDxNVExSZW5k
ZXJQaXBlbGluZVN0YXRlPiByZW5kZXJQaXBlbGluZVN0YXRlLCBOU0Vycm9yICopIHsKKyAgICAg
ICAgY2FsbGJhY2socmVuZGVyUGlwZWxpbmVTdGF0ZSk7CisgICAgfV07CiAKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgcmV0dXJuIHBpcGVsaW5lOworICAgIHJldHVybiB0
cnVlOwogfQogCiBSZWZQdHI8R1BVUmVuZGVyUGlwZWxpbmU+IEdQVVJlbmRlclBpcGVsaW5lOjp0
cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVVJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTUyNywxNiArNTI4LDQyIEBAIFJlZlB0cjxHUFVS
ZW5kZXJQaXBlbGluZT4gR1BVUmVuZGVyUGlwZWxpbmU6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZp
Y2UmIGRldmljZSwKIAogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4Mzg3IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yIGlzbid0
IGltcGxlbWVudGVkIHlldCBmb3IgV0hMU0wgY29tcGlsZXIuCiAKLSAgICBhdXRvIHBpcGVsaW5l
ID0gdHJ5Q3JlYXRlTXRsUmVuZGVyUGlwZWxpbmVTdGF0ZShmdW5jdGlvbk5hbWUsIGRlc2NyaXB0
b3IsIGRldmljZSk7Ci0gICAgaWYgKCFwaXBlbGluZSkKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0
UmVmKG5ldyBHUFVSZW5kZXJQaXBlbGluZShXVEZNb3ZlKGRlcHRoU3RlbmNpbCksIGRlc2NyaXB0
b3IucHJpbWl0aXZlVG9wb2xvZ3ksIGRlc2NyaXB0b3IudmVydGV4SW5wdXQuaW5kZXhGb3JtYXQp
KTsKKworICAgIGF1dG8gc3VjY2VzcyA9IHRyeUNyZWF0ZU10bFJlbmRlclBpcGVsaW5lU3RhdGUo
ZnVuY3Rpb25OYW1lLCBkZXNjcmlwdG9yLCBkZXZpY2UsIFs9XShSZXRhaW5QdHI8TVRMUmVuZGVy
UGlwZWxpbmVTdGF0ZT4gbXRsUmVuZGVyUGlwZWxpbmVTdGF0ZSkgeworICAgICAgICByZXN1bHQt
PnNldFBsYXRmb3JtUmVuZGVyUGlwZWxpbmUoV1RGTW92ZShtdGxSZW5kZXJQaXBlbGluZVN0YXRl
KSk7CisgICAgfSk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BVUmVuZGVyUGlwZWxpbmUoV1RGTW92ZShkZXB0
aFN0ZW5jaWwpLCBXVEZNb3ZlKHBpcGVsaW5lKSwgZGVzY3JpcHRvci5wcmltaXRpdmVUb3BvbG9n
eSwgZGVzY3JpcHRvci52ZXJ0ZXhJbnB1dC5pbmRleEZvcm1hdCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgR1BVUmVuZGVyUGlwZWxpbmU6OnNldFBsYXRmb3JtUmVuZGVyUGlwZWxp
bmUoUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+JiYgbXRsUmVuZGVyUGlwZWxpbmVT
dGF0ZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHBsYXRmb3JtUmVuZGVyUGlwZWxp
bmVBbmRTdGF0dXNMb2NrKTsKKyAgICBBU1NFUlQobV9jb21waWxlU3RhdHVzID09IENvbXBpbGVT
dGF0dXM6OkNvbXBpbGluZyk7CisgICAgbV9wbGF0Zm9ybVJlbmRlclBpcGVsaW5lID0gV1RGTW92
ZShtdGxSZW5kZXJQaXBlbGluZVN0YXRlKTsKKyAgICBpZiAobV9wbGF0Zm9ybVJlbmRlclBpcGVs
aW5lKQorICAgICAgICBtX2NvbXBpbGVTdGF0dXMgPSBDb21waWxlU3RhdHVzOjpTdWNjZWVkZWQ7
CisgICAgZWxzZQorICAgICAgICBtX2NvbXBpbGVTdGF0dXMgPSBDb21waWxlU3RhdHVzOjpGYWls
ZWQ7CisgICAgcGxhdGZvcm1SZW5kZXJQaXBlbGluZUFuZFN0YXR1c0NvbmRpdGlvbi5ub3RpZnlP
bmUoKTsKK30KKworTVRMUmVuZGVyUGlwZWxpbmVTdGF0ZSAqR1BVUmVuZGVyUGlwZWxpbmU6OnBs
YXRmb3JtUmVuZGVyUGlwZWxpbmUoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2socGxhdGZvcm1SZW5kZXJQaXBlbGluZUFuZFN0YXR1c0xvY2spOworICAgIGF1dG8gc3VjY2Vz
cyA9IHBsYXRmb3JtUmVuZGVyUGlwZWxpbmVBbmRTdGF0dXNDb25kaXRpb24ud2FpdFVudGlsKHBs
YXRmb3JtUmVuZGVyUGlwZWxpbmVBbmRTdGF0dXNMb2NrLCBDb25kaXRpb246OlRpbWU6OmluZmlu
aXR5KCksIFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIG1fY29tcGlsZVN0YXR1cyAhPSBDb21waWxl
U3RhdHVzOjpDb21waWxpbmc7CisgICAgfSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVJlbmRlclBpcGVsaW5lLmdldCgp
OwogfQogCi1HUFVSZW5kZXJQaXBlbGluZTo6R1BVUmVuZGVyUGlwZWxpbmUoUmV0YWluUHRyPE1U
TERlcHRoU3RlbmNpbFN0YXRlPiYmIGRlcHRoU3RlbmNpbCwgUmV0YWluUHRyPE1UTFJlbmRlclBp
cGVsaW5lU3RhdGU+JiYgcGlwZWxpbmUsIEdQVVByaW1pdGl2ZVRvcG9sb2d5IHRvcG9sb2d5LCBP
cHRpb25hbDxHUFVJbmRleEZvcm1hdD4gZm9ybWF0KQorR1BVUmVuZGVyUGlwZWxpbmU6OkdQVVJl
bmRlclBpcGVsaW5lKFJldGFpblB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4mJiBkZXB0aFN0ZW5j
aWwsIEdQVVByaW1pdGl2ZVRvcG9sb2d5IHRvcG9sb2d5LCBPcHRpb25hbDxHUFVJbmRleEZvcm1h
dD4gZm9ybWF0KQogICAgIDogbV9kZXB0aFN0ZW5jaWxTdGF0ZShXVEZNb3ZlKGRlcHRoU3RlbmNp
bCkpCi0gICAgLCBtX3BsYXRmb3JtUmVuZGVyUGlwZWxpbmUoV1RGTW92ZShwaXBlbGluZSkpCiAg
ICAgLCBtX3ByaW1pdGl2ZVRvcG9sb2d5KHRvcG9sb2d5KQogICAgICwgbV9pbmRleEZvcm1hdChm
b3JtYXQpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372731</attachid>
            <date>2019-06-23 22:04:15 -0700</date>
            <delta_ts>2019-06-23 22:04:15 -0700</delta_ts>
            <desc>Wrap each use of MTLDevice in a mutex</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>32092</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGJlMWM2NjY4NDA4MDk0MTFiOGI2MDE1MTE5ZGQ1MDk3ODlmMjVjN2QKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBTdW4gSnVuIDIz
IDE5OjAwOjExIDIwMTkgLTA3MDAKCiAgICB0aHJlYWRzYWZlIHdyYXBwZXIKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGEyODg3
MDNiYTcuLmIzZmZiOTBmNWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzcxLDYgKzYzNzEsNyBAQAogCQkxQkU1QkZDMTFE
NTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnN0cmFpbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUMwMTA2RkUxOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hT
dHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0
Qm94U3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAxMDZGRjE5MjU5
NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElubGluZVRleHRCb3hTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQzA2N0UxODIyQzA1NTA4MDA2NjBCODggLyogR1BVVGhyZWFkU2FmZVBsYXRmb3Jt
RGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVRocmVhZFNhZmVQbGF0Zm9ybURldmljZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzA5MzlFODFBMTNFMTI5MDBCNzg4RTUgLyog
Q2FjaGVkU1ZHRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
YWNoZWRTVkdGb250LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwOTM5RTkx
QTEzRTEyOTAwQjc4OEU1IC8qIENhY2hlZFNWR0ZvbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FjaGVkU1ZHRm9udC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzA5RDA0QjFFMzFDMzI4MDA3MjVGMTggLyogUEFMLnhjb2RlcHJvaiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJ3cmFwcGVyLnBiLXByb2plY3Qi
OyBuYW1lID0gUEFMLnhjb2RlcHJvajsgcGF0aCA9IFBBTC9QQUwueGNvZGVwcm9qOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgzNDEsNiArMTgzNDIsNyBAQAogCQkJCTQ5ODc3MEQ4
MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmggKi8sCiAJCQkJNDk4NzcwRDkxMjQyQzUzNTAw
MjIyNkJBIC8qIFRpbGluZ0RhdGEuY3BwICovLAogCQkJCTQ5ODc3MERBMTI0MkM1MzUwMDIyMjZC
QSAvKiBUaWxpbmdEYXRhLmggKi8sCisJCQkJMUMwNjdFMTgyMkMwNTUwODAwNjYwQjg4IC8qIEdQ
VVRocmVhZFNhZmVQbGF0Zm9ybURldmljZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBncHU7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCmluZGV4IDQyNTA4YmM3NjE3Li4wNjVjOGYwZjdhYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIu
aApAQCAtMTA4LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIEdQVUJ1ZmZlcihQ
bGF0Zm9ybUJ1ZmZlclNtYXJ0UHRyJiYsIFJlZjxHUFVEZXZpY2U+JiYsIHNpemVfdCwgT3B0aW9u
U2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4sIGJvb2wpOwotICAgIHN0YXRpYyBib29sIHZhbGlk
YXRlQnVmZmVyVXNhZ2UoY29uc3QgR1BVRGV2aWNlJiwgT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdl
OjpGbGFncz4pOworICAgIHN0YXRpYyBib29sIHZhbGlkYXRlQnVmZmVyVXNhZ2UoT3B0aW9uU2V0
PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4pOwogCiAgICAgSlNDOjpBcnJheUJ1ZmZlciogc3RhZ2lu
Z0J1ZmZlckZvclJlYWQoKTsKICAgICBKU0M6OkFycmF5QnVmZmVyKiBzdGFnaW5nQnVmZmVyRm9y
V3JpdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVE
ZXZpY2UuaAppbmRleCBhNzEzOTU0MWQwYi4uMzkzMzFkM2FlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZpY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmgKQEAgLTI5LDYgKzI5LDgg
QEAKIAogI2luY2x1ZGUgIkdQVVF1ZXVlLmgiCiAjaW5jbHVkZSAiR1BVU3dhcENoYWluLmgiCisj
aW5jbHVkZSAiR1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlLmgiCisjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtODAsMTQgKzgyLDE2IEBAIHB1Ymxp
YzoKIAogICAgIFJlZlB0cjxHUFVRdWV1ZT4gdHJ5R2V0UXVldWUoKSBjb25zdDsKICAgICAKLSAg
ICBQbGF0Zm9ybURldmljZSogcGxhdGZvcm1EZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX3BsYXRm
b3JtRGV2aWNlLmdldCgpOyB9CisgICAgY29uc3QgR1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNl
JiBwbGF0Zm9ybURldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EZXZpY2U7IH0KKyAg
ICBHUFVUaHJlYWRTYWZlUGxhdGZvcm1EZXZpY2UmIHBsYXRmb3JtRGV2aWNlKCkgeyByZXR1cm4g
bV9wbGF0Zm9ybURldmljZTsgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIHdpdGhQ
bGF0Zm9ybURldmljZShUJiYgY2FsbGJhY2spIGNvbnN0IHsgbV9wbGF0Zm9ybURldmljZS0+d2l0
aFBsYXRmb3JtRGV2aWNlKGNhbGxiYWNrKTsgfQogICAgIEdQVVN3YXBDaGFpbiogc3dhcENoYWlu
KCkgY29uc3QgeyByZXR1cm4gbV9zd2FwQ2hhaW4uZ2V0KCk7IH0KICAgICB2b2lkIHNldFN3YXBD
aGFpbihSZWZQdHI8R1BVU3dhcENoYWluPiYmKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBH
UFVEZXZpY2UoUGxhdGZvcm1EZXZpY2VTbWFydFB0ciYmKTsKIAotICAgIFBsYXRmb3JtRGV2aWNl
U21hcnRQdHIgbV9wbGF0Zm9ybURldmljZTsKKyAgICBSZWY8R1BVVGhyZWFkU2FmZVBsYXRmb3Jt
RGV2aWNlPiBtX3BsYXRmb3JtRGV2aWNlOwogICAgIG11dGFibGUgUmVmUHRyPEdQVVF1ZXVlPiBt
X3F1ZXVlOwogICAgIFJlZlB0cjxHUFVTd2FwQ2hhaW4+IG1fc3dhcENoYWluOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVUaHJlYWRTYWZl
UGxhdGZvcm1EZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVUaHJlYWRTYWZlUGxhdGZvcm1EZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZGE1NTg4YWY3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlLmgKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworT0JKQ19QUk9UT0NPTChNVExE
ZXZpY2UpOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBQbGF0Zm9ybURldmlj
ZSA9IE1UTERldmljZTsKK3VzaW5nIFBsYXRmb3JtRGV2aWNlU21hcnRQdHIgPSBSZXRhaW5QdHI8
TVRMRGV2aWNlPjsKKworY2xhc3MgR1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEdQVVRocmVhZFNhZmVQbGF0Zm9ybURldmljZT4geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8R1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlPiBjcmVhdGUo
UGxhdGZvcm1EZXZpY2VTbWFydFB0ciYmIHBsYXRmb3JtRGV2aWNlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHBsYXRmb3JtRGV2aWNlKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1BV
VGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlKFdURk1vdmUocGxhdGZvcm1EZXZpY2UpKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCB3aXRoUGxhdGZvcm1EZXZp
Y2UoVCYmIGNhbGxiYWNrKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworICAgICAgICBjYWxsYmFjayhtX3BsYXRmb3JtRGV2aWNlLmdldCgpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgR1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlKFBsYXRm
b3JtRGV2aWNlU21hcnRQdHImJiBwbGF0Zm9ybURldmljZSkKKyAgICAgICAgOiBtX3BsYXRmb3Jt
RGV2aWNlKFdURk1vdmUocGxhdGZvcm1EZXZpY2UpKQorICAgIHsKKyAgICB9CisKKyAgICBQbGF0
Zm9ybURldmljZVNtYXJ0UHRyIG1fcGxhdGZvcm1EZXZpY2U7CisgICAgbXV0YWJsZSBMb2NrIG1f
bG9jazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KaW5kZXggODAy
MDE2MzU1NGUuLjE5MDRlZmI4MGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExheW91
dE1ldGFsLm1tCkBAIC02MywxMiArNjMsMTUgQEAgc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRU
b0FycmF5KEFyZ3VtZW50QXJyYXkmIGFycmF5LCBSZXRhaW5QdHI8TVRMQXJndW1lbnREZXMKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE1UTEFy
Z3VtZW50RW5jb2Rlcj4gdHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVyKGNvbnN0IEdQVURldmlj
ZSYgZGV2aWNlLCBBcmd1bWVudEFycmF5IGFycmF5KQorc3RhdGljIFJldGFpblB0cjxNVExBcmd1
bWVudEVuY29kZXI+IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2Rlcihjb25zdCBHUFVUaHJlYWRT
YWZlUGxhdGZvcm1EZXZpY2UmIHBsYXRmb3JtRGV2aWNlLCBBcmd1bWVudEFycmF5IGFycmF5KQog
ewogICAgIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+IGVuY29kZXI7CiAKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgZW5jb2RlciA9IGFkb3B0TlMoW2RldmljZS5w
bGF0Zm9ybURldmljZSgpIG5ld0FyZ3VtZW50RW5jb2RlcldpdGhBcmd1bWVudHM6YXJyYXkuZ2V0
KCldKTsKKworICAgIHBsYXRmb3JtRGV2aWNlLndpdGhQbGF0Zm9ybURldmljZShbJl0oTVRMRGV2
aWNlICpwbGF0Zm9ybURldmljZSkgeworICAgICAgICBlbmNvZGVyID0gYWRvcHROUyhbcGxhdGZv
cm1EZXZpY2UgbmV3QXJndW1lbnRFbmNvZGVyV2l0aEFyZ3VtZW50czphcnJheS5nZXQoKV0pOwor
ICAgIH0pOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgaWYgKCFlbmNvZGVy
KSB7CiAgICAgICAgIExPRyhXZWJHUFUsICJHUFVCaW5kR3JvdXBMYXlvdXQ6OnRyeUNyZWF0ZSgp
OiBVbmFibGUgdG8gY3JlYXRlIE1UTEFyZ3VtZW50RW5jb2RlciEiKTsKQEAgLTkxLDExICs5NCw2
IEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMQXJndW1lbnREZXNjcmlwdG9yPiBhcmd1bWVudERlc2Ny
aXB0b3IoTVRMRGF0YVR5cGUgZGF0YVR5cGUsCiAKIFJlZlB0cjxHUFVCaW5kR3JvdXBMYXlvdXQ+
IEdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBj
b25zdCBHUFVCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGlm
ICghZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJp
bmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKCk6IEludmFsaWQgTVRMRGV2aWNlISIpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBBcmd1bWVudEFycmF5IHZlcnRleEFyZ3Ms
IGZyYWdtZW50QXJncywgY29tcHV0ZUFyZ3MsIHZlcnRleExlbmd0aHMsIGZyYWdtZW50TGVuZ3Ro
cywgY29tcHV0ZUxlbmd0aHM7CiAgICAgQmluZGluZ3NNYXBUeXBlIGJpbmRpbmdzTWFwOwogCkBA
IC0xNjUsMTEgKzE2MywxMSBAQCBSZWZQdHI8R1BVQmluZEdyb3VwTGF5b3V0PiBHUFVCaW5kR3Jv
dXBMYXlvdXQ6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZQogCiAgICAgUmV0YWlu
UHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4LCBmcmFnbWVudCwgY29tcHV0ZTsKIAotICAg
IGlmICh2ZXJ0ZXhBcmdzICYmICEodmVydGV4ID0gdHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVy
KGRldmljZSwgdmVydGV4QXJncykpKQorICAgIGlmICh2ZXJ0ZXhBcmdzICYmICEodmVydGV4ID0g
dHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVyKGRldmljZS5wbGF0Zm9ybURldmljZSgpLCB2ZXJ0
ZXhBcmdzKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChmcmFnbWVudEFyZ3Mg
JiYgIShmcmFnbWVudCA9IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UsIGZyYWdt
ZW50QXJncykpKQorICAgIGlmIChmcmFnbWVudEFyZ3MgJiYgIShmcmFnbWVudCA9IHRyeUNyZWF0
ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSwgZnJhZ21lbnRBcmdz
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChjb21wdXRlQXJncyAmJiAhKGNv
bXB1dGUgPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2aWNlLCBjb21wdXRlQXJncykp
KQorICAgIGlmIChjb21wdXRlQXJncyAmJiAhKGNvbXB1dGUgPSB0cnlDcmVhdGVNdGxBcmd1bWVu
dEVuY29kZXIoZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCksIGNvbXB1dGVBcmdzKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVCaW5kR3JvdXBM
YXlvdXQoV1RGTW92ZShiaW5kaW5nc01hcCksIFdURk1vdmUodmVydGV4KSwgV1RGTW92ZShmcmFn
bWVudCksIFdURk1vdmUoY29tcHV0ZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQppbmRleCA1
OWEwN2ZmOWNlYi4uODU1YWU3MjRmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0KQEAgLTQy
LDEzICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdGV4cHIgYXV0byBy
ZWFkT25seUZsYWdzID0gT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4geyBHUFVCdWZm
ZXJVc2FnZTo6RmxhZ3M6OkluZGV4LCBHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlZlcnRleCwgR1BV
QnVmZmVyVXNhZ2U6OkZsYWdzOjpVbmlmb3JtLCBHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlRyYW5z
ZmVyU291cmNlIH07CiAKIAotYm9vbCBHUFVCdWZmZXI6OnZhbGlkYXRlQnVmZmVyVXNhZ2UoY29u
c3QgR1BVRGV2aWNlJiBkZXZpY2UsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+IHVz
YWdlKQorYm9vbCBHUFVCdWZmZXI6OnZhbGlkYXRlQnVmZmVyVXNhZ2UoT3B0aW9uU2V0PEdQVUJ1
ZmZlclVzYWdlOjpGbGFncz4gdXNhZ2UpCiB7Ci0gICAgaWYgKCFkZXZpY2UucGxhdGZvcm1EZXZp
Y2UoKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjp0cnlDcmVhdGUoKTogSW52
YWxpZCBHUFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBp
ZiAodXNhZ2UuY29udGFpbnNBbGwoeyBHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6Ok1hcFdyaXRlLCBH
UFVCdWZmZXJVc2FnZTo6RmxhZ3M6Ok1hcFJlYWQgfSkpIHsKICAgICAgICAgTE9HKFdlYkdQVSwg
IkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKCk6IEJ1ZmZlciBjYW5ub3QgaGF2ZSBib3RoIE1BUF9SRUFE
IGFuZCBNQVBfV1JJVEUgdXNhZ2UhIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTcyLDcg
KzY3LDcgQEAgUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVmZmVyOjp0cnlDcmVhdGUoUmVmPEdQVURl
dmljZT4mJiBkZXZpY2UsIGNvbnN0IEdQVUJ1ZmZlckQKICAgICB9CiAKICAgICBhdXRvIHVzYWdl
ID0gT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz46OmZyb21SYXcoZGVzY3JpcHRvci51
c2FnZSk7Ci0gICAgaWYgKCF2YWxpZGF0ZUJ1ZmZlclVzYWdlKGRldmljZS5nZXQoKSwgdXNhZ2Up
KQorICAgIGlmICghdmFsaWRhdGVCdWZmZXJVc2FnZSh1c2FnZSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtOTcsNyArOTIsOSBAQCBSZWZQdHI8R1BV
QnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0ZShSZWY8R1BVRGV2aWNlPiYmIGRldmljZSwgY29u
c3QgR1BVQnVmZmVyRAogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAg
bXRsQnVmZmVyID0gYWRvcHROUyhbZGV2aWNlLT5wbGF0Zm9ybURldmljZSgpIG5ld0J1ZmZlcldp
dGhMZW5ndGg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzY3JpcHRvci5zaXplKSBvcHRpb25z
OnJlc291cmNlT3B0aW9uc10pOworICAgIGRldmljZS0+d2l0aFBsYXRmb3JtRGV2aWNlKFsmXShN
VExEZXZpY2UgKnBsYXRmb3JtRGV2aWNlKSB7CisgICAgICAgIG10bEJ1ZmZlciA9IGFkb3B0TlMo
W3BsYXRmb3JtRGV2aWNlIG5ld0J1ZmZlcldpdGhMZW5ndGg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdl
cj4oZGVzY3JpcHRvci5zaXplKSBvcHRpb25zOnJlc291cmNlT3B0aW9uc10pOworICAgIH0pOwog
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjMwLDcgKzIyNyw5IEBAIHZv
aWQgR1BVQnVmZmVyOjpjb3B5U3RhZ2luZ0J1ZmZlclRvR1BVKCkKIAogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKICAgICAvLyBHUFVCdWZmZXIgY3JlYXRpb24gdmFsaWRhdGlvbiBl
bnN1cmVzIG1fYnl0ZVNpemUgZml0cyBpbiBOU1VJbnRlZ2VyLgotICAgIHN0YWdpbmdNdGxCdWZm
ZXIgPSBhZG9wdE5TKFttX2RldmljZS0+cGxhdGZvcm1EZXZpY2UoKSBuZXdCdWZmZXJXaXRoTGVu
Z3RoOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1fYnl0ZUxlbmd0aCkgb3B0aW9uczpNVExSZXNv
dXJjZUNQVUNhY2hlTW9kZURlZmF1bHRDYWNoZV0pOworICAgIG1fZGV2aWNlLT53aXRoUGxhdGZv
cm1EZXZpY2UoWyZdKE1UTERldmljZSAqcGxhdGZvcm1EZXZpY2UpIHsKKyAgICAgICAgc3RhZ2lu
Z010bEJ1ZmZlciA9IGFkb3B0TlMoW3BsYXRmb3JtRGV2aWNlIG5ld0J1ZmZlcldpdGhMZW5ndGg6
c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4obV9ieXRlTGVuZ3RoKSBvcHRpb25zOk1UTFJlc291cmNl
Q1BVQ2FjaGVNb2RlRGVmYXVsdENhY2hlXSk7CisgICAgfSk7CiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIAogICAgIGlmICghc3RhZ2luZ010bEJ1ZmZlcikgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZm
ZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVDb21tYW5kQnVmZmVyTWV0YWwubW0KaW5kZXggNDNhMjY1MGU4MzMuLjE1MDkwMzFlMDIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
Q29tbWFuZEJ1ZmZlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVDb21tYW5kQnVmZmVyTWV0YWwubW0KQEAgLTQxLDExICs0MSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVmUHRyPEdQVUNvbW1hbmRCdWZmZXI+IEdQVUNvbW1h
bmRCdWZmZXI6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSkKIHsKLSAgICBpZiAo
IWRldmljZS5wbGF0Zm9ybURldmljZSgpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVDb21t
YW5kQnVmZmVyOjpjcmVhdGUoKTogSW52YWxpZCBHUFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQogICAgIGF1dG8gZ3B1Q29tbWFuZFF1ZXVlID0gZGV2aWNlLnRy
eUdldFF1ZXVlKCk7CiAgICAgaWYgKCFncHVDb21tYW5kUXVldWUpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCmluZGV4IGU4
MWY3Y2FkZDI3Li5iMTFmYjNjYzM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxp
bmVNZXRhbC5tbQpAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgYm9vbCB0cnlTZXRNZXRhbEZ1bmN0
aW9ucyhjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIE1UTExpYnJhcnkgKmNvbQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGltZW5z
aW9ucz4gdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29u
c3QgR1BVUGlwZWxpbmVTdGFnZURlc2NyaXB0b3ImIGNvbXB1dGVTdGFnZSwgY29uc3QgR1BVRGV2
aWNlJiBkZXZpY2UsIE1UTENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IqIG10bERlc2NyaXB0b3Is
IE9wdGlvbmFsPFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiYgd2hsc2xEZXNjcmlw
dG9yKQorc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGltZW5zaW9ucz4gdHJ5U2V0RnVu
Y3Rpb25zKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgR1BVUGlwZWxpbmVT
dGFnZURlc2NyaXB0b3ImIGNvbXB1dGVTdGFnZSwgY29uc3QgR1BVVGhyZWFkU2FmZVBsYXRmb3Jt
RGV2aWNlJiBwbGF0Zm9ybURldmljZSwgTVRMQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciogbXRs
RGVzY3JpcHRvciwgT3B0aW9uYWw8V0hMU0w6OkNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3I+JiB3
aGxzbERlc2NyaXB0b3IpCiB7CiAjaWYgTE9HX0RJU0FCTEVECiAgICAgVU5VU0VEX1BBUkFNKGZ1
bmN0aW9uTmFtZSk7CkBAIC05MCw3ICs5MCw5IEBAIHN0YXRpYyBPcHRpb25hbDxXSExTTDo6Q29t
cHV0ZURpbWVuc2lvbnM+IHRyeVNldEZ1bmN0aW9ucyhjb25zdCBjaGFyKiBjb25zdCBmdW5jCiAg
ICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICAgICAgY29tcHV0ZUxpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxh
dGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1bHQtPm1l
dGFsU291cmNlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOworICAgICAgICBwbGF0Zm9ybURl
dmljZS53aXRoUGxhdGZvcm1EZXZpY2UoWyZdKE1UTERldmljZSAqcGxhdGZvcm1EZXZpY2UpIHsK
KyAgICAgICAgICAgIGNvbXB1dGVMaWJyYXJ5ID0gYWRvcHROUyhbcGxhdGZvcm1EZXZpY2UgbmV3
TGlicmFyeVdpdGhTb3VyY2U6d2hsc2xDb21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZSBvcHRpb25z
Om5pbCBlcnJvcjomZXJyb3JdKTsKKyAgICAgICAgfSk7CiAgICAgICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBpZiAoIWNvbXB1dGVMaWJyYXJ5
KQpAQCAtMTE0LDcgKzExNiw3IEBAIHN0cnVjdCBDb252ZXJ0UmVzdWx0IHsKICAgICBSZXRhaW5Q
dHI8TVRMQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcj4gcGlwZWxpbmVEZXNjcmlwdG9yOwogICAg
IFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9uczsKIH07Ci1zdGF0aWMg
T3B0aW9uYWw8Q29udmVydFJlc3VsdD4gY29udmVydENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Io
Y29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBjb25zdCBHUFVDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBjb25zdCBHUFVEZXZpY2UmIGRldmljZSkKK3N0YXRpYyBP
cHRpb25hbDxDb252ZXJ0UmVzdWx0PiBjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcihj
b25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVUNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGNvbnN0IEdQVVRocmVhZFNhZmVQbGF0Zm9ybURldmljZSYg
cGxhdGZvcm1EZXZpY2UpCiB7CiAgICAgUmV0YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3I+IG10bERlc2NyaXB0b3I7CiAKQEAgLTE0Niw3ICsxNDgsNyBAQCBzdGF0aWMgT3B0aW9u
YWw8Q29udmVydFJlc3VsdD4gY29udmVydENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IoY29uc3Qg
Y2hhciogY29ucwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY29tcHV0ZURpbWVu
c2lvbnMgPSB0cnlTZXRGdW5jdGlvbnMoZnVuY3Rpb25OYW1lLCBjb21wdXRlU3RhZ2UsIGRldmlj
ZSwgbXRsRGVzY3JpcHRvci5nZXQoKSwgd2hsc2xEZXNjcmlwdG9yKSkKKyAgICBpZiAoYXV0byBj
b21wdXRlRGltZW5zaW9ucyA9IHRyeVNldEZ1bmN0aW9ucyhmdW5jdGlvbk5hbWUsIGNvbXB1dGVT
dGFnZSwgcGxhdGZvcm1EZXZpY2UsIG10bERlc2NyaXB0b3IuZ2V0KCksIHdobHNsRGVzY3JpcHRv
cikpCiAgICAgICAgIHJldHVybiB7eyBtdGxEZXNjcmlwdG9yLCAqY29tcHV0ZURpbWVuc2lvbnMg
fX07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTU2LDE0ICsxNTgsOSBAQCBzdHJ1
Y3QgQ3JlYXRlUmVzdWx0IHsKICAgICBSZXRhaW5QdHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+
IHBpcGVsaW5lU3RhdGU7CiAgICAgV0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1l
bnNpb25zOwogfTsKLXN0YXRpYyBPcHRpb25hbDxDcmVhdGVSZXN1bHQ+IHRyeUNyZWF0ZU1UTENv
bXB1dGVQaXBlbGluZVN0YXRlKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3Qg
R1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCitzdGF0aWMgT3B0aW9uYWw8Q3JlYXRlUmVzdWx0PiB0cnlDcmVhdGVNVExDb21w
dXRlUGlwZWxpbmVTdGF0ZShjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQ
VVRocmVhZFNhZmVQbGF0Zm9ybURldmljZSYgcGxhdGZvcm1EZXZpY2UsIGNvbnN0IEdQVUNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKCFkZXZpY2UucGxh
dGZvcm1EZXZpY2UoKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0ZVBpcGVsaW5l
Ojp0cnlDcmVhdGUoKTogSW52YWxpZCBHUFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgYXV0byBjb252ZXJ0UmVzdWx0ID0gY29udmVydENvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IoZnVuY3Rpb25OYW1lLCBkZXNjcmlwdG9yLCBkZXZpY2UpOwor
ICAgIGF1dG8gY29udmVydFJlc3VsdCA9IGNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KGZ1bmN0aW9uTmFtZSwgZGVzY3JpcHRvciwgcGxhdGZvcm1EZXZpY2UpOwogICAgIGlmICghY29u
dmVydFJlc3VsdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBBU1NFUlQoY29u
dmVydFJlc3VsdC0+cGlwZWxpbmVEZXNjcmlwdG9yKTsKQEAgLTE3NCw3ICsxNzEsOSBAQCBzdGF0
aWMgT3B0aW9uYWw8Q3JlYXRlUmVzdWx0PiB0cnlDcmVhdGVNVExDb21wdXRlUGlwZWxpbmVTdGF0
ZShjb25zdCBjaGFyKiBjb25zdAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAog
ICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIHBpcGVsaW5lID0gYWRvcHROUyhbZGV2aWNl
LnBsYXRmb3JtRGV2aWNlKCkgbmV3Q29tcHV0ZVBpcGVsaW5lU3RhdGVXaXRoRGVzY3JpcHRvcjpt
dGxEZXNjcmlwdG9yLmdldCgpIG9wdGlvbnM6TVRMUGlwZWxpbmVPcHRpb25Ob25lIHJlZmxlY3Rp
b246bmlsIGVycm9yOiZlcnJvcl0pOworICAgIHBsYXRmb3JtRGV2aWNlLndpdGhQbGF0Zm9ybURl
dmljZShbJl0oTVRMRGV2aWNlICpwbGF0Zm9ybURldmljZSkgeworICAgICAgICBwaXBlbGluZSA9
IGFkb3B0TlMoW3BsYXRmb3JtRGV2aWNlIG5ld0NvbXB1dGVQaXBlbGluZVN0YXRlV2l0aERlc2Ny
aXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKSBvcHRpb25zOk1UTFBpcGVsaW5lT3B0aW9uTm9uZSBy
ZWZsZWN0aW9uOm5pbCBlcnJvcjomZXJyb3JdKTsKKyAgICB9KTsKICAgICBpZiAoIXBpcGVsaW5l
KSB7CiAgICAgICAgIExPRyhXZWJHUFUsICJHUFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZSgp
OiAlcyEiLCBlcnJvciA/IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uLlVURjhTdHJpbmcgOiAi
VW5hYmxlIHRvIGNyZWF0ZSBNVExDb21wdXRlUGlwZWxpbmVTdGF0ZSEiKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKQEAgLTE4OSw3ICsxODgsNyBAQCBSZWZQdHI8R1BVQ29tcHV0ZVBp
cGVsaW5lPiBHUFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRl
dmljZQogewogICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVSZW5kZXJQ
aXBlbGluZTo6Y3JlYXRlKCkiOwogCi0gICAgYXV0byBjcmVhdGVSZXN1bHQgPSB0cnlDcmVhdGVN
VExDb21wdXRlUGlwZWxpbmVTdGF0ZShmdW5jdGlvbk5hbWUsIGRldmljZSwgZGVzY3JpcHRvcik7
CisgICAgYXV0byBjcmVhdGVSZXN1bHQgPSB0cnlDcmVhdGVNVExDb21wdXRlUGlwZWxpbmVTdGF0
ZShmdW5jdGlvbk5hbWUsIGRldmljZS5wbGF0Zm9ybURldmljZSgpLCBkZXNjcmlwdG9yKTsKICAg
ICBpZiAoIWNyZWF0ZVJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VN
ZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVE
ZXZpY2VNZXRhbC5tbQppbmRleCBmNTU5NDdlYmFmMy4uYzk5NTRhYzBjZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRh
bC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
RGV2aWNlTWV0YWwubW0KQEAgLTcxLDcgKzcxLDcgQEAgUmVmUHRyPEdQVURldmljZT4gR1BVRGV2
aWNlOjp0cnlDcmVhdGUoY29uc3QgT3B0aW9uYWw8R1BVUmVxdWVzdEFkYXB0ZXJPcHRpb25zPiYK
IH0KIAogR1BVRGV2aWNlOjpHUFVEZXZpY2UoUmV0YWluUHRyPE1UTERldmljZT4mJiBkZXZpY2Up
Ci0gICAgOiBtX3BsYXRmb3JtRGV2aWNlKFdURk1vdmUoZGV2aWNlKSkKKyAgICA6IG1fcGxhdGZv
cm1EZXZpY2UoR1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlOjpjcmVhdGUoV1RGTW92ZShkZXZp
Y2UpKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVVF1ZXVlTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRhbC5tbQppbmRleCBhOWVhM2NiZWU1OC4uNDEz
ZTAyM2U3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9jb2NvYS9HUFVRdWV1ZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVRdWV1ZU1ldGFsLm1tCkBAIC00MywxNiArNDMsMTMgQEAgc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgY29tbWFuZFF1ZXVlTGFiZWxQcmVmaXggPSBAImNvbS5hcHBs
ZS5XZWJLaXQuIjsKIAogUmVmUHRyPEdQVVF1ZXVlPiBHUFVRdWV1ZTo6dHJ5Q3JlYXRlKGNvbnN0
IEdQVURldmljZSYgZGV2aWNlKQogewotICAgIGlmICghZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkp
IHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVVF1ZXVlOjp0cnlDcmVhdGUoKTogSW52YWxpZCBH
UFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIFJldGFp
blB0cjxNVExDb21tYW5kUXVldWU+IHF1ZXVlOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogCi0gICAgcXVldWUgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBu
ZXdDb21tYW5kUXVldWVdKTsKKyAgICBkZXZpY2Uud2l0aFBsYXRmb3JtRGV2aWNlKFsmXShNVExE
ZXZpY2UgKnBsYXRmb3JtRGV2aWNlKSB7CisgICAgICAgIHF1ZXVlID0gYWRvcHROUyhbcGxhdGZv
cm1EZXZpY2UgbmV3Q29tbWFuZFF1ZXVlXSk7CisgICAgfSk7CiAgICAgW3F1ZXVlIHNldExhYmVs
OmNvbW1hbmRRdWV1ZURlZmF1bHRMYWJlbF07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQppbmRleCAyM2E1Zjky
NzI5Yy4uNmQ1OTQ3YzMxNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFs
Lm1tCkBAIC00NSw3ICs0NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJl
dGFpblB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gdHJ5Q3JlYXRlTXRsRGVwdGhTdGVuY2lsU3Rh
dGUoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBjb25zdCBHUFVEZXB0aFN0ZW5jaWxT
dGF0ZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGNvbnN0IEdQVURldmljZSYgZGV2aWNlKQorc3Rh
dGljIFJldGFpblB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gdHJ5Q3JlYXRlTXRsRGVwdGhTdGVu
Y2lsU3RhdGUoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBjb25zdCBHUFVEZXB0aFN0
ZW5jaWxTdGF0ZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGNvbnN0IEdQVVRocmVhZFNhZmVQbGF0
Zm9ybURldmljZSYgcGxhdGZvcm1EZXZpY2UpCiB7CiAjaWYgTE9HX0RJU0FCTEVECiAgICAgVU5V
U0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CkBAIC03Myw3ICs3Myw5IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8TVRMRGVwdGhTdGVuY2lsU3RhdGU+IHRyeUNyZWF0ZU10bERlcHRoU3RlbmNpbFN0YXRlKGNv
bnN0IGNoYXIqCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBzdGF0
ZSA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0RlcHRoU3RlbmNpbFN0YXRl
V2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKV0pOworICAgIHBsYXRmb3JtRGV2aWNl
LndpdGhQbGF0Zm9ybURldmljZShbJl0oTVRMRGV2aWNlICpwbGF0Zm9ybURldmljZSkgeworICAg
ICAgICBzdGF0ZSA9IGFkb3B0TlMoW3BsYXRmb3JtRGV2aWNlIG5ld0RlcHRoU3RlbmNpbFN0YXRl
V2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKV0pOworICAgIH0pOwogCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMzkwLDcgKzM5Miw3IEBAIHN0YXRpYyBib29s
IHRyeVNldE1ldGFsRnVuY3Rpb25zKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgTVRM
TGlicmFyeSAqdmVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCB0cnlTZXRG
dW5jdGlvbnMoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBjb25zdCBHUFVQaXBlbGlu
ZVN0YWdlRGVzY3JpcHRvciYgdmVydGV4U3RhZ2UsIGNvbnN0IE9wdGlvbmFsPEdQVVBpcGVsaW5l
U3RhZ2VEZXNjcmlwdG9yPiYgZnJhZ21lbnRTdGFnZSwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2Us
IE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciogbXRsRGVzY3JpcHRvciwgT3B0aW9uYWw8V0hM
U0w6OlJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcj4mIHdobHNsRGVzY3JpcHRvcikKK3N0YXRpYyBi
b29sIHRyeVNldEZ1bmN0aW9ucyhjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0
IEdQVVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yJiB2ZXJ0ZXhTdGFnZSwgY29uc3QgT3B0aW9uYWw8
R1BVUGlwZWxpbmVTdGFnZURlc2NyaXB0b3I+JiBmcmFnbWVudFN0YWdlLCBjb25zdCBHUFVUaHJl
YWRTYWZlUGxhdGZvcm1EZXZpY2UmIHBsYXRmb3JtRGV2aWNlLCBNVExSZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IqIG10bERlc2NyaXB0b3IsIE9wdGlvbmFsPFdITFNMOjpSZW5kZXJQaXBlbGluZURl
c2NyaXB0b3I+JiB3aGxzbERlc2NyaXB0b3IpCiB7CiAjaWYgTE9HX0RJU0FCTEVECiAgICAgVU5V
U0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CkBAIC00MTQsNyArNDE2LDEwIEBAIHN0YXRpYyBib29s
IHRyeVNldEZ1bmN0aW9ucyhjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQ
VVBpcGVsaW5lU3RhCiAgICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogCiAgICAgICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAgICAgdmVydGV4TGlicmFyeSA9IGFkb3B0
TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlXaXRoU291cmNlOndobHNsQ29t
cGlsZVJlc3VsdC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAg
ICAgIC8vIG5ld0xpYnJhcnlXaXRoU291cmNlOm9wdGlvbnM6Y29tcGxldGlvbkhhbmRsZXI6Cisg
ICAgICAgIHBsYXRmb3JtRGV2aWNlLndpdGhQbGF0Zm9ybURldmljZShbJl0oTVRMRGV2aWNlICpw
bGF0Zm9ybURldmljZSkgeworICAgICAgICAgICAgdmVydGV4TGlicmFyeSA9IGFkb3B0TlMoW3Bs
YXRmb3JtRGV2aWNlIG5ld0xpYnJhcnlXaXRoU291cmNlOndobHNsQ29tcGlsZVJlc3VsdC0+bWV0
YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAgICAgIH0pOwogICAgICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNDM5LDcg
KzQ0NCw3IEBAIHN0YXRpYyBib29sIHRyeVNldEZ1bmN0aW9ucyhjb25zdCBjaGFyKiBjb25zdCBm
dW5jdGlvbk5hbWUsIGNvbnN0IEdQVVBpcGVsaW5lU3RhCiAgICAgcmV0dXJuIHRyeVNldE1ldGFs
RnVuY3Rpb25zKGZ1bmN0aW9uTmFtZSwgdmVydGV4TGlicmFyeS5nZXQoKSwgZnJhZ21lbnRMaWJy
YXJ5LmdldCgpLCBtdGxEZXNjcmlwdG9yLCB2ZXJ0ZXhFbnRyeVBvaW50LCBmcmFnbWVudEVudHJ5
UG9pbnQpOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
cj4gY29udmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcihjb25zdCBjaGFyKiBjb25zdCBmdW5j
dGlvbk5hbWUsIGNvbnN0IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Y29uc3QgR1BVRGV2aWNlJiBkZXZpY2UpCitzdGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcj4gY29udmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcihjb25zdCBjaGFy
KiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgY29uc3QgR1BVVGhyZWFkU2FmZVBsYXRmb3JtRGV2aWNlJiBwbGF0Zm9ybURl
dmljZSkKIHsKICAgICBSZXRhaW5QdHI8TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiBtdGxE
ZXNjcmlwdG9yOwogCkBAIC00ODEsMjEgKzQ4NiwxNiBAQCBzdGF0aWMgUmV0YWluUHRyPE1UTFJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcj4gY29udmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcihj
bwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCF0cnlTZXRGdW5jdGlvbnMoZnVuY3Rpb25O
YW1lLCB2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgZGV2aWNlLCBtdGxEZXNjcmlwdG9yLmdl
dCgpLCB3aGxzbERlc2NyaXB0b3IpKQorICAgIGlmICghdHJ5U2V0RnVuY3Rpb25zKGZ1bmN0aW9u
TmFtZSwgdmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHBsYXRmb3JtRGV2aWNlLCBtdGxEZXNj
cmlwdG9yLmdldCgpLCB3aGxzbERlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJldHVybiBtdGxEZXNjcmlwdG9yOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LXN0YXRpYyBib29sIHRyeUNyZWF0ZU10bFJlbmRlclBpcGVsaW5lU3RhdGUoY29uc3QgY2hhciog
Y29uc3QgZnVuY3Rpb25OYW1lLCBjb25zdCBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBUJiYgY2FsbGJhY2spCitzdGF0aWMg
Ym9vbCB0cnlDcmVhdGVNdGxSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnN0IGNoYXIqIGNvbnN0IGZ1
bmN0aW9uTmFtZSwgY29uc3QgR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBjb25zdCBHUFVUaHJlYWRTYWZlUGxhdGZvcm1EZXZpY2UmIHBsYXRmb3JtRGV2aWNlLCBUJiYg
Y2FsbGJhY2spCiB7Ci0gICAgaWYgKCFkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSkgewotICAgICAg
ICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0ZVBpcGVsaW5lOjp0cnlDcmVhdGUoKTogSW52YWxpZCBH
UFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdXRvIG10
bERlc2NyaXB0b3IgPSBjb252ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKGZ1bmN0aW9uTmFt
ZSwgZGVzY3JpcHRvciwgZGV2aWNlKTsKKyAgICBhdXRvIG10bERlc2NyaXB0b3IgPSBjb252ZXJ0
UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKGZ1bmN0aW9uTmFtZSwgZGVzY3JpcHRvciwgcGxhdGZv
cm1EZXZpY2UpOwogICAgIGlmICghbXRsRGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC01MDMsOSArNTAzLDEyIEBAIHN0YXRpYyBib29sIHRyeUNyZWF0ZU10bFJlbmRlclBp
cGVsaW5lU3RhdGUoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBjb25zCiAKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBbZGV2aWNlLnBsYXRmb3JtRGV2aWNl
KCkgbmV3UmVuZGVyUGlwZWxpbmVTdGF0ZVdpdGhEZXNjcmlwdG9yOm10bERlc2NyaXB0b3IuZ2V0
KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiByZW5kZXJQ
aXBlbGluZVN0YXRlLCBOU0Vycm9yICopIHsKLSAgICAgICAgY2FsbGJhY2socmVuZGVyUGlwZWxp
bmVTdGF0ZSk7Ci0gICAgfV07CisgICAgCisgICAgcGxhdGZvcm1EZXZpY2Uud2l0aFBsYXRmb3Jt
RGV2aWNlKFsmXShNVExEZXZpY2UgKnBsYXRmb3JtRGV2aWNlKSB7CisgICAgICAgIFtwbGF0Zm9y
bURldmljZSBuZXdSZW5kZXJQaXBlbGluZVN0YXRlV2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRv
ci5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+IHJl
bmRlclBpcGVsaW5lU3RhdGUsIE5TRXJyb3IgKikgeworICAgICAgICAgICAgY2FsbGJhY2socmVu
ZGVyUGlwZWxpbmVTdGF0ZSk7CisgICAgICAgIH1dOworICAgIH0pOwogCiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIApAQCAtNTE2LDIxICs1MTksMTYgQEAgUmVmUHRyPEdQVVJlbmRl
clBpcGVsaW5lPiBHUFVSZW5kZXJQaXBlbGluZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYg
ZGV2aWNlLAogewogICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVSZW5k
ZXJQaXBlbGluZTo6Y3JlYXRlKCkiOwogCi0gICAgaWYgKCFkZXZpY2UucGxhdGZvcm1EZXZpY2Uo
KSkgewotICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFsaWQgR1BVRGV2aWNlISIsIGZ1bmN0
aW9uTmFtZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIFJldGFpblB0
cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gZGVwdGhTdGVuY2lsOwogCi0gICAgaWYgKGRlc2NyaXB0
b3IuZGVwdGhTdGVuY2lsU3RhdGUgJiYgIShkZXB0aFN0ZW5jaWwgPSB0cnlDcmVhdGVNdGxEZXB0
aFN0ZW5jaWxTdGF0ZShmdW5jdGlvbk5hbWUsICpkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbFN0YXRl
LCBkZXZpY2UpKSkKKyAgICBpZiAoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxTdGF0ZSAmJiAhKGRl
cHRoU3RlbmNpbCA9IHRyeUNyZWF0ZU10bERlcHRoU3RlbmNpbFN0YXRlKGZ1bmN0aW9uTmFtZSwg
KmRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsU3RhdGUsIGRldmljZS5wbGF0Zm9ybURldmljZSgpKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzODcgZGVwdGhTdGVuY2lsQXR0YWNobWVudERl
c2NyaXB0b3IgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0IGZvciBXSExTTCBjb21waWxlci4KIAogICAg
IGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IEdQVVJlbmRlclBpcGVsaW5lKFdURk1vdmUoZGVw
dGhTdGVuY2lsKSwgZGVzY3JpcHRvci5wcmltaXRpdmVUb3BvbG9neSwgZGVzY3JpcHRvci52ZXJ0
ZXhJbnB1dC5pbmRleEZvcm1hdCkpOwogCi0gICAgYXV0byBzdWNjZXNzID0gdHJ5Q3JlYXRlTXRs
UmVuZGVyUGlwZWxpbmVTdGF0ZShmdW5jdGlvbk5hbWUsIGRlc2NyaXB0b3IsIGRldmljZSwgWz1d
KFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBtdGxSZW5kZXJQaXBlbGluZVN0YXRl
KSB7CisgICAgYXV0byBzdWNjZXNzID0gdHJ5Q3JlYXRlTXRsUmVuZGVyUGlwZWxpbmVTdGF0ZShm
dW5jdGlvbk5hbWUsIGRlc2NyaXB0b3IsIGRldmljZS5wbGF0Zm9ybURldmljZSgpLCBbPV0oUmV0
YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+IG10bFJlbmRlclBpcGVsaW5lU3RhdGUpIHsK
ICAgICAgICAgcmVzdWx0LT5zZXRQbGF0Zm9ybVJlbmRlclBpcGVsaW5lKFdURk1vdmUobXRsUmVu
ZGVyUGlwZWxpbmVTdGF0ZSkpOwogICAgIH0pOwogICAgIGlmICghc3VjY2VzcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTYW1wbGVy
TWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
U2FtcGxlck1ldGFsLm1tCmluZGV4IGQ3NDA1MThlOTVjLi5jZjhjMzY4NTI5YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNhbXBsZXJN
ZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVU2FtcGxlck1ldGFsLm1tCkBAIC03NSwxMyArNzUsOCBAQCBzdGF0aWMgTVRMU2FtcGxlck1p
cEZpbHRlciBtdGxNaXBGaWx0ZXJGb3JGaWx0ZXJNb2RlKEdQVUZpbHRlck1vZGUgbW9kZSkKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxNVExTYW1wbGVy
U3RhdGU+IHRyeUNyZWF0ZU10bFNhbXBsZXJTdGF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwg
Y29uc3QgR1BVU2FtcGxlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCitzdGF0aWMgUmV0YWluUHRy
PE1UTFNhbXBsZXJTdGF0ZT4gdHJ5Q3JlYXRlTXRsU2FtcGxlclN0YXRlKGNvbnN0IEdQVVRocmVh
ZFNhZmVQbGF0Zm9ybURldmljZSYgcGxhdGZvcm1EZXZpY2UsIGNvbnN0IEdQVVNhbXBsZXJEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGlmICghZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkp
IHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVVNhbXBsZXI6OnRyeUNyZWF0ZSgpOiBJbnZhbGlk
IEdQVURldmljZSEiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCiAgICAgUmV0
YWluUHRyPE1UTFNhbXBsZXJEZXNjcmlwdG9yPiBtdGxEZXNjcmlwdG9yOwogCiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTA5LDcgKzEwNCw5IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8TVRMU2FtcGxlclN0YXRlPiB0cnlDcmVhdGVNdGxTYW1wbGVyU3RhdGUoY29uc3QgR1BVRGV2
aWNlJiBkZXZpCiAKICAgICBbbXRsRGVzY3JpcHRvciBzZXRTdXBwb3J0QXJndW1lbnRCdWZmZXJz
OllFU107CiAKLSAgICBzYW1wbGVyID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkg
bmV3U2FtcGxlclN0YXRlV2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKV0pOworICAg
IHBsYXRmb3JtRGV2aWNlLndpdGhQbGF0Zm9ybURldmljZShbJl0oTVRMRGV2aWNlICpwbGF0Zm9y
bURldmljZSkgeworICAgICAgICBzYW1wbGVyID0gYWRvcHROUyhbcGxhdGZvcm1EZXZpY2UgbmV3
U2FtcGxlclN0YXRlV2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKV0pOworICAgIH0p
OwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBpZiAoIXNhbXBsZXIpCkBA
IC0xMjAsMTEgKzExNyw5IEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMU2FtcGxlclN0YXRlPiB0cnlD
cmVhdGVNdGxTYW1wbGVyU3RhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpCiAKIFJlZlB0cjxHUFVT
YW1wbGVyPiBHUFVTYW1wbGVyOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNv
bnN0IEdQVVNhbXBsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGF1dG8gc2FtcGxl
ciA9IHRyeUNyZWF0ZU10bFNhbXBsZXJTdGF0ZShkZXZpY2UsIGRlc2NyaXB0b3IpOwotICAgIGlm
ICghc2FtcGxlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEdQVVNhbXBsZXIoV1RGTW92ZShzYW1wbGVyKSkpOworICAgIGlmIChhdXRvIHNhbXBs
ZXIgPSB0cnlDcmVhdGVNdGxTYW1wbGVyU3RhdGUoZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCksIGRl
c2NyaXB0b3IpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVNhbXBsZXIoV1RGTW92
ZShzYW1wbGVyKSkpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBHUFVTYW1wbGVyOjpHUFVT
YW1wbGVyKFJldGFpblB0cjxNVExTYW1wbGVyU3RhdGU+JiYgc2FtcGxlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFkZXJNb2R1
bGVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVTaGFkZXJNb2R1bGVNZXRhbC5tbQppbmRleCBiN2Y1NmM4MzI3Yy4uYzMzNzNhMzEzMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVT
aGFkZXJNb2R1bGVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KQEAgLTM5LDExICszOSw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUmVmUHRyPEdQVVNoYWRlck1vZHVsZT4gR1BVU2hhZGVyTW9k
dWxlOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVVNoYWRlck1v
ZHVsZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKCFkZXZpY2UucGxhdGZvcm1E
ZXZpY2UoKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVU2hhZGVyTW9kdWxlOjpjcmVhdGUo
KTogSW52YWxpZCBHUFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LSAgICAKICAgICBpZiAoZGVzY3JpcHRvci5pc1dITFNMKQogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEdQVVNoYWRlck1vZHVsZShTdHJpbmcoZGVzY3JpcHRvci5jb2RlKSkpOwogCkBAIC01
MSw4ICs0NiwxMCBAQCBSZWZQdHI8R1BVU2hhZGVyTW9kdWxlPiBHUFVTaGFkZXJNb2R1bGU6OnRy
eUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29ucwogCiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNFcnJvciAqZXJyb3IgPSBbTlNFcnJvciBlcnJvcldp
dGhEb21haW46QCJjb20uYXBwbGUuV2ViS2l0LkdQVSIgY29kZToxIHVzZXJJbmZvOm5pbF07Ci0g
ICAgbW9kdWxlID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdp
dGhTb3VyY2U6ZGVzY3JpcHRvci5jb2RlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOworICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIGRldmljZS53aXRoUGxhdGZvcm1EZXZpY2UoWyZd
KE1UTERldmljZSAqcGxhdGZvcm1EZXZpY2UpIHsKKyAgICAgICAgbW9kdWxlID0gYWRvcHROUyhb
cGxhdGZvcm1EZXZpY2UgbmV3TGlicmFyeVdpdGhTb3VyY2U6ZGVzY3JpcHRvci5jb2RlIG9wdGlv
bnM6bmlsIGVycm9yOiZlcnJvcl0pOworICAgIH0pOwogICAgIGlmICghbW9kdWxlKQogICAgICAg
ICBMT0coV2ViR1BVLCAiU2hhZGVyIGNvbXBpbGF0aW9uIGVycm9yOiAlcyIsIFtbZXJyb3IgbG9j
YWxpemVkRGVzY3JpcHRpb25dIFVURjhTdHJpbmddKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVN3YXBDaGFpbk1ldGFsLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVN3YXBDaGFpbk1l
dGFsLm1tCmluZGV4IGJmM2UzNzI5Njg0Li44MGQ5OGY4N2ZlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVN3YXBDaGFpbk1ldGFsLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTd2Fw
Q2hhaW5NZXRhbC5tbQpAQCAtODcsMTEgKzg3LDYgQEAgc3RhdGljIFJldGFpblB0cjxXZWJHUFVM
YXllcj4gdHJ5Q3JlYXRlV2ViR1BVTGF5ZXIoTVRMRGV2aWNlICpkZXZpY2UsIE1UTFBpeGVsRm8K
IAogUmVmUHRyPEdQVVN3YXBDaGFpbj4gR1BVU3dhcENoYWluOjp0cnlDcmVhdGUoY29uc3QgR1BV
U3dhcENoYWluRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQog
ewotICAgIGlmICghZGVzY3JpcHRvci5kZXZpY2UtPnBsYXRmb3JtRGV2aWNlKCkpIHsKLSAgICAg
ICAgTE9HKFdlYkdQVSwgIkdQVVN3YXBDaGFpbjo6dHJ5Q3JlYXRlKCk6IEludmFsaWQgR1BVRGV2
aWNlISIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBhdXRvIHBpeGVs
Rm9ybWF0ID0gdHJ5R2V0U3VwcG9ydGVkUGl4ZWxGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpOwog
ICAgIGlmICghcGl4ZWxGb3JtYXQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTAyLDcg
Kzk3LDExIEBAIFJlZlB0cjxHUFVTd2FwQ2hhaW4+IEdQVVN3YXBDaGFpbjo6dHJ5Q3JlYXRlKGNv
bnN0IEdQVVN3YXBDaGFpbkRlc2NyaXB0b3ImIGRlc2NyCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGF1dG8gbGF5ZXIgPSB0cnlDcmVhdGVXZWJHUFVMYXllcihkZXNjcmlw
dG9yLmRldmljZS0+cGxhdGZvcm1EZXZpY2UoKSwgKnBpeGVsRm9ybWF0LCB1c2FnZU9wdGlvbnMp
OworICAgIFJldGFpblB0cjxXZWJHUFVMYXllcj4gbGF5ZXI7CisgICAgLy8gRklYTUU6IEdQVVN3
YXBDaGFpbk1ldGFsIGFuZCBXZWJHUFVMYXllciB3aWxsIG5lZWQgYWRkaXRpb25hbCB3b3JrIHRv
IGJlIHRocmVhZCBzYWZlLgorICAgIGRlc2NyaXB0b3IuZGV2aWNlLT53aXRoUGxhdGZvcm1EZXZp
Y2UoWyZdKE1UTERldmljZSAqcGxhdGZvcm1EZXZpY2UpIHsKKyAgICAgICAgbGF5ZXIgPSB0cnlD
cmVhdGVXZWJHUFVMYXllcihwbGF0Zm9ybURldmljZSwgKnBpeGVsRm9ybWF0LCB1c2FnZU9wdGlv
bnMpOworICAgIH0pOwogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVVGV4dHVyZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVVRleHR1cmVNZXRhbC5tbQppbmRleCBlZTQ4OTI4NjE4ZC4uNjYwZjgxOWM1MGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVUZXh0dXJlTWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVVRleHR1cmVNZXRhbC5tbQpAQCAtMTQzLDExICsxNDMsNiBAQCBSZWZQdHI8
R1BVVGV4dHVyZT4gR1BVVGV4dHVyZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNl
LCBjb25zdCBHUFVUZXh0dQogewogICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9
ICJHUFVUZXh0dXJlOjp0cnlDcmVhdGUoKSI7CiAKLSAgICBpZiAoIWRldmljZS5wbGF0Zm9ybURl
dmljZSgpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBHUFVEZXZpY2UhIiwg
ZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCiAgICAgYXV0
byB1c2FnZSA9IE9wdGlvblNldDxHUFVUZXh0dXJlVXNhZ2U6OkZsYWdzPjo6ZnJvbVJhdyhkZXNj
cmlwdG9yLnVzYWdlKTsKICAgICBhdXRvIG10bERlc2NyaXB0b3IgPSB0cnlDcmVhdGVNdGxUZXh0
dXJlRGVzY3JpcHRvcihmdW5jdGlvbk5hbWUsIGRlc2NyaXB0b3IsIHVzYWdlKTsKICAgICBpZiAo
IW10bERlc2NyaXB0b3IpCkBAIC0xNTcsNyArMTUyLDkgQEAgUmVmUHRyPEdQVVRleHR1cmU+IEdQ
VVRleHR1cmU6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVVGV4
dHUKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIG10bFRleHR1cmUg
PSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdUZXh0dXJlV2l0aERlc2NyaXB0
b3I6bXRsRGVzY3JpcHRvci5nZXQoKV0pOworICAgIGRldmljZS53aXRoUGxhdGZvcm1EZXZpY2Uo
WyZdKE1UTERldmljZSAqcGxhdGZvcm1EZXZpY2UpIHsKKyAgICAgICAgbXRsVGV4dHVyZSA9IGFk
b3B0TlMoW3BsYXRmb3JtRGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjptdGxEZXNjcmlw
dG9yLmdldCgpXSk7CisgICAgfSk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>