<?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>238428</bug_id>
          
          <creation_ts>2022-03-27 19:00:32 -0700</creation_ts>
          <short_desc>[WebGPU] Implement CommandEncoder::copyBufferToTexture() according to the spec</short_desc>
          <delta_ts>2022-03-31 01:43:17 -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>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>238311</dependson>
          <blocked>238430</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1855470</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-27 19:00:32 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855473</commentid>
    <comment_count>1</comment_count>
      <attachid>455875</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-27 19:03:43 -0700</bug_when>
    <thetext>Created attachment 455875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855723</commentid>
    <comment_count>2</comment_count>
      <attachid>455940</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-28 12:20:32 -0700</bug_when>
    <thetext>Created attachment 455940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855765</commentid>
    <comment_count>3</comment_count>
      <attachid>455952</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-28 14:07:54 -0700</bug_when>
    <thetext>Created attachment 455952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855767</commentid>
    <comment_count>4</comment_count>
      <attachid>455953</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-28 14:09:04 -0700</bug_when>
    <thetext>Created attachment 455953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855768</commentid>
    <comment_count>5</comment_count>
      <attachid>455954</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-28 14:10:39 -0700</bug_when>
    <thetext>Created attachment 455954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856318</commentid>
    <comment_count>6</comment_count>
      <attachid>455954</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-30 00:51:03 -0700</bug_when>
    <thetext>Comment on attachment 455954
Patch

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

with non-ascii chars fixed
with integral auto variables declared explicitly as their intended type.

&gt; Source/WebGPU/WebGPU/Texture.mm:2370
&gt; +    auto blockWidth = Texture::texelBlockWidth(fromAPI(imageCopyTexture.texture).descriptor().format);

explicitly declare the intended type

&gt; Source/WebGPU/WebGPU/Texture.mm:2556
&gt; +    if ((imageCopyTexture.origin.x + copySize.width) &gt; subresourceSize.width)

I think generally a+b&gt;c is written without parenthesis. Even though the spec has the parenthesis, maybe the code would still be nicer without.

&gt; Source/WebGPU/WebGPU/Texture.mm:2585
&gt; +    auto blockWidth = Texture::texelBlockWidth(format);

all these calculations are important part of the validation.
the integral types should be declared explicitly to ensure less mistakes

&gt; Source/WebGPU/WebGPU/Texture.mm:2618
&gt; +        if (layout.bytesPerRow &lt;= bytesInLastRow)

off-by-one
should be
  if (layout.bytesPerRow &lt; bytesInLastRow)
      return false;

&gt; Source/WebGPU/WebGPU/Texture.mm:2630
&gt; +    auto requiredBytesInCopy = 0;

this is declared as int, but it does calculations with layout members that are uint64_t.
Instead, declare it explicitly as uint64_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856319</commentid>
    <comment_count>7</comment_count>
      <attachid>455954</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-30 00:52:58 -0700</bug_when>
    <thetext>Comment on attachment 455954
Patch

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

&gt; Source/WebGPU/WebGPU/Texture.mm:2631
&gt; +

this is also missing the checked arithmetic fixme?
e.g. when you implement checked arithmetic, you will mark this as Checked&lt;uint64_t&gt; requiredBytesInCopy ?

&gt; Source/WebGPU/WebGPU/Texture.mm:2662
&gt; +    if (layout.offset + requiredBytesInCopy &gt; byteSize)

missing checked arithmetic fixme?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856733</commentid>
    <comment_count>8</comment_count>
      <attachid>455954</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-31 01:33:26 -0700</bug_when>
    <thetext>Comment on attachment 455954
Patch

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

&gt;&gt; Source/WebGPU/WebGPU/Texture.mm:2631
&gt;&gt; +
&gt; 
&gt; this is also missing the checked arithmetic fixme?
&gt; e.g. when you implement checked arithmetic, you will mark this as Checked&lt;uint64_t&gt; requiredBytesInCopy ?

Right. Good catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856741</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-31 01:42:45 -0700</bug_when>
    <thetext>Committed r292147 (249054@trunk): &lt;https://commits.webkit.org/249054@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856742</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-31 01:43:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/91092275&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455875</attachid>
            <date>2022-03-27 19:03:43 -0700</date>
            <delta_ts>2022-03-28 12:20:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>36382</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ2MjIwYzZiNDczM2UyZWFlY2U4NDkzNzlkZmJhMTkzYjcyYzg1MmUKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBTdW4gTWFyIDI3
IDE5OjAzOjA2IDIwMjIgLTA3MDAKCiAgICBQYXJ0IDMKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IGMzMWE5ODA1NDhh
MC4uZjA5OGRhNjdmZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIyLTAzLTI3ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKCkgYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzg0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJU
b1RleHR1cmUoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCisgICAgICAgIFRoZXJlIGFyZSBhIGJ1
bmNoIG9mIGhlbHBlciB2YWxpZGF0aW9uIGZ1bmN0aW9ucyBhZGRlZCBhcyBwdWJsaWMgc3RhdGlj
IG1lbWJlcnMgb2YgVGV4dHVyZQorICAgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBiZSBuZWVkZWQg
Zm9yIFF1ZXVlOjp3cml0ZVRleHR1cmUoKSBsYXRlci4gVGhlcmUgYXJlIGxpbmtzIGFuZCBxdW90
ZXMKKyAgICAgICAgZnJvbSB0aGUgc3BlYyB3aGVyZSBhcHByb3ByaWF0ZS4KKworICAgICAgICAq
IFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6dmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1
cmUpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVy
ZSk6CisgICAgICAgICogV2ViR1BVL1RleHR1cmUuaDoKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVy
ZS5tbToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUpOgorICAgICAg
ICAoV2ViR1BVOjpUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCk6CisgICAg
ICAgIChXZWJHUFU6OmltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjp2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpUZXh0dXJlOjpyZWZlcnNUb1NpbmdsZUFzcGVjdCk6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OmlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OnZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZSk6CisgICAgICAgIChXZWJHUFU6OlRleHR1
cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorCiAyMDIyLTAzLTI3ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gSW1wbGVt
ZW50IFRleHR1cmU6OmNyZWF0ZVZpZXcoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggOTY5OGM4YTA5OWZmLi40YjMxM2NiM2Yx
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCkBAIC0xNTgsMTEgKzE1
OCwyMDAgQEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvQnVmZmVyKGNvbnN0IEJ1
ZmZlciYgc291cmNlLCB1aW50NjRfdCBzb3VyY2VPZmYKICAgICBbbV9ibGl0Q29tbWFuZEVuY29k
ZXIgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigpIHNvdXJjZU9mZnNldDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZzZXQpIHRvQnVmZmVyOmRlc3RpbmF0aW9uLmJ1ZmZlcigp
IGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRlc3RpbmF0aW9uT2Zm
c2V0KSBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKIH0KIAorc3RhdGljIGJv
b2wgdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgaW1h
Z2VDb3B5QnVmZmVyKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCisKKyAgICAvLyBG
SVhNRTogImltYWdlQ29weUJ1ZmZlci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZlci4i
CisKKyAgICAvLyAiaW1hZ2VDb3B5QnVmZmVyLmJ5dGVzUGVyUm93IG11c3QgYmUgYSBtdWx0aXBs
ZSBvZiAyNTYuIgorICAgIGlmIChpbWFnZUNvcHlCdWZmZXIubGF5b3V0LmJ5dGVzUGVyUm93ICUg
MjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5
QnVmZmVyJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwg
Y29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRleHR1cmVE
ZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0IGF1
dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5kZXNjcmlw
dG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSBy
ZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNvdXJjZS5idWZmZXIuW1t1c2FnZV1d
IGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAoIShmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnVz
YWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNv
cHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlEc3QpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291
bnQgaXMgMS4iCisgICAgaWYgKGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJMZXQgYXNwZWN0U3BlY2lmaWNGb3JtYXQgPSBk
c3RUZXh0dXJlRGVzYy5mb3JtYXQuIgorICAgIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNp
ZmljRm9ybWF0ID0gZHN0VGV4dHVyZURlc2MuZm9ybWF0OworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBpZiAoIVRleHR1cmU6OnJlZmVy
c1RvU2luZ2xlQXNwZWN0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiVGhhdCBhc3BlY3Qg
bXVzdCBiZSBhIHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKnIDI1
LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIVRleHR1cmU6OmlzVmFs
aWRJbWFnZUNvcHlEZXN0aW5hdGlvbihkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9u
LmFzcGVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gIlNldCBh
c3BlY3RTcGVjaWZpY0Zvcm1hdCB0byB0aGUgYXNwZWN0LXNwZWNpZmljIGZvcm1hdCBhY2NvcmRp
bmcgdG8gwqfigK8yNS4xLjIgRGVwdGgtc3RlbmNpbCBmb3JtYXRzLiIKKyAgICAgICAgYXNwZWN0
U3BlY2lmaWNGb3JtYXQgPSBUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdChkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9uLmFzcGVjdCk7CisgICAgfQorCisgICAgLy8gInZhbGlk
YXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJuIHRy
dWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGRlc3RpbmF0
aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQgaXMgbm90IGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAg
IGlmICghVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3Jt
YXQpKSB7CisgICAgICAgIC8vICJzb3VyY2Uub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRl
eGVsIGJsb2NrIHNpemUgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0
ZXhlbEJsb2NrU2l6ZSA9IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKGRzdFRleHR1cmVEZXNjLmZv
cm1hdCk7CisgICAgICAgIGlmIChzb3VyY2UubGF5b3V0Lm9mZnNldCAlIHRleGVsQmxvY2tTaXpl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBkc3RUZXh0
dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRl
eHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkgewor
ICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgICAgICBp
ZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVhciB0ZXh0dXJlIGRhdGEoc291cmNlLCBz
b3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBhc3BlY3RTcGVjaWZpY0Zvcm1hdCwgY29weVNpemUpIHN1
Y2NlZWRzLiIKKyAgICBpZiAoIVRleHR1cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoc291
cmNlLmxheW91dCwgZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5zaXplKCksIGFzcGVjdFNwZWNpZmlj
Rm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0
IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNF
RF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IHNvdXJj
ZS5sYXlvdXQubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0
aGUgZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAg
ICBpZiAoIXByZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gIklmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgor
ICAgIGlmICghdmFsaWRhdGVDb3B5QnVmZmVyVG9UZXh0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24s
IGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFu
ZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFs
aWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJl
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVzUGVyUm93
ID0gc291cmNlLmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tl
ZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdlciBzb3VyY2VCeXRlc1BlckltYWdlID0gc291cmNl
LmxheW91dC5yb3dzUGVySW1hZ2UgKiBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAg
TVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChk
ZXN0aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAg
ICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRM
QmxpdE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25EZXB0aEZyb21EZXB0aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gbG9naWNhbFNpemUgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLmxvZ2ljYWxU
ZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoZGVzdGluYXRpb24ubWlwTGV2ZWwpOworICAgIGF1dG8g
d2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLndpZHRoLCBsb2dpY2FsU2l6ZS53aWR0
aCk7CisgICAgYXV0byBoZWlnaHRGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmhlaWdodCwg
bG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBhdXRvIGRlcHRoRm9yTWV0YWwgPSBzdGQ6Om1pbihj
b3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMsIGxvZ2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVy
cyk7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvbkRlc2NyaXB0b3IgPSBmcm9tQVBJKGRlc3RpbmF0
aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRGVzY3Jp
cHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7Cisg
ICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFs
L210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9i
amMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5k
IGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtl
KHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsg
KytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMu
CisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZU9mZnNldCA9IHNvdXJjZS5sYXlvdXQub2Zm
c2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlOworICAgICAgICAgICAgTlNVSW50ZWdl
ciBkZXN0aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAg
ICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tQnVm
ZmVyOmZyb21BUEkoc291cmNlLmJ1ZmZlcikuYnVmZmVyKCkKKyAgICAgICAgICAgICAgICBzb3Vy
Y2VPZmZzZXQ6c291cmNlT2Zmc2V0CisgICAgICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJSb3c6
c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlckltYWdlOnNv
dXJjZUJ5dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUK
KyAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50
ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9uU2xp
Y2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVs
CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAg
ICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOiB7CisgICAgICAgIC8v
IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRj
b21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9iamMKKyAgICAg
ICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAyRCB0ZXh0dXJlLCBkZXB0aCBtdXN0IGJlIDEuIgor
ICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZSh3aWR0aEZvck1ldGFsLCBoZWln
aHRGb3JNZXRhbCwgMSk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25PcmlnaW4gPSBNVExPcmln
aW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCBkZXN0aW5hdGlvbi5vcmlnaW4ueSwgMSk7Cisg
ICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JB
cnJheUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2Vk
IGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZU9mZnNldCA9IHNvdXJj
ZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlOworICAgICAgICAg
ICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3JpZ2luLnogKyBs
YXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgICAg
IGNvcHlGcm9tQnVmZmVyOmZyb21BUEkoc291cmNlLmJ1ZmZlcikuYnVmZmVyKCkKKyAgICAgICAg
ICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNlT2Zmc2V0CisgICAgICAgICAgICAgICAgc291cmNl
Qnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgICAgICBzb3VyY2VCeXRl
c1BlckltYWdlOnNvdXJjZUJ5dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBzb3VyY2VTaXpl
OnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlv
bi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRl
c3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0
aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRp
b25PcmlnaW4KKyAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOiB7
CisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIGhl
aWdodEZvck1ldGFsLCBkZXB0aEZvck1ldGFsKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbk9y
aWdpbiA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9uLm9y
aWdpbi55LCBkZXN0aW5hdGlvbi5vcmlnaW4ueik7CisgICAgICAgIE5TVUludGVnZXIgc291cmNl
T2Zmc2V0ID0gc291cmNlLmxheW91dC5vZmZzZXQ7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlcgorICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAg
ICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgc291cmNlU2l6
ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50
ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAg
ICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgIG9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgQ29tbWFu
ZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdH
UFVFeHRlbnQzRCYgY29weVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9U
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKaW5kZXggNTZmYjA5NmUx
MjYzLi4wZTRlMmJhZjBiMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1
cmUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTU0LDkgKzU0LDIx
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRl
eHR1cmVGb3JtYXQpOyAvLyBUZXhlbHMKICAgICBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja0hl
aWdodChXR1BVVGV4dHVyZUZvcm1hdCk7IC8vIFRleGVscworICAgIC8vIEZvciBkZXB0aC1zdGVu
Y2lsIHRleHR1cmVzLCB0aGUgaW5wdXQgdmFsdWUgdG8gdGV4ZWxCbG9ja1NpemUoKQorICAgIC8v
IG5lZWRzIHRvIGJlIHRoZSBvdXRwdXQgb2YgYXNwZWN0U3BlY2lmaWNGb3JtYXQoKS4KKyAgICBz
dGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQpOyAvLyBCeXRl
cwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zRGVwdGhBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQp
OwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zU3RlbmNpbEFzcGVjdChXR1BVVGV4dHVyZUZvcm1h
dCk7CiAgICAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCk7CisgICAgc3RhdGljIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNpZmljRm9ybWF0
KFdHUFVUZXh0dXJlRm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCk7CisgICAgc3RhdGljIGJvb2wg
dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29u
c3QgV0dQVUV4dGVudDNEJik7CisgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29weVJh
bmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29uc3QgV0dQVUV4dGVudDNEJik7Cisg
ICAgc3RhdGljIGJvb2wgcmVmZXJzVG9TaW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQsIFdH
UFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkSW1hZ2VDb3B5RGVzdGlu
YXRpb24oV0dQVVRleHR1cmVGb3JtYXQsIFdHUFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZUxpbmVhclRleHR1cmVEYXRhKGNvbnN0IFdHUFVUZXh0dXJlRGF0YUxheW91
dCYsIHVpbnQ2NF90LCBXR1BVVGV4dHVyZUZvcm1hdCwgV0dQVUV4dGVudDNEKTsKKworICAgIFdH
UFVFeHRlbnQzRCBsb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHVpbnQzMl90IG1pcExl
dmVsKTsKKyAgICBXR1BVRXh0ZW50M0QgcGh5c2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQo
dWludDMyX3QgbWlwTGV2ZWwpOwogCiAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQogICAgIGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRvcjsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1Rl
eHR1cmUubW0KaW5kZXggNjNlZmE4Yjk5ZjU1Li5hNWRkMDYyZjU4MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
VGV4dHVyZS5tbQpAQCAtMTQzOSw2ICsxNDM5LDE2NCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxN
VExQaXhlbEZvcm1hdD4gcGl4ZWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1h
dAogICAgIH0KIH0KIAordWludDMyX3QgVGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1
cmVGb3JtYXQgZm9ybWF0KSAvLyBCeXRlcworeworICAgIC8vIEZvciBkZXB0aC1zdGVuY2lsIHRl
eHR1cmVzLCB0aGUgaW5wdXQgdmFsdWUgdG8gdGhpcyBmdW5jdGlvbgorICAgIC8vIG5lZWRzIHRv
IGJlIHRoZSBvdXRwdXQgb2YgYXNwZWN0U3BlY2lmaWNGb3JtYXQoKS4KKyAgICBBU1NFUlQoIWNv
bnRhaW5zRGVwdGhBc3BlY3QoZm9ybWF0KSB8fCAhY29udGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1h
dCkpOworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2lu
dDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTaW50Ogor
ICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMkZsb2F0Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1IzMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2VWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkcxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQThTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U2ludDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9CR1JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SR0I5RTVVZmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6
CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyRmxv
YXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJVaW50OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTMyU2ludDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgxNlVub3JtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAgICAgICBBU1NFUlQocGl4ZWxG
b3JtYXQoZm9ybWF0KSA9PSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdCk7CisgICAgICAgIHJl
dHVybiA0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFVub3JtU3RlbmNpbDg6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMx
UkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOgorICAgICAg
ICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVy
biAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDNFJTbm9ybToKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkM1UkdTbm9ybToKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkM2SFJHQlVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9h
dDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdC
QVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3JnYjoKKyAg
ICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5v
cm1TcmdiOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VB
Q1IxMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm06CisgICAg
ICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNub3JtOgorICAgICAgICByZXR1cm4g
MTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzV4NFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNng1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
Nng1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM4eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4OFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVub3JtU3JnYjoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDMTJ4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4
MTJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVk
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworV0dQVVRleHR1cmVG
b3JtYXQgVGV4dHVyZTo6YXNwZWN0U3BlY2lmaWNGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9y
bWF0LCBXR1BVVGV4dHVyZUFzcGVjdCBhc3BlY3QpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIu
Z2l0aHViLmlvL2dwdXdlYi8jYXNwZWN0LXNwZWNpZmljLWZvcm1hdAorCisgICAgc3dpdGNoIChh
c3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgcmV0dXJu
IGZvcm1hdDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OiB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gc3RlbmNpbFNwZWNpZmljRm9ybWF0KGZvcm1hdCk7CisgICAgICAg
IEFTU0VSVChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBk
ZXB0aFNwZWNpZmljRm9ybWF0KGZvcm1hdCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAg
ICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9G
b3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZDsKKyAgICB9Cit9CisKIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPE1UTFBpeGVsRm9ybWF0PiBkZXB0aE9ubHlBc3BlY3RNZXRhbEZvcm1hdChXR1BVVGV4dHVy
ZUZvcm1hdCB0ZXh0dXJlRm9ybWF0KQogewogICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkgewpA
QCAtMjEyOCw2ICsyMjg2LDM5MCBAQCB2b2lkIFRleHR1cmU6OnNldExhYmVsKFN0cmluZyYmIGxh
YmVsKQogICAgIG1fdGV4dHVyZS5sYWJlbCA9IGxhYmVsOwogfQogCitXR1BVRXh0ZW50M0QgVGV4
dHVyZTo6bG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCh1aW50MzJfdCBtaXBMZXZlbCkK
K3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRl
Zi1sb2dpY2FsLXRleHR1cmUtc3VicmVzb3VyY2UtZXh0ZW50CisKKyAgICBzd2l0Y2ggKG1fZGVz
Y3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOgor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbWF4
KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDDosKJwqsgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAg
IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lk
dGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIDEu
IgorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJh
eUxheWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uXzJEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQu
d2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDDosKJwqsgbWlwTGV2ZWwpLiIK
KyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlw
dG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQu
aGVpZ2h0IHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuaGVpZ2h0IMOiwonCqyBtaXBMZXZlbCku
IgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2Ny
aXB0b3Iuc2l6ZS5oZWlnaHQgPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIDEuIgorICAgICAgICAgICAgMSB9OworICAgIGNhc2Ug
V0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAv
LyAiU2V0IGV4dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLndpZHRoIMOiwonC
qyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAv
LyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgw6LC
icKrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJf
dD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmhlaWdodCA+PiBtaXBMZXZlbCksCisgICAgICAgICAg
ICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gbWF4KDEsIGRlc2NyaXB0b3Iu
c2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgw6LCicKrIG1pcExldmVsKS4iCisgICAgICAgICAgICBz
dGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmRlcHRo
T3JBcnJheUxheWVycyA+PiBtaXBMZXZlbCkgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5z
aW9uX0ZvcmNlMzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gV0dQVUV4dGVudDNEIHsgfTsKKyAgICB9Cit9CisKK1dHUFVFeHRlbnQzRCBUZXh0dXJlOjpw
aHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAg
ICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1waHlz
aWNhbC10ZXh0dXJlLXN1YnJlc291cmNlLWV4dGVudAorCisgICAgLy8gIkxldCBsb2dpY2FsRXh0
ZW50IGJlIExvZ2ljYWwgdGV4dHVyZSBzdWJyZXNvdXJjZSBleHRlbnQoZGVzY3JpcHRvciwgbWlw
TGV2ZWwpLiIKKyAgICBhdXRvIGxvZ2ljYWxFeHRlbnQgPSBsb2dpY2FsVGV4dHVyZVN1YnJlc291
cmNlRXh0ZW50KG1pcExldmVsKTsKKworICAgIHN3aXRjaCAobV9kZXNjcmlwdG9yLmRpbWVuc2lv
bikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMUQ6CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRo
IHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRvcsOiwoDCmXMg
dGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1h
dCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50Lmhl
aWdodCB0byAxLiIKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5k
ZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4iCisgICAgICAgICAgICAxIH07CisgICAgY2FzZSBXR1BV
VGV4dHVyZURpbWVuc2lvbl8yRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vICJT
ZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGggcm91bmRlZCB1cCB0byB0aGUg
bmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9yw6LCgMKZcyB0ZXhlbCBibG9jayB3aWR0aC4i
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC53
aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIGxvZ2ljYWxFeHRl
bnQuaGVpZ2h0IHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRv
csOiwoDCmXMgdGV4ZWwgYmxvY2sgaGVpZ2h0LiIKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVp
bnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja0hlaWdodChtX2Rlc2Ny
aXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC5oZWlnaHQpKSwKKyAgICAgICAgICAgIC8vICJT
ZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVk
IHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LDosKAwplzIHRleGVsIGJs
b2NrIHdpZHRoLiIKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dp
Y2FsRXh0ZW50LndpZHRoKSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8g
bG9naWNhbEV4dGVudC5oZWlnaHQgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBv
ZiBkZXNjcmlwdG9yw6LCgMKZcyB0ZXhlbCBibG9jayBoZWlnaHQuIgorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrSGVp
Z2h0KG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LmhlaWdodCkpLAorICAgICAg
ICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIGxvZ2ljYWxFeHRlbnQu
ZGVwdGhPckFycmF5TGF5ZXJzLiIKKyAgICAgICAgICAgIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFy
cmF5TGF5ZXJzIH07CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7
IH07CisgICAgfQorfQorCitzdGF0aWMgV0dQVUV4dGVudDNEIGltYWdlQ29weVRleHR1cmVTdWJy
ZXNvdXJjZVNpemUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUp
Cit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jaW1hZ2Vjb3B5dGV4
dHVyZS1zdWJyZXNvdXJjZS1zaXplCisKKyAgICAvLyAiSXRzIHdpZHRoLCBoZWlnaHQgYW5kIGRl
cHRoT3JBcnJheUxheWVycyBhcmUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBkZXB0aCwgcmVzcGVj
dGl2ZWx5LCBvZiB0aGUgcGh5c2ljYWwgc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUg
c3VicmVzb3VyY2UgYXQgbWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwuIgor
ICAgIHJldHVybiBmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkucGh5c2ljYWxUZXh0
dXJlU3VicmVzb3VyY2VFeHRlbnQoaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCk7Cit9CisKK2Jv
b2wgVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlU
ZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQor
eworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVm
LXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5dGV4dHVyZQorCisgICAgLy8gImJsb2NrV2lkdGggYmUg
dGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2Ny
aXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxv
Y2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZv
cm1hdCk7CisKKyAgICAvLyAiYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhlaWdodCBv
ZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIKKyAgICBh
dXRvIGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdl
Q29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyBGSVhN
RTogImltYWdlQ29weVRleHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4i
CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0IGJlIGxlc3MgdGhhbiB0
aGUgW1tkZXNjcmlwdG9yXV0ubWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1
cmUuIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VD
b3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnggbXVzdCBi
ZSBhIG11bHRpcGxlIG9mIGJsb2NrV2lkdGguIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm9y
aWdpbi54ICUgYmxvY2tXaWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImlt
YWdlQ29weVRleHR1cmUub3JpZ2luLnkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0
LiIKKyAgICBpZiAoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJsb2NrSGVpZ2h0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltb
ZGVzY3JpcHRvcl1dLmZvcm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0LiIKKyAgICAvLyAi
aW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNhbXBsZUNvdW50IGlzIGdy
ZWF0ZXIgdGhhbiAxLiIKKyAgICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChm
cm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCkKKyAg
ICAgICAgfHwgZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5z
YW1wbGVDb3VudCA+IDEpIHsKKyAgICAgICAgLy8gIlRoZSBpbWFnZUNvcHlUZXh0dXJlIHN1YnJl
c291cmNlIHNpemUgb2YgaW1hZ2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0byBjb3B5U2l6ZSIKKyAg
ICAgICAgYXV0byBzdWJyZXNvdXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VT
aXplKGltYWdlQ29weVRleHR1cmUpOworICAgICAgICBpZiAoc3VicmVzb3VyY2VTaXplLndpZHRo
ICE9IGNvcHlTaXplLndpZHRoCisgICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuaGVpZ2h0
ICE9IGNvcHlTaXplLmhlaWdodAorICAgICAgICAgICAgfHwgc3VicmVzb3VyY2VTaXplLmRlcHRo
T3JBcnJheUxheWVycyAhPSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4
dHVyZTo6cmVmZXJzVG9TaW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0LCBXR1BV
VGV4dHVyZUFzcGVjdCBhc3BlY3QpCit7CisgICAgc3dpdGNoIChhc3BlY3QpIHsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgQVNTRVJUKFRleHR1cmU6OmNvbnRhaW5z
RGVwdGhBc3BlY3QoZm9ybWF0KSB8fCBUZXh0dXJlOjpjb250YWluc1N0ZW5jaWxBc3BlY3QoZm9y
bWF0KSk7CisgICAgICAgIGlmIChUZXh0dXJlOjpjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkg
JiYgVGV4dHVyZTo6Y29udGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3Rf
U3RlbmNpbE9ubHk6CisgICAgICAgIGlmICghVGV4dHVyZTo6Y29udGFpbnNTdGVuY2lsQXNwZWN0
KGZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICBpZiAoIVRleHR1cmU6
OmNvbnRhaW5zRGVwdGhBc3BlY3QoZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
VGV4dHVyZTo6aXNWYWxpZEltYWdlQ29weURlc3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZv
cm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2Vi
LmdpdGh1Yi5pby9ncHV3ZWIvI2RlcHRoLWZvcm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
RzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SR0JBOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SRzExQjEwVWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZs
b2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMy
U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkdCQTE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBMzJTaW50OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNp
bDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAg
ICAgICAgcmV0dXJuIGFzcGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6Cisg
ICAgICAgIHJldHVybiBhc3BlY3QgPT0gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzRSVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JV
ZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJH
QjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0VUQzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJH
QkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
NXg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4
eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzEweDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEMxMngxMFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEMxMngxMlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTo6dmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0
dXJlJiBpbWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQorewor
ICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3ZhbGlkYXRpbmctdGV4dHVy
ZS1jb3B5LXJhbmdlCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2Nr
IHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQu
IgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiTGV0IGJsb2NrSGVpZ2h0IGJlIHRoZSB0ZXhlbCBibG9jayBoZWlnaHQgb2YgaW1hZ2VDb3B5
VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja0hl
aWdodCA9IFRleHR1cmU6OnRleGVsQmxvY2tIZWlnaHQoZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJl
LnRleHR1cmUpLmRlc2NyaXB0b3IoKS5mb3JtYXQpOworCisgICAgLy8gIkxldCBzdWJyZXNvdXJj
ZVNpemUgYmUgdGhlIGltYWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNv
cHlUZXh0dXJlLiIKKyAgICBhdXRvIHN1YnJlc291cmNlU2l6ZSA9IGltYWdlQ29weVRleHR1cmVT
dWJyZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4dHVyZSk7CisKKyAgICAvLyAiKGltYWdlQ29weVRl
eHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0aCkg4omkIHN1YnJlc291cmNlU2l6ZS53aWR0
aCIKKyAgICAvLyBGSVhNRTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdl
Q29weVRleHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0aCkgPiBzdWJyZXNvdXJjZVNpemUu
d2lkdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVy
ZS5vcmlnaW4ueSArIGNvcHlTaXplLmhlaWdodCkg4omkIHN1YnJlc291cmNlU2l6ZS5oZWlnaHQi
CisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNv
cHlUZXh0dXJlLm9yaWdpbi55ICsgY29weVNpemUuaGVpZ2h0KSA+IHN1YnJlc291cmNlU2l6ZS5o
ZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVy
ZS5vcmlnaW4ueiArIGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycykg4omkIHN1YnJlc291cmNl
U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0
aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVw
dGhPckFycmF5TGF5ZXJzKSA+IHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJjb3B5U2l6ZS53aWR0aCBtdXN0IGJlIGEg
bXVsdGlwbGUgb2YgYmxvY2tXaWR0aC4iCisgICAgaWYgKGNvcHlTaXplLndpZHRoICUgYmxvY2tX
aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXplLmhlaWdodCBt
dXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChjb3B5U2l6ZS5oZWln
aHQgJSBibG9ja0hlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFsaWRhdGVMaW5lYXJUZXh0dXJlRGF0YShjb25zdCBX
R1BVVGV4dHVyZURhdGFMYXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0ZVNpemUsIFdHUFVUZXh0
dXJlRm9ybWF0IGZvcm1hdCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQpCit7CisgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1s
aW5lYXItdGV4dHVyZS1kYXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGgsIGJsb2NrSGVpZ2h0
LCBhbmQgYmxvY2tTaXplIGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwgaGVpZ2h0LCBhbmQgc2l6
ZSBvZiBmb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tX
aWR0aChmb3JtYXQpOworICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0dXJlOjp0ZXhlbEJsb2Nr
SGVpZ2h0KGZvcm1hdCk7CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0dXJlOjp0ZXhlbEJsb2Nr
U2l6ZShmb3JtYXQpOworCisgICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhhdCBjb3B5RXh0ZW50Lndp
ZHRoIGlzIGEgbXVsdGlwbGUgb2YgYmxvY2tXaWR0aCBhbmQgY29weUV4dGVudC5oZWlnaHQgaXMg
YSBtdWx0aXBsZSBvZiBibG9ja0hlaWdodC4iCisKKyAgICAvLyAid2lkdGhJbkJsb2NrcyBiZSBj
b3B5RXh0ZW50LndpZHRoIMO3IGJsb2NrV2lkdGguIgorICAgIGF1dG8gd2lkdGhJbkJsb2NrcyA9
IGNvcHlFeHRlbnQud2lkdGggLyBibG9ja1dpZHRoOworCisgICAgLy8gImhlaWdodEluQmxvY2tz
IGJlIGNvcHlFeHRlbnQuaGVpZ2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAgICBhdXRvIGhlaWdodElu
QmxvY2tzID0gY29weUV4dGVudC5oZWlnaHQgLyBibG9ja0hlaWdodDsKKworICAgIC8vICJieXRl
c0luTGFzdFJvdyBiZSBibG9ja1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4iCisgICAgLy8gRklYTUU6
IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgYXV0byBieXRlc0luTGFzdFJvdyA9IGJsb2Nr
U2l6ZSAqIHdpZHRoSW5CbG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAxIgor
ICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRlc1Bl
clJvdyBtdXN0IGJlIHNwZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJSb3cg
PT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSIK
KyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAgIC8v
ICJsYXlvdXQuYnl0ZXNQZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBzcGVj
aWZpZWQuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9TVFJJ
REVfVU5ERUZJTkVEIHx8IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklERV9V
TkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gIklm
IHNwZWNpZmllZCIKKyAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9TVFJJ
REVfVU5ERUZJTkVEKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAobGF5
b3V0LmJ5dGVzUGVyUm93IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5yb3dz
UGVySW1hZ2UgIT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8gImxh
eW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVpZ2h0
SW5CbG9ja3MuIgorICAgICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodEluQmxv
Y2tzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQgcmVx
dWlyZWRCeXRlc0luQ29weSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkgPSAw
OworCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisgICAg
aWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAiTGV0
IGJ5dGVzUGVySW1hZ2UgYmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVySW1h
Z2UuIgorICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAg
YXV0byBieXRlc1BlckltYWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQZXJJ
bWFnZTsKKworICAgICAgICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVzUGVy
SW1hZ2Ugw5cgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIMOiwojCkiAxKS4iCisgICAg
ICAgIGF1dG8gYnl0ZXNCZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9y
ZUxhc3RJbWFnZSB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRl
c0luQ29weSArPSBieXRlc0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29w
eUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgPiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEi
CisgICAgICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQg
bGF5b3V0LmJ5dGVzUGVyUm93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRC
eXRlc0luQ29weS4iCisgICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5i
eXRlc1BlclJvdyAqIChoZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gIklmIGhlaWdodEluQmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4g
MCkgeworICAgICAgICAgICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVz
SW5Db3B5LiIKKyAgICAgICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RS
b3c7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVx
dWlyZWRCeXRlc0luQ29weSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsg
cmVxdWlyZWRCeXRlc0luQ29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViR1BVCiAKICNwcmFnbWEg
bWFyayBXR1BVIFN0dWJzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455940</attachid>
            <date>2022-03-28 12:20:32 -0700</date>
            <delta_ts>2022-03-28 14:07:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>36439</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDE1ZGYxMjJlMmIyZjQ5MDY2NzIzMTIxNDdlYjY3ZTBkMWJmNTgwNjgKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDI4
IDEyOjE5OjUxIDIwMjIgLTA3MDAKCiAgICBQYXJ0IDMKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDZhODAzZjJhZGM3
YS4uM2EzNTU4YmNkYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIyLTAzLTI4ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKCkgYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzg0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJU
b1RleHR1cmUoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCisgICAgICAgIFRoZXJlIGFyZSBhIGJ1
bmNoIG9mIGhlbHBlciB2YWxpZGF0aW9uIGZ1bmN0aW9ucyBhZGRlZCBhcyBwdWJsaWMgc3RhdGlj
IG1lbWJlcnMgb2YgVGV4dHVyZQorICAgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBiZSBuZWVkZWQg
Zm9yIFF1ZXVlOjp3cml0ZVRleHR1cmUoKSBsYXRlci4gVGhlcmUgYXJlIGxpbmtzIGFuZCBxdW90
ZXMKKyAgICAgICAgZnJvbSB0aGUgc3BlYyB3aGVyZSBhcHByb3ByaWF0ZS4KKworICAgICAgICAq
IFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6dmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1
cmUpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVy
ZSk6CisgICAgICAgICogV2ViR1BVL1RleHR1cmUuaDoKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVy
ZS5tbToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUpOgorICAgICAg
ICAoV2ViR1BVOjpUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCk6CisgICAg
ICAgIChXZWJHUFU6OmltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjp2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpUZXh0dXJlOjpyZWZlcnNUb1NpbmdsZUFzcGVjdCk6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OmlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OnZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZSk6CisgICAgICAgIChXZWJHUFU6OlRleHR1
cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorCiAyMDIyLTAzLTI4ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gSW1wbGVt
ZW50IFRleHR1cmU6OmNyZWF0ZVZpZXcoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggOTY5OGM4YTA5OWZmLi5lMTI2M2FkZDBh
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCkBAIC0xNTgsMTEgKzE1
OCwyMDAgQEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvQnVmZmVyKGNvbnN0IEJ1
ZmZlciYgc291cmNlLCB1aW50NjRfdCBzb3VyY2VPZmYKICAgICBbbV9ibGl0Q29tbWFuZEVuY29k
ZXIgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigpIHNvdXJjZU9mZnNldDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZzZXQpIHRvQnVmZmVyOmRlc3RpbmF0aW9uLmJ1ZmZlcigp
IGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRlc3RpbmF0aW9uT2Zm
c2V0KSBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKIH0KIAorc3RhdGljIGJv
b2wgdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgaW1h
Z2VDb3B5QnVmZmVyKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCisKKyAgICAvLyBG
SVhNRTogImltYWdlQ29weUJ1ZmZlci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZlci4i
CisKKyAgICAvLyAiaW1hZ2VDb3B5QnVmZmVyLmJ5dGVzUGVyUm93IG11c3QgYmUgYSBtdWx0aXBs
ZSBvZiAyNTYuIgorICAgIGlmIChpbWFnZUNvcHlCdWZmZXIubGF5b3V0LmJ5dGVzUGVyUm93ICUg
MjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5
QnVmZmVyJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwg
Y29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRleHR1cmVE
ZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0IGF1
dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5kZXNjcmlw
dG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSBy
ZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNvdXJjZS5idWZmZXIuW1t1c2FnZV1d
IGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAoIShmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnVz
YWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNv
cHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlEc3QpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291
bnQgaXMgMS4iCisgICAgaWYgKGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJMZXQgYXNwZWN0U3BlY2lmaWNGb3JtYXQgPSBk
c3RUZXh0dXJlRGVzYy5mb3JtYXQuIgorICAgIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNp
ZmljRm9ybWF0ID0gZHN0VGV4dHVyZURlc2MuZm9ybWF0OworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBpZiAoIVRleHR1cmU6OnJlZmVy
c1RvU2luZ2xlQXNwZWN0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiVGhhdCBhc3BlY3Qg
bXVzdCBiZSBhIHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKnIDI1
LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIVRleHR1cmU6OmlzVmFs
aWRJbWFnZUNvcHlEZXN0aW5hdGlvbihkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9u
LmFzcGVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gIlNldCBh
c3BlY3RTcGVjaWZpY0Zvcm1hdCB0byB0aGUgYXNwZWN0LXNwZWNpZmljIGZvcm1hdCBhY2NvcmRp
bmcgdG8gwqfigK8yNS4xLjIgRGVwdGgtc3RlbmNpbCBmb3JtYXRzLiIKKyAgICAgICAgYXNwZWN0
U3BlY2lmaWNGb3JtYXQgPSBUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdChkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9uLmFzcGVjdCk7CisgICAgfQorCisgICAgLy8gInZhbGlk
YXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJuIHRy
dWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGRlc3RpbmF0
aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQgaXMgbm90IGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAg
IGlmICghVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3Jt
YXQpKSB7CisgICAgICAgIC8vICJzb3VyY2Uub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRl
eGVsIGJsb2NrIHNpemUgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0
ZXhlbEJsb2NrU2l6ZSA9IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKGRzdFRleHR1cmVEZXNjLmZv
cm1hdCk7CisgICAgICAgIGlmIChzb3VyY2UubGF5b3V0Lm9mZnNldCAlIHRleGVsQmxvY2tTaXpl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBkc3RUZXh0
dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRl
eHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkgewor
ICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgICAgICBp
ZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVhciB0ZXh0dXJlIGRhdGEoc291cmNlLCBz
b3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBhc3BlY3RTcGVjaWZpY0Zvcm1hdCwgY29weVNpemUpIHN1
Y2NlZWRzLiIKKyAgICBpZiAoIVRleHR1cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoc291
cmNlLmxheW91dCwgZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5zaXplKCksIGFzcGVjdFNwZWNpZmlj
Rm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0
IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNF
RF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IHNvdXJj
ZS5sYXlvdXQubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0
aGUgZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAg
ICBpZiAoIXByZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gIklmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgor
ICAgIGlmICghdmFsaWRhdGVDb3B5QnVmZmVyVG9UZXh0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24s
IGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFu
ZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFs
aWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJl
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVzUGVyUm93
ID0gc291cmNlLmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tl
ZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdlciBzb3VyY2VCeXRlc1BlckltYWdlID0gc291cmNl
LmxheW91dC5yb3dzUGVySW1hZ2UgKiBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAg
TVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChk
ZXN0aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAg
ICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRM
QmxpdE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25EZXB0aEZyb21EZXB0aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gbG9naWNhbFNpemUgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLmxvZ2ljYWxU
ZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoZGVzdGluYXRpb24ubWlwTGV2ZWwpOworICAgIGF1dG8g
d2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLndpZHRoLCBsb2dpY2FsU2l6ZS53aWR0
aCk7CisgICAgYXV0byBoZWlnaHRGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmhlaWdodCwg
bG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBhdXRvIGRlcHRoRm9yTWV0YWwgPSBzdGQ6Om1pbihj
b3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMsIGxvZ2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVy
cyk7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvbkRlc2NyaXB0b3IgPSBmcm9tQVBJKGRlc3RpbmF0
aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRGVzY3Jp
cHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7Cisg
ICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFs
L210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9i
amMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5k
IGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtl
KHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsg
KytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMu
CisgICAgICAgICAgICBhdXRvIHNvdXJjZU9mZnNldCA9IHN0YXRpY19jYXN0PE5TVUludGVnZXI+
KHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlKTsKKyAg
ICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25TbGljZSA9IGRlc3RpbmF0aW9uLm9yaWdp
bi56ICsgbGF5ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAg
ICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpmcm9tQVBJKHNvdXJjZS5idWZmZXIpLmJ1ZmZlcigpCisg
ICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAgICAgICAg
IHNvdXJjZUJ5dGVzUGVyUm93OnNvdXJjZUJ5dGVzUGVyUm93CisgICAgICAgICAgICAgICAgc291
cmNlQnl0ZXNQZXJJbWFnZTpzb3VyY2VCeXRlc1BlckltYWdlCisgICAgICAgICAgICAgICAgc291
cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEkoZGVz
dGluYXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25T
bGljZTpkZXN0aW5hdGlvblNsaWNlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpk
ZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRl
c3RpbmF0aW9uT3JpZ2luCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lv
bl8yRDogeworICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRh
dGlvbi9tZXRhbC9tdGxibGl0Y29tbWFuZGVuY29kZXIvMTQwMDc3MS1jb3B5ZnJvbWJ1ZmZlcj9s
YW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMkQgdGV4dHVyZSwg
ZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uo
d2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0
aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRp
b24ub3JpZ2luLnksIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIg
PCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgYXV0byBzb3VyY2VP
ZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCArIGxh
eWVyICogc291cmNlQnl0ZXNQZXJJbWFnZSk7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3Rp
bmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAg
W21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJv
bUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNl
dDpzb3VyY2VPZmZzZXQKKyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VC
eXRlc1BlclJvdworICAgICAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0
ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAg
ICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUo
KQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAg
ICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3Vy
Y2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRo
Rm9yTWV0YWwpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFr
ZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9u
Lm9yaWdpbi56KTsKKyAgICAgICAgYXV0byBzb3VyY2VPZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJ
bnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCk7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlcgorICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAg
ICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgc291cmNlU2l6
ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50
ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAg
ICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgIG9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgQ29tbWFu
ZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdH
UFVFeHRlbnQzRCYgY29weVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9U
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKaW5kZXggNTZmYjA5NmUx
MjYzLi4wZTRlMmJhZjBiMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1
cmUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTU0LDkgKzU0LDIx
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRl
eHR1cmVGb3JtYXQpOyAvLyBUZXhlbHMKICAgICBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja0hl
aWdodChXR1BVVGV4dHVyZUZvcm1hdCk7IC8vIFRleGVscworICAgIC8vIEZvciBkZXB0aC1zdGVu
Y2lsIHRleHR1cmVzLCB0aGUgaW5wdXQgdmFsdWUgdG8gdGV4ZWxCbG9ja1NpemUoKQorICAgIC8v
IG5lZWRzIHRvIGJlIHRoZSBvdXRwdXQgb2YgYXNwZWN0U3BlY2lmaWNGb3JtYXQoKS4KKyAgICBz
dGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQpOyAvLyBCeXRl
cwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zRGVwdGhBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQp
OwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zU3RlbmNpbEFzcGVjdChXR1BVVGV4dHVyZUZvcm1h
dCk7CiAgICAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCk7CisgICAgc3RhdGljIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNpZmljRm9ybWF0
KFdHUFVUZXh0dXJlRm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCk7CisgICAgc3RhdGljIGJvb2wg
dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29u
c3QgV0dQVUV4dGVudDNEJik7CisgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29weVJh
bmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29uc3QgV0dQVUV4dGVudDNEJik7Cisg
ICAgc3RhdGljIGJvb2wgcmVmZXJzVG9TaW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQsIFdH
UFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkSW1hZ2VDb3B5RGVzdGlu
YXRpb24oV0dQVVRleHR1cmVGb3JtYXQsIFdHUFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZUxpbmVhclRleHR1cmVEYXRhKGNvbnN0IFdHUFVUZXh0dXJlRGF0YUxheW91
dCYsIHVpbnQ2NF90LCBXR1BVVGV4dHVyZUZvcm1hdCwgV0dQVUV4dGVudDNEKTsKKworICAgIFdH
UFVFeHRlbnQzRCBsb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHVpbnQzMl90IG1pcExl
dmVsKTsKKyAgICBXR1BVRXh0ZW50M0QgcGh5c2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQo
dWludDMyX3QgbWlwTGV2ZWwpOwogCiAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQogICAgIGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRvcjsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1Rl
eHR1cmUubW0KaW5kZXggMTIwMWQ5MTQ2MzdiLi5hN2UwYTZjMmIxYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
VGV4dHVyZS5tbQpAQCAtMTQzOSw2ICsxNDM5LDE2NCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxN
VExQaXhlbEZvcm1hdD4gcGl4ZWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1h
dAogICAgIH0KIH0KIAordWludDMyX3QgVGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1
cmVGb3JtYXQgZm9ybWF0KSAvLyBCeXRlcworeworICAgIC8vIEZvciBkZXB0aC1zdGVuY2lsIHRl
eHR1cmVzLCB0aGUgaW5wdXQgdmFsdWUgdG8gdGhpcyBmdW5jdGlvbgorICAgIC8vIG5lZWRzIHRv
IGJlIHRoZSBvdXRwdXQgb2YgYXNwZWN0U3BlY2lmaWNGb3JtYXQoKS4KKyAgICBBU1NFUlQoIWNv
bnRhaW5zRGVwdGhBc3BlY3QoZm9ybWF0KSB8fCAhY29udGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1h
dCkpOworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2lu
dDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTaW50Ogor
ICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMkZsb2F0Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1IzMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2VWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkcxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQThTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U2ludDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9CR1JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SR0I5RTVVZmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6
CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyRmxv
YXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJVaW50OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTMyU2ludDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgxNlVub3JtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAgICAgICBBU1NFUlQocGl4ZWxG
b3JtYXQoZm9ybWF0KSA9PSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdCk7CisgICAgICAgIHJl
dHVybiA0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFVub3JtU3RlbmNpbDg6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMx
UkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOgorICAgICAg
ICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVy
biAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDNFJTbm9ybToKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkM1UkdTbm9ybToKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkM2SFJHQlVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9h
dDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdC
QVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3JnYjoKKyAg
ICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5v
cm1TcmdiOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VB
Q1IxMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm06CisgICAg
ICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNub3JtOgorICAgICAgICByZXR1cm4g
MTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzV4NFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNng1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
Nng1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM4eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4OFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVub3JtU3JnYjoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDMTJ4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4
MTJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVk
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworV0dQVVRleHR1cmVG
b3JtYXQgVGV4dHVyZTo6YXNwZWN0U3BlY2lmaWNGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9y
bWF0LCBXR1BVVGV4dHVyZUFzcGVjdCBhc3BlY3QpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIu
Z2l0aHViLmlvL2dwdXdlYi8jYXNwZWN0LXNwZWNpZmljLWZvcm1hdAorCisgICAgc3dpdGNoIChh
c3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgcmV0dXJu
IGZvcm1hdDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OiB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gc3RlbmNpbFNwZWNpZmljRm9ybWF0KGZvcm1hdCk7CisgICAgICAg
IEFTU0VSVChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBk
ZXB0aFNwZWNpZmljRm9ybWF0KGZvcm1hdCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAg
ICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9G
b3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZDsKKyAgICB9Cit9CisKIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPE1UTFBpeGVsRm9ybWF0PiBkZXB0aE9ubHlBc3BlY3RNZXRhbEZvcm1hdChXR1BVVGV4dHVy
ZUZvcm1hdCB0ZXh0dXJlRm9ybWF0KQogewogICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkgewpA
QCAtMjEyMyw2ICsyMjgxLDM5MCBAQCB2b2lkIFRleHR1cmU6OnNldExhYmVsKFN0cmluZyYmIGxh
YmVsKQogICAgIG1fdGV4dHVyZS5sYWJlbCA9IGxhYmVsOwogfQogCitXR1BVRXh0ZW50M0QgVGV4
dHVyZTo6bG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCh1aW50MzJfdCBtaXBMZXZlbCkK
K3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRl
Zi1sb2dpY2FsLXRleHR1cmUtc3VicmVzb3VyY2UtZXh0ZW50CisKKyAgICBzd2l0Y2ggKG1fZGVz
Y3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOgor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbWF4
KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDDosKJwqsgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAg
IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lk
dGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIDEu
IgorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJh
eUxheWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uXzJEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQu
d2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDDosKJwqsgbWlwTGV2ZWwpLiIK
KyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlw
dG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQu
aGVpZ2h0IHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuaGVpZ2h0IMOiwonCqyBtaXBMZXZlbCku
IgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2Ny
aXB0b3Iuc2l6ZS5oZWlnaHQgPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIDEuIgorICAgICAgICAgICAgMSB9OworICAgIGNhc2Ug
V0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAv
LyAiU2V0IGV4dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLndpZHRoIMOiwonC
qyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAv
LyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgw6LC
icKrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJf
dD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmhlaWdodCA+PiBtaXBMZXZlbCksCisgICAgICAgICAg
ICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gbWF4KDEsIGRlc2NyaXB0b3Iu
c2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgw6LCicKrIG1pcExldmVsKS4iCisgICAgICAgICAgICBz
dGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmRlcHRo
T3JBcnJheUxheWVycyA+PiBtaXBMZXZlbCkgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5z
aW9uX0ZvcmNlMzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gV0dQVUV4dGVudDNEIHsgfTsKKyAgICB9Cit9CisKK1dHUFVFeHRlbnQzRCBUZXh0dXJlOjpw
aHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAg
ICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1waHlz
aWNhbC10ZXh0dXJlLXN1YnJlc291cmNlLWV4dGVudAorCisgICAgLy8gIkxldCBsb2dpY2FsRXh0
ZW50IGJlIExvZ2ljYWwgdGV4dHVyZSBzdWJyZXNvdXJjZSBleHRlbnQoZGVzY3JpcHRvciwgbWlw
TGV2ZWwpLiIKKyAgICBhdXRvIGxvZ2ljYWxFeHRlbnQgPSBsb2dpY2FsVGV4dHVyZVN1YnJlc291
cmNlRXh0ZW50KG1pcExldmVsKTsKKworICAgIHN3aXRjaCAobV9kZXNjcmlwdG9yLmRpbWVuc2lv
bikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMUQ6CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRo
IHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRvcsOiwoDCmXMg
dGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1h
dCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50Lmhl
aWdodCB0byAxLiIKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5k
ZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4iCisgICAgICAgICAgICAxIH07CisgICAgY2FzZSBXR1BV
VGV4dHVyZURpbWVuc2lvbl8yRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vICJT
ZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGggcm91bmRlZCB1cCB0byB0aGUg
bmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9yw6LCgMKZcyB0ZXhlbCBibG9jayB3aWR0aC4i
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC53
aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIGxvZ2ljYWxFeHRl
bnQuaGVpZ2h0IHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRv
csOiwoDCmXMgdGV4ZWwgYmxvY2sgaGVpZ2h0LiIKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVp
bnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja0hlaWdodChtX2Rlc2Ny
aXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC5oZWlnaHQpKSwKKyAgICAgICAgICAgIC8vICJT
ZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVk
IHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LDosKAwplzIHRleGVsIGJs
b2NrIHdpZHRoLiIKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dp
Y2FsRXh0ZW50LndpZHRoKSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8g
bG9naWNhbEV4dGVudC5oZWlnaHQgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBv
ZiBkZXNjcmlwdG9yw6LCgMKZcyB0ZXhlbCBibG9jayBoZWlnaHQuIgorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrSGVp
Z2h0KG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LmhlaWdodCkpLAorICAgICAg
ICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIGxvZ2ljYWxFeHRlbnQu
ZGVwdGhPckFycmF5TGF5ZXJzLiIKKyAgICAgICAgICAgIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFy
cmF5TGF5ZXJzIH07CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7
IH07CisgICAgfQorfQorCitzdGF0aWMgV0dQVUV4dGVudDNEIGltYWdlQ29weVRleHR1cmVTdWJy
ZXNvdXJjZVNpemUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUp
Cit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jaW1hZ2Vjb3B5dGV4
dHVyZS1zdWJyZXNvdXJjZS1zaXplCisKKyAgICAvLyAiSXRzIHdpZHRoLCBoZWlnaHQgYW5kIGRl
cHRoT3JBcnJheUxheWVycyBhcmUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBkZXB0aCwgcmVzcGVj
dGl2ZWx5LCBvZiB0aGUgcGh5c2ljYWwgc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUg
c3VicmVzb3VyY2UgYXQgbWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwuIgor
ICAgIHJldHVybiBmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkucGh5c2ljYWxUZXh0
dXJlU3VicmVzb3VyY2VFeHRlbnQoaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCk7Cit9CisKK2Jv
b2wgVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlU
ZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQor
eworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVm
LXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5dGV4dHVyZQorCisgICAgLy8gImJsb2NrV2lkdGggYmUg
dGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2Ny
aXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxv
Y2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZv
cm1hdCk7CisKKyAgICAvLyAiYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhlaWdodCBv
ZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIKKyAgICBh
dXRvIGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdl
Q29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyBGSVhN
RTogImltYWdlQ29weVRleHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4i
CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0IGJlIGxlc3MgdGhhbiB0
aGUgW1tkZXNjcmlwdG9yXV0ubWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1
cmUuIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VD
b3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnggbXVzdCBi
ZSBhIG11bHRpcGxlIG9mIGJsb2NrV2lkdGguIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm9y
aWdpbi54ICUgYmxvY2tXaWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImlt
YWdlQ29weVRleHR1cmUub3JpZ2luLnkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0
LiIKKyAgICBpZiAoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJsb2NrSGVpZ2h0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltb
ZGVzY3JpcHRvcl1dLmZvcm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0LiIKKyAgICAvLyAi
aW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNhbXBsZUNvdW50IGlzIGdy
ZWF0ZXIgdGhhbiAxLiIKKyAgICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChm
cm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCkKKyAg
ICAgICAgfHwgZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5z
YW1wbGVDb3VudCA+IDEpIHsKKyAgICAgICAgLy8gIlRoZSBpbWFnZUNvcHlUZXh0dXJlIHN1YnJl
c291cmNlIHNpemUgb2YgaW1hZ2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0byBjb3B5U2l6ZSIKKyAg
ICAgICAgYXV0byBzdWJyZXNvdXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VT
aXplKGltYWdlQ29weVRleHR1cmUpOworICAgICAgICBpZiAoc3VicmVzb3VyY2VTaXplLndpZHRo
ICE9IGNvcHlTaXplLndpZHRoCisgICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuaGVpZ2h0
ICE9IGNvcHlTaXplLmhlaWdodAorICAgICAgICAgICAgfHwgc3VicmVzb3VyY2VTaXplLmRlcHRo
T3JBcnJheUxheWVycyAhPSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4
dHVyZTo6cmVmZXJzVG9TaW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0LCBXR1BV
VGV4dHVyZUFzcGVjdCBhc3BlY3QpCit7CisgICAgc3dpdGNoIChhc3BlY3QpIHsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgQVNTRVJUKFRleHR1cmU6OmNvbnRhaW5z
RGVwdGhBc3BlY3QoZm9ybWF0KSB8fCBUZXh0dXJlOjpjb250YWluc1N0ZW5jaWxBc3BlY3QoZm9y
bWF0KSk7CisgICAgICAgIGlmIChUZXh0dXJlOjpjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkg
JiYgVGV4dHVyZTo6Y29udGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3Rf
U3RlbmNpbE9ubHk6CisgICAgICAgIGlmICghVGV4dHVyZTo6Y29udGFpbnNTdGVuY2lsQXNwZWN0
KGZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICBpZiAoIVRleHR1cmU6
OmNvbnRhaW5zRGVwdGhBc3BlY3QoZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
VGV4dHVyZTo6aXNWYWxpZEltYWdlQ29weURlc3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZv
cm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2Vi
LmdpdGh1Yi5pby9ncHV3ZWIvI2RlcHRoLWZvcm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
RzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SR0JBOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SRzExQjEwVWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZs
b2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMy
U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkdCQTE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBMzJTaW50OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNp
bDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAg
ICAgICAgcmV0dXJuIGFzcGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6Cisg
ICAgICAgIHJldHVybiBhc3BlY3QgPT0gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzRSVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JV
ZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJH
QjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0VUQzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJH
QkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
NXg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4
eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzEweDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEMxMngxMFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEMxMngxMlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTo6dmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0
dXJlJiBpbWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQorewor
ICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3ZhbGlkYXRpbmctdGV4dHVy
ZS1jb3B5LXJhbmdlCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2Nr
IHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQu
IgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiTGV0IGJsb2NrSGVpZ2h0IGJlIHRoZSB0ZXhlbCBibG9jayBoZWlnaHQgb2YgaW1hZ2VDb3B5
VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja0hl
aWdodCA9IFRleHR1cmU6OnRleGVsQmxvY2tIZWlnaHQoZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJl
LnRleHR1cmUpLmRlc2NyaXB0b3IoKS5mb3JtYXQpOworCisgICAgLy8gIkxldCBzdWJyZXNvdXJj
ZVNpemUgYmUgdGhlIGltYWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNv
cHlUZXh0dXJlLiIKKyAgICBhdXRvIHN1YnJlc291cmNlU2l6ZSA9IGltYWdlQ29weVRleHR1cmVT
dWJyZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4dHVyZSk7CisKKyAgICAvLyAiKGltYWdlQ29weVRl
eHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0aCkg4omkIHN1YnJlc291cmNlU2l6ZS53aWR0
aCIKKyAgICAvLyBGSVhNRTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdl
Q29weVRleHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0aCkgPiBzdWJyZXNvdXJjZVNpemUu
d2lkdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVy
ZS5vcmlnaW4ueSArIGNvcHlTaXplLmhlaWdodCkg4omkIHN1YnJlc291cmNlU2l6ZS5oZWlnaHQi
CisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNv
cHlUZXh0dXJlLm9yaWdpbi55ICsgY29weVNpemUuaGVpZ2h0KSA+IHN1YnJlc291cmNlU2l6ZS5o
ZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVy
ZS5vcmlnaW4ueiArIGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycykg4omkIHN1YnJlc291cmNl
U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0
aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVw
dGhPckFycmF5TGF5ZXJzKSA+IHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJjb3B5U2l6ZS53aWR0aCBtdXN0IGJlIGEg
bXVsdGlwbGUgb2YgYmxvY2tXaWR0aC4iCisgICAgaWYgKGNvcHlTaXplLndpZHRoICUgYmxvY2tX
aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXplLmhlaWdodCBt
dXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChjb3B5U2l6ZS5oZWln
aHQgJSBibG9ja0hlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFsaWRhdGVMaW5lYXJUZXh0dXJlRGF0YShjb25zdCBX
R1BVVGV4dHVyZURhdGFMYXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0ZVNpemUsIFdHUFVUZXh0
dXJlRm9ybWF0IGZvcm1hdCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQpCit7CisgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1s
aW5lYXItdGV4dHVyZS1kYXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGgsIGJsb2NrSGVpZ2h0
LCBhbmQgYmxvY2tTaXplIGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwgaGVpZ2h0LCBhbmQgc2l6
ZSBvZiBmb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tX
aWR0aChmb3JtYXQpOworICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0dXJlOjp0ZXhlbEJsb2Nr
SGVpZ2h0KGZvcm1hdCk7CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0dXJlOjp0ZXhlbEJsb2Nr
U2l6ZShmb3JtYXQpOworCisgICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhhdCBjb3B5RXh0ZW50Lndp
ZHRoIGlzIGEgbXVsdGlwbGUgb2YgYmxvY2tXaWR0aCBhbmQgY29weUV4dGVudC5oZWlnaHQgaXMg
YSBtdWx0aXBsZSBvZiBibG9ja0hlaWdodC4iCisKKyAgICAvLyAid2lkdGhJbkJsb2NrcyBiZSBj
b3B5RXh0ZW50LndpZHRoIMO3IGJsb2NrV2lkdGguIgorICAgIGF1dG8gd2lkdGhJbkJsb2NrcyA9
IGNvcHlFeHRlbnQud2lkdGggLyBibG9ja1dpZHRoOworCisgICAgLy8gImhlaWdodEluQmxvY2tz
IGJlIGNvcHlFeHRlbnQuaGVpZ2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAgICBhdXRvIGhlaWdodElu
QmxvY2tzID0gY29weUV4dGVudC5oZWlnaHQgLyBibG9ja0hlaWdodDsKKworICAgIC8vICJieXRl
c0luTGFzdFJvdyBiZSBibG9ja1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4iCisgICAgLy8gRklYTUU6
IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgYXV0byBieXRlc0luTGFzdFJvdyA9IGJsb2Nr
U2l6ZSAqIHdpZHRoSW5CbG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAxIgor
ICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRlc1Bl
clJvdyBtdXN0IGJlIHNwZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJSb3cg
PT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSIK
KyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAgIC8v
ICJsYXlvdXQuYnl0ZXNQZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBzcGVj
aWZpZWQuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9TVFJJ
REVfVU5ERUZJTkVEIHx8IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklERV9V
TkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gIklm
IHNwZWNpZmllZCIKKyAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9TVFJJ
REVfVU5ERUZJTkVEKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAobGF5
b3V0LmJ5dGVzUGVyUm93IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5yb3dz
UGVySW1hZ2UgIT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8gImxh
eW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVpZ2h0
SW5CbG9ja3MuIgorICAgICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodEluQmxv
Y2tzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQgcmVx
dWlyZWRCeXRlc0luQ29weSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkgPSAw
OworCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisgICAg
aWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAiTGV0
IGJ5dGVzUGVySW1hZ2UgYmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVySW1h
Z2UuIgorICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAg
YXV0byBieXRlc1BlckltYWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQZXJJ
bWFnZTsKKworICAgICAgICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVzUGVy
SW1hZ2Ugw5cgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIMOiwojCkiAxKS4iCisgICAg
ICAgIGF1dG8gYnl0ZXNCZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9y
ZUxhc3RJbWFnZSB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRl
c0luQ29weSArPSBieXRlc0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29w
eUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgPiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEi
CisgICAgICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQg
bGF5b3V0LmJ5dGVzUGVyUm93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRC
eXRlc0luQ29weS4iCisgICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5i
eXRlc1BlclJvdyAqIChoZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gIklmIGhlaWdodEluQmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4g
MCkgeworICAgICAgICAgICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVz
SW5Db3B5LiIKKyAgICAgICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RS
b3c7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVx
dWlyZWRCeXRlc0luQ29weSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsg
cmVxdWlyZWRCeXRlc0luQ29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViR1BVCiAKICNwcmFnbWEg
bWFyayBXR1BVIFN0dWJzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455952</attachid>
            <date>2022-03-28 14:07:54 -0700</date>
            <delta_ts>2022-03-28 14:09:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>36709</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ3M2JkZWVkMjYzODllMWE3NTU3YTZhMzVkMzNkODdhZTY2M2I5YjMKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDI4
IDEzOjU4OjU1IDIwMjIgLTA3MDAKCiAgICBQYXJ0IDMKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDZhODAzZjJhZGM3
YS4uM2EzNTU4YmNkYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIyLTAzLTI4ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKCkgYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzg0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJU
b1RleHR1cmUoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCisgICAgICAgIFRoZXJlIGFyZSBhIGJ1
bmNoIG9mIGhlbHBlciB2YWxpZGF0aW9uIGZ1bmN0aW9ucyBhZGRlZCBhcyBwdWJsaWMgc3RhdGlj
IG1lbWJlcnMgb2YgVGV4dHVyZQorICAgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBiZSBuZWVkZWQg
Zm9yIFF1ZXVlOjp3cml0ZVRleHR1cmUoKSBsYXRlci4gVGhlcmUgYXJlIGxpbmtzIGFuZCBxdW90
ZXMKKyAgICAgICAgZnJvbSB0aGUgc3BlYyB3aGVyZSBhcHByb3ByaWF0ZS4KKworICAgICAgICAq
IFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6dmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1
cmUpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVy
ZSk6CisgICAgICAgICogV2ViR1BVL1RleHR1cmUuaDoKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVy
ZS5tbToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUpOgorICAgICAg
ICAoV2ViR1BVOjpUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCk6CisgICAg
ICAgIChXZWJHUFU6OmltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjp2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpUZXh0dXJlOjpyZWZlcnNUb1NpbmdsZUFzcGVjdCk6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OmlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OnZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZSk6CisgICAgICAgIChXZWJHUFU6OlRleHR1
cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorCiAyMDIyLTAzLTI4ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gSW1wbGVt
ZW50IFRleHR1cmU6OmNyZWF0ZVZpZXcoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggOTY5OGM4YTA5OWZmLi5lMTI2M2FkZDBh
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCkBAIC0xNTgsMTEgKzE1
OCwyMDAgQEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvQnVmZmVyKGNvbnN0IEJ1
ZmZlciYgc291cmNlLCB1aW50NjRfdCBzb3VyY2VPZmYKICAgICBbbV9ibGl0Q29tbWFuZEVuY29k
ZXIgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigpIHNvdXJjZU9mZnNldDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZzZXQpIHRvQnVmZmVyOmRlc3RpbmF0aW9uLmJ1ZmZlcigp
IGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRlc3RpbmF0aW9uT2Zm
c2V0KSBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKIH0KIAorc3RhdGljIGJv
b2wgdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgaW1h
Z2VDb3B5QnVmZmVyKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCisKKyAgICAvLyBG
SVhNRTogImltYWdlQ29weUJ1ZmZlci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZlci4i
CisKKyAgICAvLyAiaW1hZ2VDb3B5QnVmZmVyLmJ5dGVzUGVyUm93IG11c3QgYmUgYSBtdWx0aXBs
ZSBvZiAyNTYuIgorICAgIGlmIChpbWFnZUNvcHlCdWZmZXIubGF5b3V0LmJ5dGVzUGVyUm93ICUg
MjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5
QnVmZmVyJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwg
Y29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRleHR1cmVE
ZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0IGF1
dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5kZXNjcmlw
dG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSBy
ZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNvdXJjZS5idWZmZXIuW1t1c2FnZV1d
IGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAoIShmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnVz
YWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNv
cHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlEc3QpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291
bnQgaXMgMS4iCisgICAgaWYgKGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJMZXQgYXNwZWN0U3BlY2lmaWNGb3JtYXQgPSBk
c3RUZXh0dXJlRGVzYy5mb3JtYXQuIgorICAgIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNp
ZmljRm9ybWF0ID0gZHN0VGV4dHVyZURlc2MuZm9ybWF0OworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBpZiAoIVRleHR1cmU6OnJlZmVy
c1RvU2luZ2xlQXNwZWN0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiVGhhdCBhc3BlY3Qg
bXVzdCBiZSBhIHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKnIDI1
LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIVRleHR1cmU6OmlzVmFs
aWRJbWFnZUNvcHlEZXN0aW5hdGlvbihkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9u
LmFzcGVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gIlNldCBh
c3BlY3RTcGVjaWZpY0Zvcm1hdCB0byB0aGUgYXNwZWN0LXNwZWNpZmljIGZvcm1hdCBhY2NvcmRp
bmcgdG8gwqfigK8yNS4xLjIgRGVwdGgtc3RlbmNpbCBmb3JtYXRzLiIKKyAgICAgICAgYXNwZWN0
U3BlY2lmaWNGb3JtYXQgPSBUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdChkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9uLmFzcGVjdCk7CisgICAgfQorCisgICAgLy8gInZhbGlk
YXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJuIHRy
dWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGRlc3RpbmF0
aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQgaXMgbm90IGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAg
IGlmICghVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3Jt
YXQpKSB7CisgICAgICAgIC8vICJzb3VyY2Uub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRl
eGVsIGJsb2NrIHNpemUgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0
ZXhlbEJsb2NrU2l6ZSA9IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKGRzdFRleHR1cmVEZXNjLmZv
cm1hdCk7CisgICAgICAgIGlmIChzb3VyY2UubGF5b3V0Lm9mZnNldCAlIHRleGVsQmxvY2tTaXpl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBkc3RUZXh0
dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRl
eHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkgewor
ICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgICAgICBp
ZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVhciB0ZXh0dXJlIGRhdGEoc291cmNlLCBz
b3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBhc3BlY3RTcGVjaWZpY0Zvcm1hdCwgY29weVNpemUpIHN1
Y2NlZWRzLiIKKyAgICBpZiAoIVRleHR1cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoc291
cmNlLmxheW91dCwgZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5zaXplKCksIGFzcGVjdFNwZWNpZmlj
Rm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0
IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNF
RF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IHNvdXJj
ZS5sYXlvdXQubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0
aGUgZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAg
ICBpZiAoIXByZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gIklmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgor
ICAgIGlmICghdmFsaWRhdGVDb3B5QnVmZmVyVG9UZXh0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24s
IGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFu
ZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFs
aWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJl
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVzUGVyUm93
ID0gc291cmNlLmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tl
ZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdlciBzb3VyY2VCeXRlc1BlckltYWdlID0gc291cmNl
LmxheW91dC5yb3dzUGVySW1hZ2UgKiBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAg
TVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChk
ZXN0aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAg
ICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRM
QmxpdE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25EZXB0aEZyb21EZXB0aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gbG9naWNhbFNpemUgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLmxvZ2ljYWxU
ZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoZGVzdGluYXRpb24ubWlwTGV2ZWwpOworICAgIGF1dG8g
d2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLndpZHRoLCBsb2dpY2FsU2l6ZS53aWR0
aCk7CisgICAgYXV0byBoZWlnaHRGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmhlaWdodCwg
bG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBhdXRvIGRlcHRoRm9yTWV0YWwgPSBzdGQ6Om1pbihj
b3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMsIGxvZ2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVy
cyk7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvbkRlc2NyaXB0b3IgPSBmcm9tQVBJKGRlc3RpbmF0
aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRGVzY3Jp
cHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7Cisg
ICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFs
L210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9i
amMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5k
IGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtl
KHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsg
KytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMu
CisgICAgICAgICAgICBhdXRvIHNvdXJjZU9mZnNldCA9IHN0YXRpY19jYXN0PE5TVUludGVnZXI+
KHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlKTsKKyAg
ICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25TbGljZSA9IGRlc3RpbmF0aW9uLm9yaWdp
bi56ICsgbGF5ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAg
ICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpmcm9tQVBJKHNvdXJjZS5idWZmZXIpLmJ1ZmZlcigpCisg
ICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAgICAgICAg
IHNvdXJjZUJ5dGVzUGVyUm93OnNvdXJjZUJ5dGVzUGVyUm93CisgICAgICAgICAgICAgICAgc291
cmNlQnl0ZXNQZXJJbWFnZTpzb3VyY2VCeXRlc1BlckltYWdlCisgICAgICAgICAgICAgICAgc291
cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEkoZGVz
dGluYXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25T
bGljZTpkZXN0aW5hdGlvblNsaWNlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpk
ZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRl
c3RpbmF0aW9uT3JpZ2luCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lv
bl8yRDogeworICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRh
dGlvbi9tZXRhbC9tdGxibGl0Y29tbWFuZGVuY29kZXIvMTQwMDc3MS1jb3B5ZnJvbWJ1ZmZlcj9s
YW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMkQgdGV4dHVyZSwg
ZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uo
d2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0
aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRp
b24ub3JpZ2luLnksIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIg
PCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgYXV0byBzb3VyY2VP
ZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCArIGxh
eWVyICogc291cmNlQnl0ZXNQZXJJbWFnZSk7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3Rp
bmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAg
W21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJv
bUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNl
dDpzb3VyY2VPZmZzZXQKKyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VC
eXRlc1BlclJvdworICAgICAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0
ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAg
ICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUo
KQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAg
ICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3Vy
Y2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRo
Rm9yTWV0YWwpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFr
ZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9u
Lm9yaWdpbi56KTsKKyAgICAgICAgYXV0byBzb3VyY2VPZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJ
bnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCk7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlcgorICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAg
ICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgc291cmNlU2l6
ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50
ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAg
ICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgIG9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgQ29tbWFu
ZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdH
UFVFeHRlbnQzRCYgY29weVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9U
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKaW5kZXggNTZmYjA5NmUx
MjYzLi5jMWY5ZjBlYjI1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1
cmUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTU0LDkgKzU0LDIx
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRl
eHR1cmVGb3JtYXQpOyAvLyBUZXhlbHMKICAgICBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja0hl
aWdodChXR1BVVGV4dHVyZUZvcm1hdCk7IC8vIFRleGVscworICAgIC8vIEZvciBkZXB0aC1zdGVu
Y2lsIHRleHR1cmVzLCB0aGUgaW5wdXQgdmFsdWUgdG8gdGV4ZWxCbG9ja1NpemUoKQorICAgIC8v
IG5lZWRzIHRvIGJlIHRoZSBvdXRwdXQgb2YgYXNwZWN0U3BlY2lmaWNGb3JtYXQoKS4KKyAgICBz
dGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQpOyAvLyBCeXRl
cwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zRGVwdGhBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQp
OwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zU3RlbmNpbEFzcGVjdChXR1BVVGV4dHVyZUZvcm1h
dCk7CiAgICAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCk7CisgICAgc3RhdGljIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNpZmljRm9ybWF0
KFdHUFVUZXh0dXJlRm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCk7CisgICAgc3RhdGljIGJvb2wg
dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29u
c3QgV0dQVUV4dGVudDNEJik7CisgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29weVJh
bmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29uc3QgV0dQVUV4dGVudDNEJik7Cisg
ICAgc3RhdGljIGJvb2wgcmVmZXJzVG9TaW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQsIFdH
UFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkSW1hZ2VDb3B5RGVzdGlu
YXRpb24oV0dQVVRleHR1cmVGb3JtYXQsIFdHUFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZUxpbmVhclRleHR1cmVEYXRhKGNvbnN0IFdHUFVUZXh0dXJlRGF0YUxheW91
dCYsIHVpbnQ2NF90LCBXR1BVVGV4dHVyZUZvcm1hdCwgV0dQVUV4dGVudDNEKTsKKworICAgIFdH
UFVFeHRlbnQzRCBsb2dpY2FsTWlwbGV2ZWxTcGVjaWZpY1RleHR1cmVFeHRlbnQodWludDMyX3Qg
bWlwTGV2ZWwpOworICAgIFdHUFVFeHRlbnQzRCBwaHlzaWNhbE1pcGxldmVsU3BlY2lmaWNUZXh0
dXJlRXh0ZW50KHVpbnQzMl90IG1pcExldmVsKTsKIAogICAgIGlkPE1UTFRleHR1cmU+IHRleHR1
cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICAgICBjb25zdCBXR1BVVGV4dHVyZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3I7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0gYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9UZXh0dXJlLm1tCmluZGV4IDEyMDFkOTE0NjM3Yi4uY2U4MTc1YjkzYzZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1RleHR1cmUubW0KQEAgLTE0MzksNiArMTQzOSwxNjQgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8TVRMUGl4ZWxGb3JtYXQ+IHBpeGVsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IHRl
eHR1cmVGb3JtYXQKICAgICB9CiB9CiAKK3VpbnQzMl90IFRleHR1cmU6OnRleGVsQmxvY2tTaXpl
KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkgLy8gQnl0ZXMKK3sKKyAgICAvLyBGb3IgZGVwdGgt
c3RlbmNpbCB0ZXh0dXJlcywgdGhlIGlucHV0IHZhbHVlIHRvIHRoaXMgZnVuY3Rpb24KKyAgICAv
LyBuZWVkcyB0byBiZSB0aGUgb3V0cHV0IG9mIGFzcGVjdFNwZWNpZmljRm9ybWF0KCkuCisgICAg
QVNTRVJUKCFjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkgfHwgIWNvbnRhaW5zU3RlbmNpbEFz
cGVjdChmb3JtYXQpKTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SOFNpbnQ6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUjE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4U25vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
Ukc4U2ludDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
MzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcx
NlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgICAgICByZXR1cm4g
NDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlNp
bnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZVaW50OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkExNkZsb2F0OgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHQkEzMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ6CisgICAgICAgIHJldHVybiAxNjsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1N0ZW5jaWw4OgorICAgICAgICByZXR1cm4gMTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICAgICAgcmV0dXJu
IDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICAgICAgQVNT
RVJUKHBpeGVsRm9ybWF0KGZvcm1hdCkgPT0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQpOwor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVz
U3RlbmNpbDg6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFV
bm9ybVNyZ2I6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3Jn
YjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JB
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgICAgIHJldHVybiA4Owor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDNVJHU25vcm06CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9C
QzZIUkdCRmxvYXQ6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9y
bVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0I4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVNu
b3JtOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAgICAg
ICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM1eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzZ4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2
eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzh4NlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBV
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJV
bm9ybVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1VuZGVmaW5lZDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0ZvcmNlMzI6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1dH
UFVUZXh0dXJlRm9ybWF0IFRleHR1cmU6OmFzcGVjdFNwZWNpZmljRm9ybWF0KFdHUFVUZXh0dXJl
Rm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBz
Oi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2FzcGVjdC1zcGVjaWZpYy1mb3JtYXQKKworICAg
IHN3aXRjaCAoYXNwZWN0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAg
ICAgIHJldHVybiBmb3JtYXQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25s
eTogeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZW5jaWxTcGVjaWZpY0Zvcm1hdChmb3JtYXQp
OworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OiB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gZGVwdGhTcGVjaWZpY0Zvcm1hdChmb3JtYXQpOworICAgICAgICBBU1NFUlQocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgfQorfQorCiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNVExQaXhlbEZvcm1hdD4gZGVwdGhPbmx5QXNwZWN0TWV0YWxGb3JtYXQo
V0dQVVRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKHRleHR1cmVG
b3JtYXQpIHsKQEAgLTIxMjMsNiArMjI4MSwzOTAgQEAgdm9pZCBUZXh0dXJlOjpzZXRMYWJlbChT
dHJpbmcmJiBsYWJlbCkKICAgICBtX3RleHR1cmUubGFiZWwgPSBsYWJlbDsKIH0KIAorV0dQVUV4
dGVudDNEIFRleHR1cmU6OmxvZ2ljYWxNaXBsZXZlbFNwZWNpZmljVGV4dHVyZUV4dGVudCh1aW50
MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2Vi
LyNhYnN0cmFjdC1vcGRlZi1sb2dpY2FsLW1pcGxldmVsLXNwZWNpZmljLXRleHR1cmUtZXh0ZW50
CisKKyAgICBzd2l0Y2ggKG1fZGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRGltZW5zaW9uXzFEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNl
dCBleHRlbnQud2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2
ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9k
ZXNjcmlwdG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBl
eHRlbnQuaGVpZ2h0IHRvIDEuIgorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQg
ZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5
TGF5ZXJzLiIKKyAgICAgICAgICAgIG1fZGVzY3JpcHRvci5zaXplLmRlcHRoT3JBcnJheUxheWVy
cyB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5z
aXplLndpZHRoIOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisg
ICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6
ZS5oZWlnaHQg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmhlaWdodCA+PiBtaXBMZXZlbCksCisg
ICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gZGVzY3JpcHRv
ci5zaXplLmRlcHRoT3JBcnJheUxheWVycy4iCisgICAgICAgICAgICBtX2Rlc2NyaXB0b3Iuc2l6
ZS5kZXB0aE9yQXJyYXlMYXllcnMgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNE
OgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8g
bWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAg
IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lk
dGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIG1h
eCgxLCBkZXNjcmlwdG9yLnNpemUuaGVpZ2h0IOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAg
c3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS5oZWln
aHQgPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5
TGF5ZXJzIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJzIOKJqyBt
aXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEp
LCBtX2Rlc2NyaXB0b3Iuc2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgPj4gbWlwTGV2ZWwpIH07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQorfQor
CitXR1BVRXh0ZW50M0QgVGV4dHVyZTo6cGh5c2ljYWxNaXBsZXZlbFNwZWNpZmljVGV4dHVyZUV4
dGVudCh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIu
aW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1waHlzaWNhbC1taXBsZXZlbC1zcGVjaWZpYy10ZXh0
dXJlLWV4dGVudAorCisgICAgLy8gIkxldCBsb2dpY2FsRXh0ZW50IGJlIGxvZ2ljYWwgbWlwbGV2
ZWwtc3BlY2lmaWMgdGV4dHVyZSBleHRlbnQoZGVzY3JpcHRvciwgbWlwTGV2ZWwpLiIKKyAgICBh
dXRvIGxvZ2ljYWxFeHRlbnQgPSBsb2dpY2FsTWlwbGV2ZWxTcGVjaWZpY1RleHR1cmVFeHRlbnQo
bWlwTGV2ZWwpOworCisgICAgc3dpdGNoIChtX2Rlc2NyaXB0b3IuZGltZW5zaW9uKSB7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGggcm91bmRlZCB1
cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhlbCBibG9jayB3
aWR0aC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4
dGVudC53aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIDEuIgor
ICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxh
eWVycyB0byBsb2dpY2FsRXh0ZW50LmRlcHRoT3JBcnJheUxheWVycy4iCisgICAgICAgICAgICBs
b2dpY2FsRXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB9OworICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVu
dC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qg
bXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJs
b2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAg
ICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBsb2dpY2FsRXh0ZW50LmhlaWdodCBy
b3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVs
IGJsb2NrIGhlaWdodC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tIZWlnaHQobV9kZXNjcmlwdG9yLmZvcm1hdCks
IGxvZ2ljYWxFeHRlbnQuaGVpZ2h0KSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgdG8gbG9naWNhbEV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMuIgorICAg
ICAgICAgICAgbG9naWNhbEV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgfTsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8g
IlNldCBleHRlbnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVkIHVwIHRvIHRo
ZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVsIGJsb2NrIHdpZHRoLiIK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2YodGV4ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50Lndp
ZHRoKSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbG9naWNhbEV4dGVu
dC5oZWlnaHQgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y
4oCZcyB0ZXhlbCBibG9jayBoZWlnaHQuIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrSGVpZ2h0KG1fZGVzY3JpcHRv
ci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LmhlaWdodCkpLAorICAgICAgICAgICAgLy8gIlNldCBl
eHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFycmF5TGF5
ZXJzLiIKKyAgICAgICAgICAgIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIH07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQorfQor
CitzdGF0aWMgV0dQVUV4dGVudDNEIGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoY29u
c3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUpCit7CisgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jaW1hZ2Vjb3B5dGV4dHVyZS1zdWJyZXNvdXJj
ZS1zaXplCisKKyAgICAvLyAiSXRzIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoT3JBcnJheUxheWVy
cyBhcmUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBkZXB0aCwgcmVzcGVjdGl2ZWx5LCBvZiB0aGUg
cGh5c2ljYWwgc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUgc3VicmVzb3VyY2UgYXQg
bWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwuIgorICAgIHJldHVybiBmcm9t
QVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkucGh5c2ljYWxUZXh0dXJlU3VicmVzb3VyY2VF
eHRlbnQoaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCk7Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFs
aWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNv
cHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBz
Oi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1
aW1hZ2Vjb3B5dGV4dHVyZQorCisgICAgLy8gImJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2Nr
IHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQu
IgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhlaWdodCBvZiBpbWFnZUNvcHlUZXh0
dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIKKyAgICBhdXRvIGJsb2NrSGVpZ2h0
ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4
dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyBGSVhNRTogImltYWdlQ29weVRl
eHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4iCisKKyAgICAvLyAiaW1h
Z2VDb3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgW1tkZXNjcmlwdG9y
XV0ubWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuIgorICAgIGlmIChp
bWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0
dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnggbXVzdCBiZSBhIG11bHRpcGxlIG9m
IGJsb2NrV2lkdGguIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi54ICUgYmxvY2tX
aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUu
b3JpZ2luLnkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKyAgICBpZiAoaW1h
Z2VDb3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZv
cm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0LiIKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVy
ZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNhbXBsZUNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiIK
KyAgICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChmcm9tQVBJKGltYWdlQ29w
eVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCkKKyAgICAgICAgfHwgZnJvbUFQ
SShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5zYW1wbGVDb3VudCA+IDEp
IHsKKyAgICAgICAgLy8gIlRoZSBpbWFnZUNvcHlUZXh0dXJlIHN1YnJlc291cmNlIHNpemUgb2Yg
aW1hZ2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0byBjb3B5U2l6ZSIKKyAgICAgICAgYXV0byBzdWJy
ZXNvdXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGltYWdlQ29weVRl
eHR1cmUpOworICAgICAgICBpZiAoc3VicmVzb3VyY2VTaXplLndpZHRoICE9IGNvcHlTaXplLndp
ZHRoCisgICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuaGVpZ2h0ICE9IGNvcHlTaXplLmhl
aWdodAorICAgICAgICAgICAgfHwgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyAh
PSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6cmVmZXJzVG9T
aW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCBh
c3BlY3QpCit7CisgICAgc3dpdGNoIChhc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNw
ZWN0X0FsbDoKKyAgICAgICAgQVNTRVJUKFRleHR1cmU6OmNvbnRhaW5zRGVwdGhBc3BlY3QoZm9y
bWF0KSB8fCBUZXh0dXJlOjpjb250YWluc1N0ZW5jaWxBc3BlY3QoZm9ybWF0KSk7CisgICAgICAg
IGlmIChUZXh0dXJlOjpjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkgJiYgVGV4dHVyZTo6Y29u
dGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6Cisg
ICAgICAgIGlmICghVGV4dHVyZTo6Y29udGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICBpZiAoIVRleHR1cmU6OmNvbnRhaW5zRGVwdGhB
c3BlY3QoZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6aXNWYWxp
ZEltYWdlQ29weURlc3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1
cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3
ZWIvI2RlcHRoLWZvcm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkcxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
OFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZs
b2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJT
aW50OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIGFz
cGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBh
c3BlY3QgPT0gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFS
R0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdT
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
RVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JB
OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
NXg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNy
Z2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
OHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngx
MFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFsaWRh
dGVUZXh0dXJlQ29weVJhbmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlU
ZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3ZhbGlkYXRpbmctdGV4dHVyZS1jb3B5LXJhbmdlCisK
KyAgICAvLyAiTGV0IGJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdl
Q29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxv
Y2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1
cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyAiTGV0IGJsb2NrSGVp
Z2h0IGJlIHRoZSB0ZXhlbCBibG9jayBoZWlnaHQgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJl
LltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja0hlaWdodCA9IFRleHR1cmU6
OnRleGVsQmxvY2tIZWlnaHQoZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2Ny
aXB0b3IoKS5mb3JtYXQpOworCisgICAgLy8gIkxldCBzdWJyZXNvdXJjZVNpemUgYmUgdGhlIGlt
YWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLiIKKyAg
ICBhdXRvIHN1YnJlc291cmNlU2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUo
aW1hZ2VDb3B5VGV4dHVyZSk7CisKKyAgICAvLyAiKGltYWdlQ29weVRleHR1cmUub3JpZ2luLngg
KyBjb3B5U2l6ZS53aWR0aCkg4omkIHN1YnJlc291cmNlU2l6ZS53aWR0aCIKKyAgICAvLyBGSVhN
RTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3Jp
Z2luLnggKyBjb3B5U2l6ZS53aWR0aCkgPiBzdWJyZXNvdXJjZVNpemUud2lkdGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSArIGNv
cHlTaXplLmhlaWdodCkg4omkIHN1YnJlc291cmNlU2l6ZS5oZWlnaHQiCisgICAgLy8gRklYTUU6
IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdp
bi55ICsgY29weVNpemUuaGVpZ2h0KSA+IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueiArIGNv
cHlTaXplLmRlcHRoT3JBcnJheUxheWVycykg4omkIHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJy
YXlMYXllcnMiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYg
KChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
KSA+IHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vICJjb3B5U2l6ZS53aWR0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxv
Y2tXaWR0aC4iCisgICAgaWYgKGNvcHlTaXplLndpZHRoICUgYmxvY2tXaWR0aCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXplLmhlaWdodCBtdXN0IGJlIGEgbXVsdGlw
bGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChjb3B5U2l6ZS5oZWlnaHQgJSBibG9ja0hlaWdo
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
VGV4dHVyZTo6dmFsaWRhdGVMaW5lYXJUZXh0dXJlRGF0YShjb25zdCBXR1BVVGV4dHVyZURhdGFM
YXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0ZVNpemUsIFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1h
dCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0
aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1saW5lYXItdGV4dHVyZS1k
YXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGgsIGJsb2NrSGVpZ2h0LCBhbmQgYmxvY2tTaXpl
IGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwgaGVpZ2h0LCBhbmQgc2l6ZSBvZiBmb3JtYXQuIgor
ICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmb3JtYXQpOwor
ICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZvcm1hdCk7
CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrU2l6ZShmb3JtYXQpOwor
CisgICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhhdCBjb3B5RXh0ZW50LndpZHRoIGlzIGEgbXVsdGlw
bGUgb2YgYmxvY2tXaWR0aCBhbmQgY29weUV4dGVudC5oZWlnaHQgaXMgYSBtdWx0aXBsZSBvZiBi
bG9ja0hlaWdodC4iCisKKyAgICAvLyAid2lkdGhJbkJsb2NrcyBiZSBjb3B5RXh0ZW50LndpZHRo
IMO3IGJsb2NrV2lkdGguIgorICAgIGF1dG8gd2lkdGhJbkJsb2NrcyA9IGNvcHlFeHRlbnQud2lk
dGggLyBibG9ja1dpZHRoOworCisgICAgLy8gImhlaWdodEluQmxvY2tzIGJlIGNvcHlFeHRlbnQu
aGVpZ2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAgICBhdXRvIGhlaWdodEluQmxvY2tzID0gY29weUV4
dGVudC5oZWlnaHQgLyBibG9ja0hlaWdodDsKKworICAgIC8vICJieXRlc0luTGFzdFJvdyBiZSBi
bG9ja1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4iCisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFy
aXRobWV0aWMuCisgICAgYXV0byBieXRlc0luTGFzdFJvdyA9IGJsb2NrU2l6ZSAqIHdpZHRoSW5C
bG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAxIgorICAgIGlmIChoZWlnaHRJ
bkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRlc1BlclJvdyBtdXN0IGJlIHNw
ZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJSb3cgPT0gV0dQVV9DT1BZX1NU
UklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSIKKyAgICBpZiAoY29weUV4
dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQ
ZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBzcGVjaWZpZWQuIgorICAgICAg
ICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEIHx8
IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gIklmIHNwZWNpZmllZCIKKyAg
ICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKSB7
CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93
IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5yb3dzUGVySW1hZ2UgIT0gV0dQ
VV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8gImxheW91dC5yb3dzUGVySW1h
Z2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVpZ2h0SW5CbG9ja3MuIgorICAg
ICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodEluQmxvY2tzKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQgcmVxdWlyZWRCeXRlc0luQ29w
eSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkgPSAwOworCisgICAgLy8gIklm
IGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisgICAgaWYgKGNvcHlFeHRlbnQu
ZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAiTGV0IGJ5dGVzUGVySW1hZ2Ug
YmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVySW1hZ2UuIgorICAgICAgICAv
LyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgYXV0byBieXRlc1Blcklt
YWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQZXJJbWFnZTsKKworICAgICAg
ICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVzUGVySW1hZ2Ugw5cgKGNvcHlF
eHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIMOiwojCkiAxKS4iCisgICAgICAgIGF1dG8gYnl0ZXNC
ZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5
TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9yZUxhc3RJbWFnZSB0byBy
ZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRlc0luQ29weSArPSBieXRl
c0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29weUV4dGVudC5kZXB0aE9y
QXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMg
PiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEiCisgICAgICAgIGlmICho
ZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQgbGF5b3V0LmJ5dGVzUGVy
Um93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRCeXRlc0luQ29weS4iCisg
ICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5ieXRlc1BlclJvdyAqICho
ZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIklmIGhlaWdodElu
QmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4gMCkgeworICAgICAgICAg
ICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAg
ICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RSb3c7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG5v
dCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVxdWlyZWRCeXRlc0luQ29w
eSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsgcmVxdWlyZWRCeXRlc0lu
Q29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViR1BVCiAKICNwcmFnbWEgbWFyayBXR1BVIFN0dWJz
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455953</attachid>
            <date>2022-03-28 14:09:04 -0700</date>
            <delta_ts>2022-03-28 14:10:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>36709</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDI2NTU5ZDE2Y2YyNzIxNzg2ZDYzYjI3YmRjOTgyMGMzMGJlZmUwN2YKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDI4
IDEzOjU4OjU1IDIwMjIgLTA3MDAKCiAgICBQYXJ0IDMKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDZhODAzZjJhZGM3
YS4uM2EzNTU4YmNkYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIyLTAzLTI4ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKCkgYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzg0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJU
b1RleHR1cmUoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCisgICAgICAgIFRoZXJlIGFyZSBhIGJ1
bmNoIG9mIGhlbHBlciB2YWxpZGF0aW9uIGZ1bmN0aW9ucyBhZGRlZCBhcyBwdWJsaWMgc3RhdGlj
IG1lbWJlcnMgb2YgVGV4dHVyZQorICAgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBiZSBuZWVkZWQg
Zm9yIFF1ZXVlOjp3cml0ZVRleHR1cmUoKSBsYXRlci4gVGhlcmUgYXJlIGxpbmtzIGFuZCBxdW90
ZXMKKyAgICAgICAgZnJvbSB0aGUgc3BlYyB3aGVyZSBhcHByb3ByaWF0ZS4KKworICAgICAgICAq
IFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6dmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1
cmUpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVy
ZSk6CisgICAgICAgICogV2ViR1BVL1RleHR1cmUuaDoKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVy
ZS5tbToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUpOgorICAgICAg
ICAoV2ViR1BVOjpUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCk6CisgICAg
ICAgIChXZWJHUFU6OmltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjp2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpUZXh0dXJlOjpyZWZlcnNUb1NpbmdsZUFzcGVjdCk6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OmlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OnZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZSk6CisgICAgICAgIChXZWJHUFU6OlRleHR1
cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorCiAyMDIyLTAzLTI4ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gSW1wbGVt
ZW50IFRleHR1cmU6OmNyZWF0ZVZpZXcoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggOTY5OGM4YTA5OWZmLi5lMTI2M2FkZDBh
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCkBAIC0xNTgsMTEgKzE1
OCwyMDAgQEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvQnVmZmVyKGNvbnN0IEJ1
ZmZlciYgc291cmNlLCB1aW50NjRfdCBzb3VyY2VPZmYKICAgICBbbV9ibGl0Q29tbWFuZEVuY29k
ZXIgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigpIHNvdXJjZU9mZnNldDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZzZXQpIHRvQnVmZmVyOmRlc3RpbmF0aW9uLmJ1ZmZlcigp
IGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRlc3RpbmF0aW9uT2Zm
c2V0KSBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKIH0KIAorc3RhdGljIGJv
b2wgdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgaW1h
Z2VDb3B5QnVmZmVyKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCisKKyAgICAvLyBG
SVhNRTogImltYWdlQ29weUJ1ZmZlci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZlci4i
CisKKyAgICAvLyAiaW1hZ2VDb3B5QnVmZmVyLmJ5dGVzUGVyUm93IG11c3QgYmUgYSBtdWx0aXBs
ZSBvZiAyNTYuIgorICAgIGlmIChpbWFnZUNvcHlCdWZmZXIubGF5b3V0LmJ5dGVzUGVyUm93ICUg
MjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5
QnVmZmVyJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwg
Y29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRleHR1cmVE
ZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0IGF1
dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5kZXNjcmlw
dG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSBy
ZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNvdXJjZS5idWZmZXIuW1t1c2FnZV1d
IGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAoIShmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnVz
YWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNv
cHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlEc3QpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291
bnQgaXMgMS4iCisgICAgaWYgKGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJMZXQgYXNwZWN0U3BlY2lmaWNGb3JtYXQgPSBk
c3RUZXh0dXJlRGVzYy5mb3JtYXQuIgorICAgIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNp
ZmljRm9ybWF0ID0gZHN0VGV4dHVyZURlc2MuZm9ybWF0OworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBpZiAoIVRleHR1cmU6OnJlZmVy
c1RvU2luZ2xlQXNwZWN0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiVGhhdCBhc3BlY3Qg
bXVzdCBiZSBhIHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKnIDI1
LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIVRleHR1cmU6OmlzVmFs
aWRJbWFnZUNvcHlEZXN0aW5hdGlvbihkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9u
LmFzcGVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gIlNldCBh
c3BlY3RTcGVjaWZpY0Zvcm1hdCB0byB0aGUgYXNwZWN0LXNwZWNpZmljIGZvcm1hdCBhY2NvcmRp
bmcgdG8gwqfigK8yNS4xLjIgRGVwdGgtc3RlbmNpbCBmb3JtYXRzLiIKKyAgICAgICAgYXNwZWN0
U3BlY2lmaWNGb3JtYXQgPSBUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdChkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9uLmFzcGVjdCk7CisgICAgfQorCisgICAgLy8gInZhbGlk
YXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJuIHRy
dWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGRlc3RpbmF0
aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQgaXMgbm90IGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAg
IGlmICghVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3Jt
YXQpKSB7CisgICAgICAgIC8vICJzb3VyY2Uub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRl
eGVsIGJsb2NrIHNpemUgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0
ZXhlbEJsb2NrU2l6ZSA9IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKGRzdFRleHR1cmVEZXNjLmZv
cm1hdCk7CisgICAgICAgIGlmIChzb3VyY2UubGF5b3V0Lm9mZnNldCAlIHRleGVsQmxvY2tTaXpl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBkc3RUZXh0
dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRl
eHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkgewor
ICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgICAgICBp
ZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVhciB0ZXh0dXJlIGRhdGEoc291cmNlLCBz
b3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBhc3BlY3RTcGVjaWZpY0Zvcm1hdCwgY29weVNpemUpIHN1
Y2NlZWRzLiIKKyAgICBpZiAoIVRleHR1cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoc291
cmNlLmxheW91dCwgZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5zaXplKCksIGFzcGVjdFNwZWNpZmlj
Rm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0
IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNF
RF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IHNvdXJj
ZS5sYXlvdXQubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0
aGUgZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAg
ICBpZiAoIXByZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gIklmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgor
ICAgIGlmICghdmFsaWRhdGVDb3B5QnVmZmVyVG9UZXh0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24s
IGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFu
ZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFs
aWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJl
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVzUGVyUm93
ID0gc291cmNlLmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tl
ZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdlciBzb3VyY2VCeXRlc1BlckltYWdlID0gc291cmNl
LmxheW91dC5yb3dzUGVySW1hZ2UgKiBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAg
TVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChk
ZXN0aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAg
ICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRM
QmxpdE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25EZXB0aEZyb21EZXB0aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gbG9naWNhbFNpemUgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLmxvZ2ljYWxU
ZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoZGVzdGluYXRpb24ubWlwTGV2ZWwpOworICAgIGF1dG8g
d2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLndpZHRoLCBsb2dpY2FsU2l6ZS53aWR0
aCk7CisgICAgYXV0byBoZWlnaHRGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmhlaWdodCwg
bG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBhdXRvIGRlcHRoRm9yTWV0YWwgPSBzdGQ6Om1pbihj
b3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMsIGxvZ2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVy
cyk7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvbkRlc2NyaXB0b3IgPSBmcm9tQVBJKGRlc3RpbmF0
aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRGVzY3Jp
cHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7Cisg
ICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFs
L210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9i
amMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5k
IGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtl
KHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsg
KytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMu
CisgICAgICAgICAgICBhdXRvIHNvdXJjZU9mZnNldCA9IHN0YXRpY19jYXN0PE5TVUludGVnZXI+
KHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlKTsKKyAg
ICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25TbGljZSA9IGRlc3RpbmF0aW9uLm9yaWdp
bi56ICsgbGF5ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAg
ICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpmcm9tQVBJKHNvdXJjZS5idWZmZXIpLmJ1ZmZlcigpCisg
ICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAgICAgICAg
IHNvdXJjZUJ5dGVzUGVyUm93OnNvdXJjZUJ5dGVzUGVyUm93CisgICAgICAgICAgICAgICAgc291
cmNlQnl0ZXNQZXJJbWFnZTpzb3VyY2VCeXRlc1BlckltYWdlCisgICAgICAgICAgICAgICAgc291
cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEkoZGVz
dGluYXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25T
bGljZTpkZXN0aW5hdGlvblNsaWNlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpk
ZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRl
c3RpbmF0aW9uT3JpZ2luCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lv
bl8yRDogeworICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRh
dGlvbi9tZXRhbC9tdGxibGl0Y29tbWFuZGVuY29kZXIvMTQwMDc3MS1jb3B5ZnJvbWJ1ZmZlcj9s
YW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMkQgdGV4dHVyZSwg
ZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uo
d2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0
aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRp
b24ub3JpZ2luLnksIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIg
PCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgYXV0byBzb3VyY2VP
ZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCArIGxh
eWVyICogc291cmNlQnl0ZXNQZXJJbWFnZSk7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3Rp
bmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAg
W21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJv
bUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNl
dDpzb3VyY2VPZmZzZXQKKyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VC
eXRlc1BlclJvdworICAgICAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0
ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAg
ICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUo
KQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAg
ICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3Vy
Y2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRo
Rm9yTWV0YWwpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFr
ZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9u
Lm9yaWdpbi56KTsKKyAgICAgICAgYXV0byBzb3VyY2VPZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJ
bnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCk7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlcgorICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAg
ICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgc291cmNlU2l6
ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50
ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAg
ICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgIG9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgQ29tbWFu
ZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdH
UFVFeHRlbnQzRCYgY29weVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9U
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKaW5kZXggNTZmYjA5NmUx
MjYzLi5jMWY5ZjBlYjI1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1
cmUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTU0LDkgKzU0LDIx
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRl
eHR1cmVGb3JtYXQpOyAvLyBUZXhlbHMKICAgICBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja0hl
aWdodChXR1BVVGV4dHVyZUZvcm1hdCk7IC8vIFRleGVscworICAgIC8vIEZvciBkZXB0aC1zdGVu
Y2lsIHRleHR1cmVzLCB0aGUgaW5wdXQgdmFsdWUgdG8gdGV4ZWxCbG9ja1NpemUoKQorICAgIC8v
IG5lZWRzIHRvIGJlIHRoZSBvdXRwdXQgb2YgYXNwZWN0U3BlY2lmaWNGb3JtYXQoKS4KKyAgICBz
dGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQpOyAvLyBCeXRl
cwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zRGVwdGhBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQp
OwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zU3RlbmNpbEFzcGVjdChXR1BVVGV4dHVyZUZvcm1h
dCk7CiAgICAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCk7CisgICAgc3RhdGljIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNpZmljRm9ybWF0
KFdHUFVUZXh0dXJlRm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCk7CisgICAgc3RhdGljIGJvb2wg
dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29u
c3QgV0dQVUV4dGVudDNEJik7CisgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29weVJh
bmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29uc3QgV0dQVUV4dGVudDNEJik7Cisg
ICAgc3RhdGljIGJvb2wgcmVmZXJzVG9TaW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQsIFdH
UFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkSW1hZ2VDb3B5RGVzdGlu
YXRpb24oV0dQVVRleHR1cmVGb3JtYXQsIFdHUFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZUxpbmVhclRleHR1cmVEYXRhKGNvbnN0IFdHUFVUZXh0dXJlRGF0YUxheW91
dCYsIHVpbnQ2NF90LCBXR1BVVGV4dHVyZUZvcm1hdCwgV0dQVUV4dGVudDNEKTsKKworICAgIFdH
UFVFeHRlbnQzRCBsb2dpY2FsTWlwbGV2ZWxTcGVjaWZpY1RleHR1cmVFeHRlbnQodWludDMyX3Qg
bWlwTGV2ZWwpOworICAgIFdHUFVFeHRlbnQzRCBwaHlzaWNhbE1pcGxldmVsU3BlY2lmaWNUZXh0
dXJlRXh0ZW50KHVpbnQzMl90IG1pcExldmVsKTsKIAogICAgIGlkPE1UTFRleHR1cmU+IHRleHR1
cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICAgICBjb25zdCBXR1BVVGV4dHVyZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3I7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0gYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9UZXh0dXJlLm1tCmluZGV4IDEyMDFkOTE0NjM3Yi4uY2U4MTc1YjkzYzZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1RleHR1cmUubW0KQEAgLTE0MzksNiArMTQzOSwxNjQgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8TVRMUGl4ZWxGb3JtYXQ+IHBpeGVsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IHRl
eHR1cmVGb3JtYXQKICAgICB9CiB9CiAKK3VpbnQzMl90IFRleHR1cmU6OnRleGVsQmxvY2tTaXpl
KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkgLy8gQnl0ZXMKK3sKKyAgICAvLyBGb3IgZGVwdGgt
c3RlbmNpbCB0ZXh0dXJlcywgdGhlIGlucHV0IHZhbHVlIHRvIHRoaXMgZnVuY3Rpb24KKyAgICAv
LyBuZWVkcyB0byBiZSB0aGUgb3V0cHV0IG9mIGFzcGVjdFNwZWNpZmljRm9ybWF0KCkuCisgICAg
QVNTRVJUKCFjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkgfHwgIWNvbnRhaW5zU3RlbmNpbEFz
cGVjdChmb3JtYXQpKTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SOFNpbnQ6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUjE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4U25vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
Ukc4U2ludDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
MzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcx
NlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgICAgICByZXR1cm4g
NDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlNp
bnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZVaW50OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkExNkZsb2F0OgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHQkEzMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ6CisgICAgICAgIHJldHVybiAxNjsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1N0ZW5jaWw4OgorICAgICAgICByZXR1cm4gMTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICAgICAgcmV0dXJu
IDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICAgICAgQVNT
RVJUKHBpeGVsRm9ybWF0KGZvcm1hdCkgPT0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQpOwor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVz
U3RlbmNpbDg6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFV
bm9ybVNyZ2I6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3Jn
YjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JB
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgICAgIHJldHVybiA4Owor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDNVJHU25vcm06CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9C
QzZIUkdCRmxvYXQ6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9y
bVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0I4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVNu
b3JtOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAgICAg
ICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM1eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzZ4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2
eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzh4NlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBV
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJV
bm9ybVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1VuZGVmaW5lZDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0ZvcmNlMzI6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1dH
UFVUZXh0dXJlRm9ybWF0IFRleHR1cmU6OmFzcGVjdFNwZWNpZmljRm9ybWF0KFdHUFVUZXh0dXJl
Rm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBz
Oi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2FzcGVjdC1zcGVjaWZpYy1mb3JtYXQKKworICAg
IHN3aXRjaCAoYXNwZWN0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAg
ICAgIHJldHVybiBmb3JtYXQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25s
eTogeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZW5jaWxTcGVjaWZpY0Zvcm1hdChmb3JtYXQp
OworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OiB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gZGVwdGhTcGVjaWZpY0Zvcm1hdChmb3JtYXQpOworICAgICAgICBBU1NFUlQocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgfQorfQorCiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNVExQaXhlbEZvcm1hdD4gZGVwdGhPbmx5QXNwZWN0TWV0YWxGb3JtYXQo
V0dQVVRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKHRleHR1cmVG
b3JtYXQpIHsKQEAgLTIxMjMsNiArMjI4MSwzOTAgQEAgdm9pZCBUZXh0dXJlOjpzZXRMYWJlbChT
dHJpbmcmJiBsYWJlbCkKICAgICBtX3RleHR1cmUubGFiZWwgPSBsYWJlbDsKIH0KIAorV0dQVUV4
dGVudDNEIFRleHR1cmU6OmxvZ2ljYWxNaXBsZXZlbFNwZWNpZmljVGV4dHVyZUV4dGVudCh1aW50
MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2Vi
LyNhYnN0cmFjdC1vcGRlZi1sb2dpY2FsLW1pcGxldmVsLXNwZWNpZmljLXRleHR1cmUtZXh0ZW50
CisKKyAgICBzd2l0Y2ggKG1fZGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRGltZW5zaW9uXzFEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNl
dCBleHRlbnQud2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2
ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9k
ZXNjcmlwdG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBl
eHRlbnQuaGVpZ2h0IHRvIDEuIgorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQg
ZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5
TGF5ZXJzLiIKKyAgICAgICAgICAgIG1fZGVzY3JpcHRvci5zaXplLmRlcHRoT3JBcnJheUxheWVy
cyB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5z
aXplLndpZHRoIOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisg
ICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6
ZS5oZWlnaHQg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmhlaWdodCA+PiBtaXBMZXZlbCksCisg
ICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gZGVzY3JpcHRv
ci5zaXplLmRlcHRoT3JBcnJheUxheWVycy4iCisgICAgICAgICAgICBtX2Rlc2NyaXB0b3Iuc2l6
ZS5kZXB0aE9yQXJyYXlMYXllcnMgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNE
OgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8g
bWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAg
IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lk
dGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIG1h
eCgxLCBkZXNjcmlwdG9yLnNpemUuaGVpZ2h0IOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAg
c3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS5oZWln
aHQgPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5
TGF5ZXJzIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJzIOKJqyBt
aXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEp
LCBtX2Rlc2NyaXB0b3Iuc2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgPj4gbWlwTGV2ZWwpIH07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQorfQor
CitXR1BVRXh0ZW50M0QgVGV4dHVyZTo6cGh5c2ljYWxNaXBsZXZlbFNwZWNpZmljVGV4dHVyZUV4
dGVudCh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIu
aW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1waHlzaWNhbC1taXBsZXZlbC1zcGVjaWZpYy10ZXh0
dXJlLWV4dGVudAorCisgICAgLy8gIkxldCBsb2dpY2FsRXh0ZW50IGJlIGxvZ2ljYWwgbWlwbGV2
ZWwtc3BlY2lmaWMgdGV4dHVyZSBleHRlbnQoZGVzY3JpcHRvciwgbWlwTGV2ZWwpLiIKKyAgICBh
dXRvIGxvZ2ljYWxFeHRlbnQgPSBsb2dpY2FsTWlwbGV2ZWxTcGVjaWZpY1RleHR1cmVFeHRlbnQo
bWlwTGV2ZWwpOworCisgICAgc3dpdGNoIChtX2Rlc2NyaXB0b3IuZGltZW5zaW9uKSB7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGggcm91bmRlZCB1
cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhlbCBibG9jayB3
aWR0aC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4
dGVudC53aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIDEuIgor
ICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxh
eWVycyB0byBsb2dpY2FsRXh0ZW50LmRlcHRoT3JBcnJheUxheWVycy4iCisgICAgICAgICAgICBs
b2dpY2FsRXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB9OworICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVu
dC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qg
bXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJs
b2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAg
ICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBsb2dpY2FsRXh0ZW50LmhlaWdodCBy
b3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVs
IGJsb2NrIGhlaWdodC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tIZWlnaHQobV9kZXNjcmlwdG9yLmZvcm1hdCks
IGxvZ2ljYWxFeHRlbnQuaGVpZ2h0KSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgdG8gbG9naWNhbEV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMuIgorICAg
ICAgICAgICAgbG9naWNhbEV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgfTsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8g
IlNldCBleHRlbnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVkIHVwIHRvIHRo
ZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVsIGJsb2NrIHdpZHRoLiIK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2YodGV4ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50Lndp
ZHRoKSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbG9naWNhbEV4dGVu
dC5oZWlnaHQgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y
4oCZcyB0ZXhlbCBibG9jayBoZWlnaHQuIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrSGVpZ2h0KG1fZGVzY3JpcHRv
ci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LmhlaWdodCkpLAorICAgICAgICAgICAgLy8gIlNldCBl
eHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFycmF5TGF5
ZXJzLiIKKyAgICAgICAgICAgIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIH07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQorfQor
CitzdGF0aWMgV0dQVUV4dGVudDNEIGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoY29u
c3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUpCit7CisgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jaW1hZ2Vjb3B5dGV4dHVyZS1zdWJyZXNvdXJj
ZS1zaXplCisKKyAgICAvLyAiSXRzIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoT3JBcnJheUxheWVy
cyBhcmUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBkZXB0aCwgcmVzcGVjdGl2ZWx5LCBvZiB0aGUg
cGh5c2ljYWwgc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUgc3VicmVzb3VyY2UgYXQg
bWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwuIgorICAgIHJldHVybiBmcm9t
QVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkucGh5c2ljYWxUZXh0dXJlU3VicmVzb3VyY2VF
eHRlbnQoaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCk7Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFs
aWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNv
cHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBz
Oi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1
aW1hZ2Vjb3B5dGV4dHVyZQorCisgICAgLy8gImJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2Nr
IHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQu
IgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhlaWdodCBvZiBpbWFnZUNvcHlUZXh0
dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIKKyAgICBhdXRvIGJsb2NrSGVpZ2h0
ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4
dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyBGSVhNRTogImltYWdlQ29weVRl
eHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4iCisKKyAgICAvLyAiaW1h
Z2VDb3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgW1tkZXNjcmlwdG9y
XV0ubWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuIgorICAgIGlmIChp
bWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0
dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnggbXVzdCBiZSBhIG11bHRpcGxlIG9m
IGJsb2NrV2lkdGguIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi54ICUgYmxvY2tX
aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUu
b3JpZ2luLnkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKyAgICBpZiAoaW1h
Z2VDb3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZv
cm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0LiIKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVy
ZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNhbXBsZUNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiIK
KyAgICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChmcm9tQVBJKGltYWdlQ29w
eVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCkKKyAgICAgICAgfHwgZnJvbUFQ
SShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5zYW1wbGVDb3VudCA+IDEp
IHsKKyAgICAgICAgLy8gIlRoZSBpbWFnZUNvcHlUZXh0dXJlIHN1YnJlc291cmNlIHNpemUgb2Yg
aW1hZ2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0byBjb3B5U2l6ZSIKKyAgICAgICAgYXV0byBzdWJy
ZXNvdXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGltYWdlQ29weVRl
eHR1cmUpOworICAgICAgICBpZiAoc3VicmVzb3VyY2VTaXplLndpZHRoICE9IGNvcHlTaXplLndp
ZHRoCisgICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuaGVpZ2h0ICE9IGNvcHlTaXplLmhl
aWdodAorICAgICAgICAgICAgfHwgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyAh
PSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6cmVmZXJzVG9T
aW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCBh
c3BlY3QpCit7CisgICAgc3dpdGNoIChhc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNw
ZWN0X0FsbDoKKyAgICAgICAgQVNTRVJUKFRleHR1cmU6OmNvbnRhaW5zRGVwdGhBc3BlY3QoZm9y
bWF0KSB8fCBUZXh0dXJlOjpjb250YWluc1N0ZW5jaWxBc3BlY3QoZm9ybWF0KSk7CisgICAgICAg
IGlmIChUZXh0dXJlOjpjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkgJiYgVGV4dHVyZTo6Y29u
dGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6Cisg
ICAgICAgIGlmICghVGV4dHVyZTo6Y29udGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICBpZiAoIVRleHR1cmU6OmNvbnRhaW5zRGVwdGhB
c3BlY3QoZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6aXNWYWxp
ZEltYWdlQ29weURlc3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1
cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3
ZWIvI2RlcHRoLWZvcm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkcxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
OFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZs
b2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJT
aW50OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIGFz
cGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBh
c3BlY3QgPT0gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFS
R0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdT
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
RVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JB
OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
NXg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNy
Z2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
OHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngx
MFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFsaWRh
dGVUZXh0dXJlQ29weVJhbmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlU
ZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3ZhbGlkYXRpbmctdGV4dHVyZS1jb3B5LXJhbmdlCisK
KyAgICAvLyAiTGV0IGJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdl
Q29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxv
Y2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1
cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyAiTGV0IGJsb2NrSGVp
Z2h0IGJlIHRoZSB0ZXhlbCBibG9jayBoZWlnaHQgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJl
LltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja0hlaWdodCA9IFRleHR1cmU6
OnRleGVsQmxvY2tIZWlnaHQoZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2Ny
aXB0b3IoKS5mb3JtYXQpOworCisgICAgLy8gIkxldCBzdWJyZXNvdXJjZVNpemUgYmUgdGhlIGlt
YWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLiIKKyAg
ICBhdXRvIHN1YnJlc291cmNlU2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUo
aW1hZ2VDb3B5VGV4dHVyZSk7CisKKyAgICAvLyAiKGltYWdlQ29weVRleHR1cmUub3JpZ2luLngg
KyBjb3B5U2l6ZS53aWR0aCkg4omkIHN1YnJlc291cmNlU2l6ZS53aWR0aCIKKyAgICAvLyBGSVhN
RTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3Jp
Z2luLnggKyBjb3B5U2l6ZS53aWR0aCkgPiBzdWJyZXNvdXJjZVNpemUud2lkdGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSArIGNv
cHlTaXplLmhlaWdodCkg4omkIHN1YnJlc291cmNlU2l6ZS5oZWlnaHQiCisgICAgLy8gRklYTUU6
IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdp
bi55ICsgY29weVNpemUuaGVpZ2h0KSA+IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueiArIGNv
cHlTaXplLmRlcHRoT3JBcnJheUxheWVycykg4omkIHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJy
YXlMYXllcnMiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYg
KChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
KSA+IHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vICJjb3B5U2l6ZS53aWR0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxv
Y2tXaWR0aC4iCisgICAgaWYgKGNvcHlTaXplLndpZHRoICUgYmxvY2tXaWR0aCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXplLmhlaWdodCBtdXN0IGJlIGEgbXVsdGlw
bGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChjb3B5U2l6ZS5oZWlnaHQgJSBibG9ja0hlaWdo
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
VGV4dHVyZTo6dmFsaWRhdGVMaW5lYXJUZXh0dXJlRGF0YShjb25zdCBXR1BVVGV4dHVyZURhdGFM
YXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0ZVNpemUsIFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1h
dCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0
aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1saW5lYXItdGV4dHVyZS1k
YXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGgsIGJsb2NrSGVpZ2h0LCBhbmQgYmxvY2tTaXpl
IGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwgaGVpZ2h0LCBhbmQgc2l6ZSBvZiBmb3JtYXQuIgor
ICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmb3JtYXQpOwor
ICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZvcm1hdCk7
CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrU2l6ZShmb3JtYXQpOwor
CisgICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhhdCBjb3B5RXh0ZW50LndpZHRoIGlzIGEgbXVsdGlw
bGUgb2YgYmxvY2tXaWR0aCBhbmQgY29weUV4dGVudC5oZWlnaHQgaXMgYSBtdWx0aXBsZSBvZiBi
bG9ja0hlaWdodC4iCisKKyAgICAvLyAid2lkdGhJbkJsb2NrcyBiZSBjb3B5RXh0ZW50LndpZHRo
IMO3IGJsb2NrV2lkdGguIgorICAgIGF1dG8gd2lkdGhJbkJsb2NrcyA9IGNvcHlFeHRlbnQud2lk
dGggLyBibG9ja1dpZHRoOworCisgICAgLy8gImhlaWdodEluQmxvY2tzIGJlIGNvcHlFeHRlbnQu
aGVpZ2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAgICBhdXRvIGhlaWdodEluQmxvY2tzID0gY29weUV4
dGVudC5oZWlnaHQgLyBibG9ja0hlaWdodDsKKworICAgIC8vICJieXRlc0luTGFzdFJvdyBiZSBi
bG9ja1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4iCisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFy
aXRobWV0aWMuCisgICAgYXV0byBieXRlc0luTGFzdFJvdyA9IGJsb2NrU2l6ZSAqIHdpZHRoSW5C
bG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAxIgorICAgIGlmIChoZWlnaHRJ
bkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRlc1BlclJvdyBtdXN0IGJlIHNw
ZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJSb3cgPT0gV0dQVV9DT1BZX1NU
UklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSIKKyAgICBpZiAoY29weUV4
dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQ
ZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBzcGVjaWZpZWQuIgorICAgICAg
ICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEIHx8
IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gIklmIHNwZWNpZmllZCIKKyAg
ICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKSB7
CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93
IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5yb3dzUGVySW1hZ2UgIT0gV0dQ
VV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8gImxheW91dC5yb3dzUGVySW1h
Z2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVpZ2h0SW5CbG9ja3MuIgorICAg
ICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodEluQmxvY2tzKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQgcmVxdWlyZWRCeXRlc0luQ29w
eSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkgPSAwOworCisgICAgLy8gIklm
IGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisgICAgaWYgKGNvcHlFeHRlbnQu
ZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAiTGV0IGJ5dGVzUGVySW1hZ2Ug
YmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVySW1hZ2UuIgorICAgICAgICAv
LyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgYXV0byBieXRlc1Blcklt
YWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQZXJJbWFnZTsKKworICAgICAg
ICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVzUGVySW1hZ2Ugw5cgKGNvcHlF
eHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIMOiwojCkiAxKS4iCisgICAgICAgIGF1dG8gYnl0ZXNC
ZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5
TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9yZUxhc3RJbWFnZSB0byBy
ZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRlc0luQ29weSArPSBieXRl
c0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29weUV4dGVudC5kZXB0aE9y
QXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMg
PiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEiCisgICAgICAgIGlmICho
ZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQgbGF5b3V0LmJ5dGVzUGVy
Um93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRCeXRlc0luQ29weS4iCisg
ICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5ieXRlc1BlclJvdyAqICho
ZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIklmIGhlaWdodElu
QmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4gMCkgeworICAgICAgICAg
ICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAg
ICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RSb3c7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG5v
dCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVxdWlyZWRCeXRlc0luQ29w
eSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsgcmVxdWlyZWRCeXRlc0lu
Q29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViR1BVCiAKICNwcmFnbWEgbWFyayBXR1BVIFN0dWJz
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455954</attachid>
            <date>2022-03-28 14:10:39 -0700</date>
            <delta_ts>2022-03-30 00:51:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>36709</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGVhYzQ1YjU3MDRhNGQwNmU3ZGZiZGRjZTQzOGUxMTVkMWEwMGY3M2IKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDI4
IDEzOjU4OjU1IDIwMjIgLTA3MDAKCiAgICBQYXJ0IDMKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDZhODAzZjJhZGM3
YS4uM2EzNTU4YmNkYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIyLTAzLTI4ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKCkgYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzg0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJU
b1RleHR1cmUoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCisgICAgICAgIFRoZXJlIGFyZSBhIGJ1
bmNoIG9mIGhlbHBlciB2YWxpZGF0aW9uIGZ1bmN0aW9ucyBhZGRlZCBhcyBwdWJsaWMgc3RhdGlj
IG1lbWJlcnMgb2YgVGV4dHVyZQorICAgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBiZSBuZWVkZWQg
Zm9yIFF1ZXVlOjp3cml0ZVRleHR1cmUoKSBsYXRlci4gVGhlcmUgYXJlIGxpbmtzIGFuZCBxdW90
ZXMKKyAgICAgICAgZnJvbSB0aGUgc3BlYyB3aGVyZSBhcHByb3ByaWF0ZS4KKworICAgICAgICAq
IFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6dmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1
cmUpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVy
ZSk6CisgICAgICAgICogV2ViR1BVL1RleHR1cmUuaDoKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVy
ZS5tbToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUpOgorICAgICAg
ICAoV2ViR1BVOjpUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCk6CisgICAg
ICAgIChXZWJHUFU6OmltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUpOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjp2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpUZXh0dXJlOjpyZWZlcnNUb1NpbmdsZUFzcGVjdCk6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OmlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OlRl
eHR1cmU6OnZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZSk6CisgICAgICAgIChXZWJHUFU6OlRleHR1
cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorCiAyMDIyLTAzLTI4ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gSW1wbGVt
ZW50IFRleHR1cmU6OmNyZWF0ZVZpZXcoKSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggOTY5OGM4YTA5OWZmLi5lMTI2M2FkZDBh
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCkBAIC0xNTgsMTEgKzE1
OCwyMDAgQEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvQnVmZmVyKGNvbnN0IEJ1
ZmZlciYgc291cmNlLCB1aW50NjRfdCBzb3VyY2VPZmYKICAgICBbbV9ibGl0Q29tbWFuZEVuY29k
ZXIgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigpIHNvdXJjZU9mZnNldDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZzZXQpIHRvQnVmZmVyOmRlc3RpbmF0aW9uLmJ1ZmZlcigp
IGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRlc3RpbmF0aW9uT2Zm
c2V0KSBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKIH0KIAorc3RhdGljIGJv
b2wgdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgaW1h
Z2VDb3B5QnVmZmVyKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCisKKyAgICAvLyBG
SVhNRTogImltYWdlQ29weUJ1ZmZlci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZlci4i
CisKKyAgICAvLyAiaW1hZ2VDb3B5QnVmZmVyLmJ5dGVzUGVyUm93IG11c3QgYmUgYSBtdWx0aXBs
ZSBvZiAyNTYuIgorICAgIGlmIChpbWFnZUNvcHlCdWZmZXIubGF5b3V0LmJ5dGVzUGVyUm93ICUg
MjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5
QnVmZmVyJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwg
Y29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRleHR1cmVE
ZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0IGF1
dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5kZXNjcmlw
dG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSBy
ZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNvdXJjZS5idWZmZXIuW1t1c2FnZV1d
IGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAoIShmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnVz
YWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNv
cHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlEc3QpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291
bnQgaXMgMS4iCisgICAgaWYgKGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJMZXQgYXNwZWN0U3BlY2lmaWNGb3JtYXQgPSBk
c3RUZXh0dXJlRGVzYy5mb3JtYXQuIgorICAgIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNp
ZmljRm9ybWF0ID0gZHN0VGV4dHVyZURlc2MuZm9ybWF0OworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBpZiAoIVRleHR1cmU6OnJlZmVy
c1RvU2luZ2xlQXNwZWN0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiVGhhdCBhc3BlY3Qg
bXVzdCBiZSBhIHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKnIDI1
LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIVRleHR1cmU6OmlzVmFs
aWRJbWFnZUNvcHlEZXN0aW5hdGlvbihkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9u
LmFzcGVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gIlNldCBh
c3BlY3RTcGVjaWZpY0Zvcm1hdCB0byB0aGUgYXNwZWN0LXNwZWNpZmljIGZvcm1hdCBhY2NvcmRp
bmcgdG8gwqfigK8yNS4xLjIgRGVwdGgtc3RlbmNpbCBmb3JtYXRzLiIKKyAgICAgICAgYXNwZWN0
U3BlY2lmaWNGb3JtYXQgPSBUZXh0dXJlOjphc3BlY3RTcGVjaWZpY0Zvcm1hdChkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9uLmFzcGVjdCk7CisgICAgfQorCisgICAgLy8gInZhbGlk
YXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJuIHRy
dWUuIgorICAgIGlmICghVGV4dHVyZTo6dmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGRlc3RpbmF0
aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQgaXMgbm90IGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAg
IGlmICghVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3Jt
YXQpKSB7CisgICAgICAgIC8vICJzb3VyY2Uub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRl
eGVsIGJsb2NrIHNpemUgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0
ZXhlbEJsb2NrU2l6ZSA9IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKGRzdFRleHR1cmVEZXNjLmZv
cm1hdCk7CisgICAgICAgIGlmIChzb3VyY2UubGF5b3V0Lm9mZnNldCAlIHRleGVsQmxvY2tTaXpl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBkc3RUZXh0
dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRl
eHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkgewor
ICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgICAgICBp
ZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVhciB0ZXh0dXJlIGRhdGEoc291cmNlLCBz
b3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBhc3BlY3RTcGVjaWZpY0Zvcm1hdCwgY29weVNpemUpIHN1
Y2NlZWRzLiIKKyAgICBpZiAoIVRleHR1cmU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoc291
cmNlLmxheW91dCwgZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5zaXplKCksIGFzcGVjdFNwZWNpZmlj
Rm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0
IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNF
RF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IHNvdXJj
ZS5sYXlvdXQubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0
aGUgZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAg
ICBpZiAoIXByZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gIklmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgor
ICAgIGlmICghdmFsaWRhdGVDb3B5QnVmZmVyVG9UZXh0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24s
IGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFu
ZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFs
aWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJl
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVzUGVyUm93
ID0gc291cmNlLmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tl
ZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdlciBzb3VyY2VCeXRlc1BlckltYWdlID0gc291cmNl
LmxheW91dC5yb3dzUGVySW1hZ2UgKiBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAg
TVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChk
ZXN0aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAg
ICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRM
QmxpdE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25EZXB0aEZyb21EZXB0aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gbG9naWNhbFNpemUgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLmxvZ2ljYWxU
ZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoZGVzdGluYXRpb24ubWlwTGV2ZWwpOworICAgIGF1dG8g
d2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLndpZHRoLCBsb2dpY2FsU2l6ZS53aWR0
aCk7CisgICAgYXV0byBoZWlnaHRGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmhlaWdodCwg
bG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBhdXRvIGRlcHRoRm9yTWV0YWwgPSBzdGQ6Om1pbihj
b3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMsIGxvZ2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVy
cyk7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvbkRlc2NyaXB0b3IgPSBmcm9tQVBJKGRlc3RpbmF0
aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRGVzY3Jp
cHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7Cisg
ICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFs
L210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9i
amMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5k
IGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtl
KHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsg
KytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMu
CisgICAgICAgICAgICBhdXRvIHNvdXJjZU9mZnNldCA9IHN0YXRpY19jYXN0PE5TVUludGVnZXI+
KHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlKTsKKyAg
ICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25TbGljZSA9IGRlc3RpbmF0aW9uLm9yaWdp
bi56ICsgbGF5ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAg
ICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpmcm9tQVBJKHNvdXJjZS5idWZmZXIpLmJ1ZmZlcigpCisg
ICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAgICAgICAg
IHNvdXJjZUJ5dGVzUGVyUm93OnNvdXJjZUJ5dGVzUGVyUm93CisgICAgICAgICAgICAgICAgc291
cmNlQnl0ZXNQZXJJbWFnZTpzb3VyY2VCeXRlc1BlckltYWdlCisgICAgICAgICAgICAgICAgc291
cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEkoZGVz
dGluYXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25T
bGljZTpkZXN0aW5hdGlvblNsaWNlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpk
ZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRl
c3RpbmF0aW9uT3JpZ2luCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lv
bl8yRDogeworICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRh
dGlvbi9tZXRhbC9tdGxibGl0Y29tbWFuZGVuY29kZXIvMTQwMDc3MS1jb3B5ZnJvbWJ1ZmZlcj9s
YW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMkQgdGV4dHVyZSwg
ZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uo
d2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0
aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRp
b24ub3JpZ2luLnksIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIg
PCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgYXV0byBzb3VyY2VP
ZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCArIGxh
eWVyICogc291cmNlQnl0ZXNQZXJJbWFnZSk7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3Rp
bmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAg
W21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJv
bUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNl
dDpzb3VyY2VPZmZzZXQKKyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VC
eXRlc1BlclJvdworICAgICAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0
ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAg
ICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUo
KQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAg
ICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3Vy
Y2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRo
Rm9yTWV0YWwpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFr
ZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9u
Lm9yaWdpbi56KTsKKyAgICAgICAgYXV0byBzb3VyY2VPZmZzZXQgPSBzdGF0aWNfY2FzdDxOU1VJ
bnRlZ2VyPihzb3VyY2UubGF5b3V0Lm9mZnNldCk7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlcgorICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAg
ICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgc291cmNlU2l6
ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50
ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAg
ICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgIG9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgQ29tbWFu
ZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdH
UFVFeHRlbnQzRCYgY29weVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9U
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKaW5kZXggNTZmYjA5NmUx
MjYzLi5jMWY5ZjBlYjI1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1
cmUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTU0LDkgKzU0LDIx
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRl
eHR1cmVGb3JtYXQpOyAvLyBUZXhlbHMKICAgICBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja0hl
aWdodChXR1BVVGV4dHVyZUZvcm1hdCk7IC8vIFRleGVscworICAgIC8vIEZvciBkZXB0aC1zdGVu
Y2lsIHRleHR1cmVzLCB0aGUgaW5wdXQgdmFsdWUgdG8gdGV4ZWxCbG9ja1NpemUoKQorICAgIC8v
IG5lZWRzIHRvIGJlIHRoZSBvdXRwdXQgb2YgYXNwZWN0U3BlY2lmaWNGb3JtYXQoKS4KKyAgICBz
dGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQpOyAvLyBCeXRl
cwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zRGVwdGhBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQp
OwogICAgIHN0YXRpYyBib29sIGNvbnRhaW5zU3RlbmNpbEFzcGVjdChXR1BVVGV4dHVyZUZvcm1h
dCk7CiAgICAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCk7CisgICAgc3RhdGljIFdHUFVUZXh0dXJlRm9ybWF0IGFzcGVjdFNwZWNpZmljRm9ybWF0
KFdHUFVUZXh0dXJlRm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCk7CisgICAgc3RhdGljIGJvb2wg
dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29u
c3QgV0dQVUV4dGVudDNEJik7CisgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29weVJh
bmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiwgY29uc3QgV0dQVUV4dGVudDNEJik7Cisg
ICAgc3RhdGljIGJvb2wgcmVmZXJzVG9TaW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQsIFdH
UFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkSW1hZ2VDb3B5RGVzdGlu
YXRpb24oV0dQVVRleHR1cmVGb3JtYXQsIFdHUFVUZXh0dXJlQXNwZWN0KTsKKyAgICBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZUxpbmVhclRleHR1cmVEYXRhKGNvbnN0IFdHUFVUZXh0dXJlRGF0YUxheW91
dCYsIHVpbnQ2NF90LCBXR1BVVGV4dHVyZUZvcm1hdCwgV0dQVUV4dGVudDNEKTsKKworICAgIFdH
UFVFeHRlbnQzRCBsb2dpY2FsTWlwbGV2ZWxTcGVjaWZpY1RleHR1cmVFeHRlbnQodWludDMyX3Qg
bWlwTGV2ZWwpOworICAgIFdHUFVFeHRlbnQzRCBwaHlzaWNhbE1pcGxldmVsU3BlY2lmaWNUZXh0
dXJlRXh0ZW50KHVpbnQzMl90IG1pcExldmVsKTsKIAogICAgIGlkPE1UTFRleHR1cmU+IHRleHR1
cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICAgICBjb25zdCBXR1BVVGV4dHVyZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3I7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0gYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9UZXh0dXJlLm1tCmluZGV4IDEyMDFkOTE0NjM3Yi4uY2U4MTc1YjkzYzZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1RleHR1cmUubW0KQEAgLTE0MzksNiArMTQzOSwxNjQgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8TVRMUGl4ZWxGb3JtYXQ+IHBpeGVsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IHRl
eHR1cmVGb3JtYXQKICAgICB9CiB9CiAKK3VpbnQzMl90IFRleHR1cmU6OnRleGVsQmxvY2tTaXpl
KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkgLy8gQnl0ZXMKK3sKKyAgICAvLyBGb3IgZGVwdGgt
c3RlbmNpbCB0ZXh0dXJlcywgdGhlIGlucHV0IHZhbHVlIHRvIHRoaXMgZnVuY3Rpb24KKyAgICAv
LyBuZWVkcyB0byBiZSB0aGUgb3V0cHV0IG9mIGFzcGVjdFNwZWNpZmljRm9ybWF0KCkuCisgICAg
QVNTRVJUKCFjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkgfHwgIWNvbnRhaW5zU3RlbmNpbEFz
cGVjdChmb3JtYXQpKTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SOFNpbnQ6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUjE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4U25vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
Ukc4U2ludDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
MzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcx
NlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgICAgICByZXR1cm4g
NDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlNp
bnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZVaW50OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkExNkZsb2F0OgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHQkEzMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ6CisgICAgICAgIHJldHVybiAxNjsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1N0ZW5jaWw4OgorICAgICAgICByZXR1cm4gMTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICAgICAgcmV0dXJu
IDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICAgICAgQVNT
RVJUKHBpeGVsRm9ybWF0KGZvcm1hdCkgPT0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQpOwor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVz
U3RlbmNpbDg6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFV
bm9ybVNyZ2I6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3Jn
YjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JB
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgICAgIHJldHVybiA4Owor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDNVJHU25vcm06CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9C
QzZIUkdCRmxvYXQ6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9y
bVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0I4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVNu
b3JtOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAgICAg
ICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM1eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzZ4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2
eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzh4NlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBV
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJV
bm9ybVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1VuZGVmaW5lZDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0ZvcmNlMzI6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1dH
UFVUZXh0dXJlRm9ybWF0IFRleHR1cmU6OmFzcGVjdFNwZWNpZmljRm9ybWF0KFdHUFVUZXh0dXJl
Rm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBz
Oi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2FzcGVjdC1zcGVjaWZpYy1mb3JtYXQKKworICAg
IHN3aXRjaCAoYXNwZWN0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAg
ICAgIHJldHVybiBmb3JtYXQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25s
eTogeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZW5jaWxTcGVjaWZpY0Zvcm1hdChmb3JtYXQp
OworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OiB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gZGVwdGhTcGVjaWZpY0Zvcm1hdChmb3JtYXQpOworICAgICAgICBBU1NFUlQocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgfQorfQorCiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNVExQaXhlbEZvcm1hdD4gZGVwdGhPbmx5QXNwZWN0TWV0YWxGb3JtYXQo
V0dQVVRleHR1cmVGb3JtYXQgdGV4dHVyZUZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKHRleHR1cmVG
b3JtYXQpIHsKQEAgLTIxMjMsNiArMjI4MSwzOTAgQEAgdm9pZCBUZXh0dXJlOjpzZXRMYWJlbChT
dHJpbmcmJiBsYWJlbCkKICAgICBtX3RleHR1cmUubGFiZWwgPSBsYWJlbDsKIH0KIAorV0dQVUV4
dGVudDNEIFRleHR1cmU6OmxvZ2ljYWxNaXBsZXZlbFNwZWNpZmljVGV4dHVyZUV4dGVudCh1aW50
MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2Vi
LyNhYnN0cmFjdC1vcGRlZi1sb2dpY2FsLW1pcGxldmVsLXNwZWNpZmljLXRleHR1cmUtZXh0ZW50
CisKKyAgICBzd2l0Y2ggKG1fZGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRGltZW5zaW9uXzFEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNl
dCBleHRlbnQud2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2
ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9k
ZXNjcmlwdG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBl
eHRlbnQuaGVpZ2h0IHRvIDEuIgorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQg
ZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5
TGF5ZXJzLiIKKyAgICAgICAgICAgIG1fZGVzY3JpcHRvci5zaXplLmRlcHRoT3JBcnJheUxheWVy
cyB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5z
aXplLndpZHRoIOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisg
ICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6
ZS5oZWlnaHQg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmhlaWdodCA+PiBtaXBMZXZlbCksCisg
ICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gZGVzY3JpcHRv
ci5zaXplLmRlcHRoT3JBcnJheUxheWVycy4iCisgICAgICAgICAgICBtX2Rlc2NyaXB0b3Iuc2l6
ZS5kZXB0aE9yQXJyYXlMYXllcnMgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNE
OgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8g
bWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAg
IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lk
dGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIG1h
eCgxLCBkZXNjcmlwdG9yLnNpemUuaGVpZ2h0IOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAg
c3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS5oZWln
aHQgPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5
TGF5ZXJzIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJzIOKJqyBt
aXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEp
LCBtX2Rlc2NyaXB0b3Iuc2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgPj4gbWlwTGV2ZWwpIH07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQorfQor
CitXR1BVRXh0ZW50M0QgVGV4dHVyZTo6cGh5c2ljYWxNaXBsZXZlbFNwZWNpZmljVGV4dHVyZUV4
dGVudCh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIu
aW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1waHlzaWNhbC1taXBsZXZlbC1zcGVjaWZpYy10ZXh0
dXJlLWV4dGVudAorCisgICAgLy8gIkxldCBsb2dpY2FsRXh0ZW50IGJlIGxvZ2ljYWwgbWlwbGV2
ZWwtc3BlY2lmaWMgdGV4dHVyZSBleHRlbnQoZGVzY3JpcHRvciwgbWlwTGV2ZWwpLiIKKyAgICBh
dXRvIGxvZ2ljYWxFeHRlbnQgPSBsb2dpY2FsTWlwbGV2ZWxTcGVjaWZpY1RleHR1cmVFeHRlbnQo
bWlwTGV2ZWwpOworCisgICAgc3dpdGNoIChtX2Rlc2NyaXB0b3IuZGltZW5zaW9uKSB7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGggcm91bmRlZCB1
cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhlbCBibG9jayB3
aWR0aC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4
dGVudC53aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIDEuIgor
ICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxh
eWVycyB0byBsb2dpY2FsRXh0ZW50LmRlcHRoT3JBcnJheUxheWVycy4iCisgICAgICAgICAgICBs
b2dpY2FsRXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB9OworICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVu
dC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qg
bXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJs
b2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAg
ICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBsb2dpY2FsRXh0ZW50LmhlaWdodCBy
b3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVs
IGJsb2NrIGhlaWdodC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tIZWlnaHQobV9kZXNjcmlwdG9yLmZvcm1hdCks
IGxvZ2ljYWxFeHRlbnQuaGVpZ2h0KSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgdG8gbG9naWNhbEV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMuIgorICAg
ICAgICAgICAgbG9naWNhbEV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgfTsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8g
IlNldCBleHRlbnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVkIHVwIHRvIHRo
ZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVsIGJsb2NrIHdpZHRoLiIK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2YodGV4ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50Lndp
ZHRoKSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbG9naWNhbEV4dGVu
dC5oZWlnaHQgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y
4oCZcyB0ZXhlbCBibG9jayBoZWlnaHQuIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrSGVpZ2h0KG1fZGVzY3JpcHRv
ci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LmhlaWdodCkpLAorICAgICAgICAgICAgLy8gIlNldCBl
eHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFycmF5TGF5
ZXJzLiIKKyAgICAgICAgICAgIGxvZ2ljYWxFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIH07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQorfQor
CitzdGF0aWMgV0dQVUV4dGVudDNEIGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoY29u
c3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUpCit7CisgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jaW1hZ2Vjb3B5dGV4dHVyZS1zdWJyZXNvdXJj
ZS1zaXplCisKKyAgICAvLyAiSXRzIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoT3JBcnJheUxheWVy
cyBhcmUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBkZXB0aCwgcmVzcGVjdGl2ZWx5LCBvZiB0aGUg
cGh5c2ljYWwgc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUgc3VicmVzb3VyY2UgYXQg
bWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwuIgorICAgIHJldHVybiBmcm9t
QVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkucGh5c2ljYWxUZXh0dXJlU3VicmVzb3VyY2VF
eHRlbnQoaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCk7Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFs
aWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNv
cHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBz
Oi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1
aW1hZ2Vjb3B5dGV4dHVyZQorCisgICAgLy8gImJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2Nr
IHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQu
IgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhlaWdodCBvZiBpbWFnZUNvcHlUZXh0
dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIKKyAgICBhdXRvIGJsb2NrSGVpZ2h0
ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4
dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyBGSVhNRTogImltYWdlQ29weVRl
eHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4iCisKKyAgICAvLyAiaW1h
Z2VDb3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgW1tkZXNjcmlwdG9y
XV0ubWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuIgorICAgIGlmIChp
bWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0
dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnggbXVzdCBiZSBhIG11bHRpcGxlIG9m
IGJsb2NrV2lkdGguIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi54ICUgYmxvY2tX
aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUu
b3JpZ2luLnkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKyAgICBpZiAoaW1h
Z2VDb3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZv
cm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0LiIKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVy
ZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNhbXBsZUNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiIK
KyAgICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChmcm9tQVBJKGltYWdlQ29w
eVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCkKKyAgICAgICAgfHwgZnJvbUFQ
SShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5zYW1wbGVDb3VudCA+IDEp
IHsKKyAgICAgICAgLy8gIlRoZSBpbWFnZUNvcHlUZXh0dXJlIHN1YnJlc291cmNlIHNpemUgb2Yg
aW1hZ2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0byBjb3B5U2l6ZSIKKyAgICAgICAgYXV0byBzdWJy
ZXNvdXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGltYWdlQ29weVRl
eHR1cmUpOworICAgICAgICBpZiAoc3VicmVzb3VyY2VTaXplLndpZHRoICE9IGNvcHlTaXplLndp
ZHRoCisgICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuaGVpZ2h0ICE9IGNvcHlTaXplLmhl
aWdodAorICAgICAgICAgICAgfHwgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyAh
PSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6cmVmZXJzVG9T
aW5nbGVBc3BlY3QoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0LCBXR1BVVGV4dHVyZUFzcGVjdCBh
c3BlY3QpCit7CisgICAgc3dpdGNoIChhc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNw
ZWN0X0FsbDoKKyAgICAgICAgQVNTRVJUKFRleHR1cmU6OmNvbnRhaW5zRGVwdGhBc3BlY3QoZm9y
bWF0KSB8fCBUZXh0dXJlOjpjb250YWluc1N0ZW5jaWxBc3BlY3QoZm9ybWF0KSk7CisgICAgICAg
IGlmIChUZXh0dXJlOjpjb250YWluc0RlcHRoQXNwZWN0KGZvcm1hdCkgJiYgVGV4dHVyZTo6Y29u
dGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6Cisg
ICAgICAgIGlmICghVGV4dHVyZTo6Y29udGFpbnNTdGVuY2lsQXNwZWN0KGZvcm1hdCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICBpZiAoIVRleHR1cmU6OmNvbnRhaW5zRGVwdGhB
c3BlY3QoZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6aXNWYWxp
ZEltYWdlQ29weURlc3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1
cmVBc3BlY3QgYXNwZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3
ZWIvI2RlcHRoLWZvcm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkcxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
OFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZs
b2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJT
aW50OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIGFz
cGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBh
c3BlY3QgPT0gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFS
R0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdT
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
RVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JB
OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
NXg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNy
Z2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
OHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngx
MFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTo6dmFsaWRh
dGVUZXh0dXJlQ29weVJhbmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlU
ZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3ZhbGlkYXRpbmctdGV4dHVyZS1jb3B5LXJhbmdlCisK
KyAgICAvLyAiTGV0IGJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdl
Q29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxv
Y2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1
cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyAiTGV0IGJsb2NrSGVp
Z2h0IGJlIHRoZSB0ZXhlbCBibG9jayBoZWlnaHQgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJl
LltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja0hlaWdodCA9IFRleHR1cmU6
OnRleGVsQmxvY2tIZWlnaHQoZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2Ny
aXB0b3IoKS5mb3JtYXQpOworCisgICAgLy8gIkxldCBzdWJyZXNvdXJjZVNpemUgYmUgdGhlIGlt
YWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLiIKKyAg
ICBhdXRvIHN1YnJlc291cmNlU2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUo
aW1hZ2VDb3B5VGV4dHVyZSk7CisKKyAgICAvLyAiKGltYWdlQ29weVRleHR1cmUub3JpZ2luLngg
KyBjb3B5U2l6ZS53aWR0aCkg4omkIHN1YnJlc291cmNlU2l6ZS53aWR0aCIKKyAgICAvLyBGSVhN
RTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3Jp
Z2luLnggKyBjb3B5U2l6ZS53aWR0aCkgPiBzdWJyZXNvdXJjZVNpemUud2lkdGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSArIGNv
cHlTaXplLmhlaWdodCkg4omkIHN1YnJlc291cmNlU2l6ZS5oZWlnaHQiCisgICAgLy8gRklYTUU6
IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdp
bi55ICsgY29weVNpemUuaGVpZ2h0KSA+IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueiArIGNv
cHlTaXplLmRlcHRoT3JBcnJheUxheWVycykg4omkIHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJy
YXlMYXllcnMiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYg
KChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
KSA+IHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vICJjb3B5U2l6ZS53aWR0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxv
Y2tXaWR0aC4iCisgICAgaWYgKGNvcHlTaXplLndpZHRoICUgYmxvY2tXaWR0aCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXplLmhlaWdodCBtdXN0IGJlIGEgbXVsdGlw
bGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChjb3B5U2l6ZS5oZWlnaHQgJSBibG9ja0hlaWdo
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
VGV4dHVyZTo6dmFsaWRhdGVMaW5lYXJUZXh0dXJlRGF0YShjb25zdCBXR1BVVGV4dHVyZURhdGFM
YXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0ZVNpemUsIFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1h
dCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0
aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1saW5lYXItdGV4dHVyZS1k
YXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGgsIGJsb2NrSGVpZ2h0LCBhbmQgYmxvY2tTaXpl
IGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwgaGVpZ2h0LCBhbmQgc2l6ZSBvZiBmb3JtYXQuIgor
ICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmb3JtYXQpOwor
ICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZvcm1hdCk7
CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrU2l6ZShmb3JtYXQpOwor
CisgICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhhdCBjb3B5RXh0ZW50LndpZHRoIGlzIGEgbXVsdGlw
bGUgb2YgYmxvY2tXaWR0aCBhbmQgY29weUV4dGVudC5oZWlnaHQgaXMgYSBtdWx0aXBsZSBvZiBi
bG9ja0hlaWdodC4iCisKKyAgICAvLyAid2lkdGhJbkJsb2NrcyBiZSBjb3B5RXh0ZW50LndpZHRo
IMO3IGJsb2NrV2lkdGguIgorICAgIGF1dG8gd2lkdGhJbkJsb2NrcyA9IGNvcHlFeHRlbnQud2lk
dGggLyBibG9ja1dpZHRoOworCisgICAgLy8gImhlaWdodEluQmxvY2tzIGJlIGNvcHlFeHRlbnQu
aGVpZ2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAgICBhdXRvIGhlaWdodEluQmxvY2tzID0gY29weUV4
dGVudC5oZWlnaHQgLyBibG9ja0hlaWdodDsKKworICAgIC8vICJieXRlc0luTGFzdFJvdyBiZSBi
bG9ja1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4iCisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFy
aXRobWV0aWMuCisgICAgYXV0byBieXRlc0luTGFzdFJvdyA9IGJsb2NrU2l6ZSAqIHdpZHRoSW5C
bG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAxIgorICAgIGlmIChoZWlnaHRJ
bkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRlc1BlclJvdyBtdXN0IGJlIHNw
ZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJSb3cgPT0gV0dQVV9DT1BZX1NU
UklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSIKKyAgICBpZiAoY29weUV4
dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQ
ZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBzcGVjaWZpZWQuIgorICAgICAg
ICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEIHx8
IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gIklmIHNwZWNpZmllZCIKKyAg
ICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKSB7
CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93
IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5yb3dzUGVySW1hZ2UgIT0gV0dQ
VV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8gImxheW91dC5yb3dzUGVySW1h
Z2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVpZ2h0SW5CbG9ja3MuIgorICAg
ICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodEluQmxvY2tzKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQgcmVxdWlyZWRCeXRlc0luQ29w
eSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkgPSAwOworCisgICAgLy8gIklm
IGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisgICAgaWYgKGNvcHlFeHRlbnQu
ZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAiTGV0IGJ5dGVzUGVySW1hZ2Ug
YmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVySW1hZ2UuIgorICAgICAgICAv
LyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgYXV0byBieXRlc1Blcklt
YWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQZXJJbWFnZTsKKworICAgICAg
ICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVzUGVySW1hZ2Ugw5cgKGNvcHlF
eHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIMOiwojCkiAxKS4iCisgICAgICAgIGF1dG8gYnl0ZXNC
ZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5
TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9yZUxhc3RJbWFnZSB0byBy
ZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRlc0luQ29weSArPSBieXRl
c0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29weUV4dGVudC5kZXB0aE9y
QXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMg
PiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEiCisgICAgICAgIGlmICho
ZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQgbGF5b3V0LmJ5dGVzUGVy
Um93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRCeXRlc0luQ29weS4iCisg
ICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5ieXRlc1BlclJvdyAqICho
ZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIklmIGhlaWdodElu
QmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4gMCkgeworICAgICAgICAg
ICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAg
ICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RSb3c7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG5v
dCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVxdWlyZWRCeXRlc0luQ29w
eSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsgcmVxdWlyZWRCeXRlc0lu
Q29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViR1BVCiAKICNwcmFnbWEgbWFyayBXR1BVIFN0dWJz
Cg==
</data>
<flag name="review"
          id="484101"
          type_id="1"
          status="+"
          setter="kkinnunen"
    />
          </attachment>
      

    </bug>

</bugzilla>